我正在学习HTML5,并获得了一个将CSS Zen Gardens转换为HTML5语义版本的项目。我已经能够轻松转换大多数内容,但是底部的链接/导航给我带来了一些问题。转换/处理多个导航的最佳方法是什么?
<div id="linkList2">
<div id="lselect">
<h3 class="select"><span>Select a Design:</span></h3>
<ul>
<!-- Links -->
</ul>
</div>
<div id="larchives">
<h3 class="archives"><span>Archives:</span></h3>
<ul>
<!-- Links -->
</ul>
</div>
<div id="lresources">
<h3 class="resources"><span>Resources:</span></h3>
<ul>
<!-- Links -->
</ul>
</div>
</div>
[现在我陷入困境,认为linkList2应该是一个节,每个子div元素应该是nav元素,或者那个linkList2应该是nav,而子div元素应该是节。
如果将linkList2
设为section
,则您的语义是“此处是本节的导航”。请注意,nav
已经是sectioning content,因此将其包装在section
中将有些多余。
还请注意the spec说:
并非页面上的所有链接组都必须位于nav元素中-元素主要用于包含主要内容的部分导航块。
没有必要仅将每个链接集都放在nav
中。我认为您最好将linkList2
设为nav
,尽管我不会过多担心制作子元素section
:
<nav id="linkList2">
<div id="lselect">
<h1 class="select"><span>Select a Design:</span></h1>
<ul>
<!-- Links -->
</ul>
</div>
<div id="larchives">
<h1 class="archives"><span>Archives:</span></h1>
<ul>
<!-- Links -->
</ul>
</div>
<div id="lresources">
<h1 class="resources"><span>Resources:</span></h1>
<ul>
<!-- Links -->
</ul>
</div>
</nav>
[如上所述,nav
是章节内容,所以所有标题都应该是h1
,因为它们都是各自章节中的最高级别标题(我已经在上面进行了更改)。但是,从实用的可访问性的角度来看,我认为如果在标记中以h3
和h2
标题开头,请将它们保留为h1
。
另一种合适的方法是:
<div id="linkList2">
<nav id="lselect">
<h1 class="select"><span>Select a Design:</span></h1>
<ul>
<!-- Links -->
</ul>
</nav>
<nav id="larchives">
<h1 class="archives"><span>Archives:</span></h1>
<ul>
<!-- Links -->
</ul>
</nav>
<nav id="lresources">
<h1 class="resources"><span>Resources:</span></h1>
<ul>
<!-- Links -->
</ul>
</nav>
</div>
正如我之前提到的,不要用section
(或article
)包装,nav
就足够了。
最后一点,因为您的问题与语义有关。我知道您正在使用CSS Zen Garden的标记,因此重点可能是在新页面中具有与所有旧元素相对应的元素,以便所有样式表仍可使用,但是您应该知道这是not一个好的“语义标记”的例子。这是您应注意的一些事项:
span
元素以及(更可争议的是)子div
元素lselect
,larchives
和lresources
。id
和class
属性。例如,既不需要同时具有id
的lselect
和class
的select
,也可以只使用选择器#lselect h1
。linkList2
在语义上是可怕的id
。它不在链接列表上,它是否是第二个列表取决于其余所有标记。使用的id
和class
名称也是语义标记的一部分。<nav>
HTML5元素,因为这不仅是您想要的最语义的元素,而且还允许使用屏幕阅读器的人使用地标浏览页面(<nav>
将对应于[C0 ]地标)。