我正在学习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元素是部分。
答案 0 :(得分:5)
如果您将linkList2
设为section
,则您的语义为“此处为此部分的导航”。请注意nav
已经sectioning content,因此将其包装在section
中会有点多余。
另请注意,the spec说:
并非页面上的所有链接组都必须位于导航元素中 - element主要用于由major组成的部分 导航块。
为了它,不需要在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的标记,所以关键是你的新页面中的元素可以与所有旧元素相对应,这样所有的样式表仍然可以工作,但你应该知道这是不是< / em>良好的“语义标记”的一个例子。以下是您应该注意的一些事项:
span
元素以及(更可论地)孩子div
元素lselect
,larchives
和lresources
。id
和class
属性。例如,您无需同时拥有id
lselect
和class
select
,而只需使用选择器#lselect h1
。linkList2
在语义上是一个可怕的id
。它不在链表上,它是否是第二个依赖于标记的其余部分。使用的id
和class
名称也是语义标记的一部分。答案 1 :(得分:0)
您应该使用<nav>
HTML5元素,因为这不仅是您想要的内容的最语义化元素,而且还允许使用屏幕阅读器的人使用地标浏览页面(<nav>
对应于navigation
界标)。
现在,如果您的网站上有多个具有链接的区域(例如:主导航和辅助导航),则应确保正确标记了不同的<nav>
元素。这使屏幕阅读器可以正确地宣布地标(例如:“主要导航” ,“次要导航” ),而不是通常将所有内容都宣布为“导航” ),这可能会造成混淆。
要标记<nav>
元素,可以执行以下操作之一:
使用aria-label
为元素提供替代文本。
<nav aria-label=’primary’>
<ul>
...List on links here...
</ul>
</nav>
<nav aria-label=’secondary’>
<ul>
...List on links here...
</ul>
</nav>
如果屏幕上有可识别区域的文字(例如:“相关内容” ),则可以使用aria-labelledby
。
<nav aria-label="Site Menu">
<ul>
...List on links here...
</ul>
</nav>
<article>
<h1>Title</h1>
...
<nav aria-labelledby="id-1">
<h2 id="id-1">
Related Content
</h2>
<ul>
...List on links here...
</ul>
</nav>
</article>
这里有一些资源可以进一步解释这一点: