【发布时间】:2016-08-17 02:40:50
【问题描述】:
自从我开始使用 HTML、CSS 等以来,我一直注意到的一件始终如一的事情是,导航栏几乎总是以列表的形式呈现,有以下几种变体:
HTML:
<ul>
<li><a href="link1.html">link 1</a></li>
<li><a href="link2.html">link 2</a></li>
<li><a href="link3.html">link 3</a></li>
<li><a href="link4.html">link 4</a></li>
</ul>
在<a>内也有<li>
CSS:
ul {
list-style-type: none;
}
li {
display: inline-block;
}
现在与 HTML5 基本相同,但在浏览器/屏幕阅读器中添加了 <nav> 标签或任何说“这是一些导航内容”的内容。
我的问题是,它们是否需要在具有现代 HTML5 语义和 ARIA 可访问性角色的列表中,还有什么好处?确定是链接列表,但还有其他实际原因吗?
我发现的原因:
-
语义、屏幕阅读器和可访问性:意见各不相同,特别是它如何使屏幕阅读器变得更好(或更糟……)。但是不应该在链接周围使用 HTML5 的
<nav>和/或相关的 ARIA 角色吗?它是否也需要专门显示为链接列表(无序或其他)? -
美学:在带有默认项目符号或没有 CSS 的垂直列表中,是的。但除此之外,替代标记(例如
<nav>中的<a>)而不是<ul>中的<li>将根据需要轻松或更容易地设置样式。 -
现有用途:在现有网站中大量使用(例如 StackExchange 网站、MDN 等等……)。
-
W3C
<nav>规范:表示链接不必在列表中,但可以。但是它也将<nav>的内容指定为'a section of links',是否也需要是'list of links'? -
向后兼容性:经常使用,应该得到广泛支持,HTML5 和 ARIA 可能不适用于旧浏览器/屏幕阅读器。
各种参考帖子:
- CSS Tricks - 2013-01 - 说他们不会使用列表。然后在导航中使用列表:-S
- Dustin Brewer article (archived) - 2011-06 - 广泛提及
- 堆栈溢出:Why should I use UL/LI in my HTML? 和 Should navigation bars always be implemented as lists? - 2012 - “是的,它是一个列表中的链接列表”。
- HTML5 spec
-
Bruce Lawson article - 2005 - 实际上显示列表工作得更好(尽管经常说“子弹”),但已经很老了……(我会尝试用
<nav>进行类似的测试) -
B Free More article、VJAKYSQQ article 和 Jim Doran article - 2011 - 基于 JAW 盲用户的讲话,并表示使用列表会使情况变得更糟,应该使用
<div>和<span>s (从 HTML5 之前开始)。更糟糕的是,它会尝试读出所有导航列表而不是页面的实际内容。
我可能会继续使用列表,因为这似乎是当前的现状,并希望能够向后(和向前?)兼容,我将尝试使用现代屏幕阅读器使用我自己的代码进行更多研究*。但是是否有理由在导航中使用更符合 HTML5 语义的列表?
此外,除了 JAWS,我还应该尝试哪些屏幕阅读器?
【问题讨论】:
-
“另外,除了 JAWS,我应该尝试哪些屏幕阅读器?”:开源 NVDA,在不同的浏览器(IE、FF、Chrome、Opera...)中测试两者(也包括 JAWS);使用 Safari 和其他浏览器在 MAC 上进行画外音;并且由于移动设备现在对于盲人用户来说也很常见:iOS 上的 Voiceover 和 Android 上的 Talkback(也可以在具有不同浏览器的移动设备上测试它,因为浏览器渲染引擎生成的可访问性 dom 略有不同......
标签: html navigation html-lists accessibility semantic-markup