我应该在<nav>中使用<ul>和<li>吗?


114

标题几乎可以解释这一点。

现在我们有了一个专用<nav>标签,

这是:

<nav>
  <ul>
    <li><a href="#foo">foo</a></li>
    <li><a href="#bar">bar</a></li>
    <li><a href="#baz">baz</a></li>
  </ul>
</nav>

有什么比以下更好的吗?

<nav>
  <a href="#foo">foo</a>
  <a href="#bar">bar</a>
  <a href="#baz">baz</a>
</nav>

我的意思是,假设我不需要某些CSS定位/填充的额外DOM级别,首选方式是什么,为什么?


这是一个很好的问题...对于HTML 4而言,标记没有意义,是否可以应用以前的最佳实践?
Guffa 2011年

Answers:


63

nav元素和列表提供不同的语义信息:

  • nav元素表明我们正在处理一个主要的导航块

  • 该列表表明该导航块内的链接形成了一个项目列表

http://w3c.github.io/html/sections.html#the-nav-element上,您可以看到nav元素也可以包含散文。

是的,在nav元素中包含列表确实可以增加含义。


非常感谢,这就是我所需要的!同样,罗伯特克(Robertc)关于屏幕阅读器宣布以下“ 3项清单”的评论也非常有用。
kikito 2011年


2
该链接似乎对我有用。确保阅读后续内容,该内容声明了列表,而没有列表是平局。css-tricks.com/wrapup-of-navigation-in-lists
RobW

我认为,如果<nav>没有<ul><li>,它将具有更多动态子菜单。如果您有多个不同类型和位置的菜单列表,该<nav>怎么办?我将这些组菜单列表作为<ul><li><nav>。因此,如果您的菜单正常,我会推荐<ul><li>
wonsuc

3

在这一点上,我将保留这些<ul><li>元素,原因是并非所有浏览器都支持HTML5标签。

例如,我在使用<header>标签时遇到了一个问题-Chrome和FF的工作原理很吸引人,但Opera却感到厌烦。

在所有浏览器完全支持HTML之前,我会坚持使用它们,但是要依靠旧版本向后兼容。


3
使用HTML 5 Shim javascript文件(remysharp.com/2009/01/07/html5-enabling-script)可以减轻Opera和IE等浏览器的任何可能的向后兼容性错误。
acconrad 2011年

但是,那么您的网站就对非干扰性脚本不友好了:)
Demian Brecht

1
你是说,直到IE8退出市场......所以像到2016 ...:)
森那维达斯

@Šime-恰好是:)而且,在浏览器中不再可以关闭Javascript;)
Demian Brecht

@ Agent_9191-今天,当我只想检查仍然有多少人使用IE7并猜测是什么时,我感到非常惊讶-在大多数国家/地区,像Opera或iPad safari这样的浏览器比IE7中的用户更多。我很高兴现在可以放弃对IE7的支持!IE8迟早会消失。这是我们将要面对的最后一个顽固的浏览器(IE9并不是很糟糕的代码)。
卡米洛·马丁

2

完全取决于您。如果您通常使用无序列表标记导航菜单,那么我想在<nav>元素内继续这样做。<nav>元素的目的是例如识别站点到计算机阅读器的导航,因此,使用列表还是仅使用链接都不重要。


+1是因为提到屏幕阅读器,navs和as现在与列表一样好。
卡米洛·马丁

2

对我来说,无序列表是多余的标记,实际上并不需要。当我查看HTML文档时,我希望它尽可能整洁并易于阅读。对于观看者来说,如果使用了适当的缩进,则已经很清楚显示了一个列表。因此,将UL添加到这些标签是不必要的,并且使得读取文档更加困难。

尽管您可能会获得一些灵活性,但我认为最好不要用非语义的ul类来夸大标记,并一口气对a元素进行样式设置。而且您没有任何借口:使用:before和:after伪选择器。

编辑:我已经知道一些ARIA屏幕阅读器对待列表的方式不同于简单的定位标记。如果您的网站适合残疾人士使用,我可能会考虑使用基于列表的方法。


1

不,它们是等效的。请记住,HTML 5向后兼容HTML 4列表,因此您可以随意使用它们。权衡是第二版本的代码更少。

如果您担心与浏览器的向后兼容性,请确保包括此填充程序以提供诸如<nav>和的标记功能<article>


8
链接列表提供了附加的语义和可访问性(例如,屏幕阅读器将在您进入导航时宣布“三项列表”)。
robertc 2011年

@robertc屏幕阅读器一点很不错。您应该把它放在答案上!我将其标记为正确。+1。
kikito 2011年

1

如果我们说的是“按书”,那就不行。您无需使用列表来标记您的导航。他们提供的唯一真正优势是在样式设计时提供了更高的灵活性。


1

我会保留<ul><li>标签,因为新的标签(<nav><section><article>等)都只是更多的语义版本<div>秒。

出于同样的原因,您不仅会在中加载大量链接<div>,而且还应该在<nav>标记中构建链接。


我过去使用<ul>而不是<div>中的许多链接的原因正是<ul>更具语义。但是现在<nav>更具语义。我很困惑。
kikito 2011年

2
<ul>的语义仍然比普通<a>链接的语义更多,但是<nav>的语义比<div>的语义更多。<ul> vs <a>与<nav> vs <div>是分开的
whostolemyhat 2011年

编写HTML时,不关心语义并不是解决问题的方法。
安德鲁·马歇尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.