为什么HTML5中的导航栏是列表?
自从我开始使用HTML、CSS等以来,我一直注意到的一件一致的事情是,导航栏几乎总是以列表的形式呈现,在一些变体中: HTML:为什么HTML5中的导航栏是列表?,html,navigation,html-lists,accessibility,semantic-markup,Html,Navigation,Html Lists,Accessibility,Semantic Markup,自从我开始使用HTML、CSS等以来,我一直注意到的一件一致的事情是,导航栏几乎总是以列表的形式呈现,在一些变体中: HTML: 还有,-2013-01-内的,表示他们不会使用列表。然后在导航中使用列表:-S -2011-06-广泛引用 堆栈溢出:和-2012-“是的,这是一个链接列表,它在一个列表中” -2005-实际上显示列表工作得更好(尽管经常说“Bullet”),但它非常旧…(我将尝试使用执行类似的测试) ,和-2011-基于JAWs的一位盲人用户的讲话,他说使用列表会使
还有
,-2013-01-内的,表示他们不会使用列表。然后在导航中使用列表:-S
-2011-06-广泛引用
堆栈溢出:和-2012-“是的,这是一个链接列表,它在一个列表中”
-2005-实际上显示列表工作得更好(尽管经常说“Bullet”),但它非常旧…(我将尝试使用
执行类似的测试)
,和-2011-基于JAWs的一位盲人用户的讲话,他说使用列表会使情况变得更糟,应该使用
的&
s(从HTML5之前开始)。更糟糕的是,它试图读取所有导航列表,而不是页面的实际内容
我可能会继续使用列表,因为这似乎是目前的现状,并且希望能够向后(和向前?)兼容,我将尝试使用现代屏幕阅读器对自己的代码进行更多的研究*。但是有没有理由在导航中使用列表来更新HTML5语义
此外,除了JAWS之外,我还应该尝试哪些屏幕阅读器?为什么导航栏被实现为html列表(ul
)的问题没有在不使用列表的情况下如何实现它们那么重要
HTML菜单就像食物菜单,本质上是无序列表。您可以在其中导航并选择所需的元素。人们不会选择以列表的形式呈现菜单,这是一个事实:菜单就是一个列表。那么,为什么要使用另一个元素而不是ul
和li
某些浏览器实现的默认CSS定义使用一个项目符号表示它,这一事实与表示相关,但不会改变标记本身的含义
例如,以下是根据W3C对div
的定义:
div元素是流内容的通用容器,其本身并不表示任何内容
现在,表的定义如下:
table元素表示一个表;也就是说,具有多个维度的数据
这是ul的定义:
ul元素表示无序的项目列表;也就是说,改变项目顺序不会改变列表含义的列表
在3种定义中,更合适的标签是ul
此外,它还为屏幕阅读器提供了导航机制,如宣布层次结构、转到下一个/上一个元素等
关于屏幕阅读器,您也可以尝试NVDA、Chromevox和Voiceover。Hierarchy!
许多导航菜单包含多个级别(通常用于下拉菜单),即层次结构:
- 家
- 产品
- 实物产品
- 数字产品
- 接触
如果不使用ul
(使用嵌套的ul
),则无法在标记中表示此层次结构(除非导航很复杂/很长,在这种情况下,可以使用带有标题元素的子节)
您的导航(当前)没有多个级别?这不会突然改变它的语义,它仍然是相同的信息结构,只是只有一个级别,而不是两个或更多级别
列表的更多好处。
通过使用ul
,用户代理(如屏幕阅读器)有机会提供利用该结构的功能。例如,屏幕阅读器可以宣布列表中有多少项,并提供导航该列表的其他方式(例如,跳转到第一项/最后一项)
如果只使用了div
,很容易出现用户在没有注意到导航已经结束的情况下“跳出”导航的情况。通过使用ul
,可以非常清楚地知道开始和结束的位置,这对于导航菜单尤其重要,因为导航条目通常只有在与所有其他条目进行比较时才有意义(通常只有通过检查所有可用的导航链接并排除它们,才能找到目标的正确链接)
所有这些都与nav
无关。
nav
元素仅表示此部分包含导航链接。没有nav
(即HTML5之前的版本),用户代理只知道有一个列表。使用nav
,用户代理知道有一个列表+用于导航
此外,nav
当然不应该总是包含ul
,因为并非所有导航都是链接列表。见此:
nav
元素不必包含列表,它还可以包含其他类型的内容。在此导航块中,以散文形式提供链接:
<nav>
<h1>Navigation</h1>
<p>You are on my home page. To the north lies <a href="/blog">my
blog</a>, from whence the sounds of battle can be heard. To the east
you can see a large mountain, upon which many <a
href="/school">school papers</a> are littered. Far up thus mountain
you can spy a little figure who appears to be me, desperately
scribbling a <a href="/school/thesis">thesis</a>.</p>
<p>To the west are several exits. One fun-looking exit is labeled <a
href="http://games.example.com/">"games"</a>. Another more
boring-looking exit is labeled <a
href="http://isp.example.net/">ISP™</a>.</p>
<p>To the south lies a dark and dank <a href="/about">contacts
page</a>. Cobwebs cover its disused entrance, and at one point you
see a rat run quickly out of the page.</p>
</nav>
航行
你在我的主页上。北面躺着,从那里可以听到战斗的声音。向东
你可以看到一座大山,山上散落着许多垃圾。远山
你可以看到一个看起来像我的小人物,绝望地
涂鸦
西边有几个出口。一个有趣的出口被贴上了标签。再来一个
无聊的出口被贴上了标签
南面是一片阴暗潮湿的土地。蜘蛛网覆盖着它废弃的入口,在某一点上你可以
看到一只老鼠飞快地跑出了书页
“还有,除了JAWS,我还应该尝试哪些屏幕阅读器?”:开源NVDA,在不同的浏览器(即FF、Chrome、Opera等)中测试这两种(也包括JAWS);MAC上带有Safari和其他浏览器的Voiceover;如今,盲人用户也普遍使用移动设备:iOS和Talkb上的画外音