在我最近关于 CSS 三角形面包屑 的文章的评论中,我用来创建它们的 HTML 标记(本质上)是
<ul class="breadcrumb">
<li><a href="#">Top Level</a></li>
<li><a href="#">Second Level</a></li>
<li><a href="#">Third Level</a></li>
<li>Current Item</li>
</ul>
… 该 HTML 不是语义化的。 将面包屑编码为无序列表,会让人感觉项目处于同一层次结构级别,就像是一行中的项目集一样。 面包屑中的项目并非如此,它们代表一条路径,每个链接都是最后一个链接的“子级”。
我认为这是一个很好的观点。 从语义上讲,无序列表确实感觉不对。 正如 Geert 所说,它将它们全部放在同一层次结构级别上。 要将每个菜单项清晰地放到它自己的级别上,需要像这样标记
<ul class="breadcrumb">
<li>
<a href="#">Top Level</a>
<ul>
<li>
<a href="#">Second Level</a>
<ul>
<li>
<a href="#">Third Level</a>
<ul>
<li>
Current Item
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
不过,这感觉很压倒性,不是吗? 我看不出它会有什么用,即使从技术上来说你可以使用它,并且可以根据你的需要以任何方式对其进行样式设置。
不,无序列表的“无序”部分才是更大的问题。 也许我们可以把它改成有序列表
<ol class="breadcrumb">
<li><a href="#">Top Level</a></li>
<li><a href="#">Second Level</a></li>
<li><a href="#">Third Level</a></li>
<li>Current Item</li>
</ol>
这感觉好多了。 面包屑按特定顺序排列,因此使用“有序”列表似乎很合适。 但是,我仍然不完全满意。 仅仅因为列表是 1、2、3 等,并不代表层次结构的层级。
几个人还提到了只使用链接和某种文本视觉分隔符。
<p class="breadcrumb">
<a href="#">Top Level</a> >
<a href="#">Second Level</a> >
<a href="#">Third Level</a> >
Current Item
</p>
在没有任何 CSS 样式的情况下,这可能是最有效的方式。 > 符号分隔符很好地指示了层次结构。 使用内联元素可以使面包屑像面包屑通常那样具有水平布局。 但是,这仍然不太令人满意,因为标记本身并没有很有意义地描述它包含的内容。
我想我会去看看谷歌是否有关于这个问题的建议。 毕竟,谷歌在其搜索结果中展示了面包屑

不出所料,它们实际搜索结果的标记只是一团乱麻(谷歌任何东西的标记都是一团乱麻)。 然而,他们确实对我们应该如何标记面包屑有一些说明。 他们推荐 HTML5 微数据,并提供以下示例
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/books" itemprop="url">
<span itemprop="title">Books</span>
</a> ›
<div itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/books/authors" itemprop="url">
<span itemprop="title">Authors</span>
</a> ›
<div itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="http://www.example.com/books/authors/stephenking" itemprop="url">
<span itemprop="title">Stephen King</span>
</a>
</div>
</div>
</div>
乍一看很笨拙,但实际上微数据就是为了这种目的而设计的。 我可能在这里使用 span
,而不是 div
包装器。
我不确定微数据和微格式是如何相互关联的,但似乎 微格式建议 只给包装器一个名为“breadcrumb”的类名,然后就完事了。
HTML5 有 更多关于该主题的说明(**参见下面的更新**)在 rel
属性中使用“up”值表示该元素是层次结构的一部分,并且还指示当前文档到引用文档的距离。
<nav>
<p>
<a href="/" rel="index up up up">Main</a> >
<a href="/products/" rel="up up">Products</a> >
<a href="/products/dishwashers/" rel="up">Dishwashers</a> >
<a>Second hand</a>
</p>
</nav>
nav
标签特别合适,上面所有代码示例从语义上来说都应该用它来包裹。 除此之外,这可能是我最满意的示例之一,因为它从语义上描述了面包屑的性质。 rel
标签专门用于描述元素之间的关系,因此非常合适。 此外,从视觉上看,在没有任何样式的情况下,面包屑的外观就实现了。
但**请注意**:rel/up 还没有最终确定,并且可能不会持久。 有一个 开放性问题,它表明使用多个“up”并不是一种非常干净的方式,并且 建议 使用诸如“up2”、“great-grandparent”甚至像 level="3"
这样的新属性正在流行起来。
**更新:** Nelson Menezes 写信告诉我 HTML5 和 rel="up"
已经停止使用。 参考资料:1 2
那么,我们现在处于什么阶段呢? 我想说还没有一种超级终极的最佳方式来处理面包屑标记。 希望很明显,这真的不是什么大问题。 只需选择一个适合你的方式,然后坚持下去。 我只是认为这是一个关于 HTML 的有趣话题。 如果你有任何关于这里没有展示的面包屑标记的想法,请分享!
我认为这是一个关于为了语义化而过度复杂化某些标记的有趣起点。
我通常使用无序列表,但我可以看出各种方法的优缺点,但总的来说,我认为我可能会坚持使用 UL。
J.
有那么多方法可以剥皮。 Chris,你是大师。 谢谢
嗨,我最喜欢的方法是第四个示例。 为了制作面包屑,我在段落标签中放置普通链接,并为当前页面使用 span 标签。
我认为我会选择 LI 内部的 UL。 这样你就可以添加网站的其余部分,并将其隐藏,然后使用一些 JS 在悬停时显示它们,例如。 这将是浏览网站的快速方法!
我也喜欢第四个示例,因为它将简单的标记与可访问性相平衡。 我正在考虑每个示例在禁用 CSS 后会是什么样子。 然而,这在样式方面有点困难。 我认为嵌套 UL 在表示面包屑的实际含义方面最具语义性,它可能在文本浏览器中看起来不那么美观,但它仍然有意义。 该标记看起来很吓人,但实际上并没有那么糟糕。 我会尝试像这样格式化它;
哎呀。 也许这样;
我通常使用你的第一个示例(如之前的三角形文章中所使用的那样)。 为什么它是否包含语义层次结构很重要呢?
语义化之所以重要,是因为我们的最终文档必须完美清晰地展现它所描述的内容。 这对于在没有 CSS 或其他技术帮助的情况下阅读该文档的人来说很重要,这些技术可以视觉地描述该内容是什么。 我想有可能,当一个用户面对一个没有表明它是面包屑的无序列表时,只会将其视为导航列表,而不会理解它代表的是层次结构。
如果我们要放弃尝试用 HTML 从语义上描述事物,那么我们就要放弃可访问性,我们也可能直接将页面上的所有内容都设为 <div>
非常有趣的观点,Chris!
我认为我们应该保持简单,因为简单的列表对我来说似乎已经足够语义化了,而且我不认为我自己(或其他开发人员)会很快在这种情况下使用分层列表。
几年前我主要使用嵌套列表,因为它在没有 CSS 的情况下也能很好地显示,但我停止了这种做法,因为它并不优雅。
我也不喜欢内联 > 字符,因为它似乎混合了内容和 UI。
因此,我决定使用 [ol],因为它简洁、易于设置样式,并且是最接近层次结构的语义等效项。
虽然我同意我们需要使用尽可能语义化的标记,但我认为其中一些“解决方案”过于复杂。 语义化完美和实际使用之间必须有一个平衡点。 至少对我来说,这可能是有序列表或者可能是方法 4。
说谷歌推荐微数据有点短视。 谷歌推荐微数据或 RDFa。 虽然我非常喜欢微数据的语法,但作为 motorcycle-superstore.com 的用户体验总监,我发现:虽然谷歌推荐微数据,但与 RDFa 相比,他们并不真正喜欢它——对于我们的特定目的——对产品和产品评论进行编目。
我希望这种情况在未来有所改变,但这是我们的经验。
我实际上不喜欢“有那么多方法可以剥皮”这个说法。
虽然这绝对是一篇有趣的文章,但我可能会继续使用 UL。 我同意 Adrian 的观点,即为了让网站完全语义化而进行的努力,往往会过度地使事情复杂化。 必须有一个平衡点。
“这对在没有 CSS 或其他技术帮助的情况下阅读该文档的人来说很重要,这些技术可以视觉地描述该内容是什么。”
我同意你的观点,但是,访问你网站的用户禁用 CSS(或无法使用 CSS)的可能性非常非常小。 此外,如果是这种情况,他们很可能会确定该列表是面包屑,因为其中包含的链接及其在页面结构中的位置。
引述:“访问你网站的用户禁用 CSS(或无法使用 CSS)的可能性非常非常小。”
例如,对于依靠屏幕阅读器进行访问的视障人士来说,语义代码对于屏幕阅读器解释代码的方式至关重要。无论是否简洁,如果不编写语义代码,都可能被视为歧视。这就是例如荷兰政府对其自身网站制定严格规则的原因,因为信息自由等等。
这就是 XenForo 社区论坛 上用于面包屑的语法,它似乎是一个很好的语法!
不过,该标记中的空 span 标签在语义上会被认为很差,对吧?
我一直以为 span 和 div 一样,没有任何语义值。不过我可能错了。
除了
fieldset
应该只在forms
中使用。用
div
替换fieldset
仍然是可行的。不过,该标记中的空 span 标签在语义上会被认为很差,对吧?
我认为标记面包屑最语义的方式是使用 HTML5 Nav 元素,就像你在第四个例子中所做的那样。但是,我认为最好使用有序列表(而不是具有冗余“向上”rel 属性的锚点标签)来表示一系列项目。
以下是我的做法…
更正:示例 6
在极少数情况下使用面包屑时,我使用有序列表。列表有明确的顺序,但它不是一个完整的导航系统,因此不值得使用嵌套列表。
在我看来,担心语义就像担心验证一样——如果它有用,就用它,或者担心它。它的有用性和重要性不言而喻,没有人反对它们,但也没有人让它们成为编码的全部目标。将 5 行代码变成需要 3 倍打字的 15-20 行代码,乍一看似乎很荒谬。如果我们真的担心它是否能被理解,那么在一行上添加一个简单的“注释”就可以了。
同意 HTML 应该具有语义性——它应该更多地由“当权者”来决定,给我们一些具有语义性的标签:例如 或 或 (线性列表) 或 等等。在我看来,这至少与“定义列表”同等重要,而工作组给了我们 。浏览器可以简单地解析 和 ,除了 的默认值为内联块。
抱歉——我无法习惯你们在评论框中处理 < 和 > 的方式——而且没有编辑功能。
上面最后一段应改为
同意 HTML 应该具有语义性——它应该更多地由“当权者”来决定,实际上给我们一些具有语义性的标签:例如 <breadcrumb> 或 <bread> 或 <ll> (线性列表) 或 <hl> (水平列表),等等。在我看来,这至少与“定义列表”同等重要,而工作组给了我们 <dl>!浏览器可以简单地解析 <ll> 和 <ul> ,除了 的默认值为内联块。
说得太好了,我同意,这将是对 html5 标记的一个很好的补充。
也许
<nav role/class=”breadcrumb”<
似曾相识 1 2
哇,真的。我发誓我没看到!=)
塞德霍尔姆要气坏了。
面包屑标记的优秀示例,我们通常紧密遵循示例 4,尽管使用 div,我们知道我们应该真正将其更改为段落标签。LT
由于面包屑是链接列表,我会将链接放在列表项中,并且链接按特定顺序排列,因此我会使用有序列表元素,并且由于它是一个导航元素,我会将有序列表包装在一个具有 breadcrumb 类别的 nav 元素中( role=”breadcrumb” 是不是存在?)。
这是基于列表是“你在哪里”——老实说,这就是我,我相信大多数人如何填充面包屑轨迹的内容。
但是…我确信我在某处读到过,面包屑轨迹(顾名思义)不是你在哪里,而是你如何到达那里——这可能与网站的层次结构不匹配。在这种情况下,有序列表会更合适?
你怎么看?
你不应该转义“>”吗?只是个想法…
如果 HTML5 能消除显式地将每个嵌套列表包装在它自己的 ol 或 ul 中的需要,那就太好了。
我可能遗漏了一些重要内容,但这似乎包含足够的信息来传达你正在嵌套列表。这将允许语义地描述面包屑,并有助于减少代码膨胀。我想可能会有将有序列表嵌套在无序列表中的情况,但那时你只需在这种情况下显式地设置它。
你不能像那样将列表项放在列表项中。我认为你的计算机要着火了。
克里斯,说得很好。
W3C 本身使用这段代码 http://www.w3.org/standards/semanticweb/
很棒
你更喜欢使用 > 或图像或 » 作为面包屑分隔符吗?
HTML5
CSS
补充一下我之前的帖子。
可以使用 CSS 添加文本分隔符。
实体代码不适用于这种方法(使用 utf-8)。
CSS
克里斯,好文章,而且巧合的是,我今天在我的博客上也写过关于 的文章。我一直更喜欢嵌套无序列表方法,因为到目前为止提到的所有原因:它在语义上最合理,在没有 CSS 的情况下效果很好,并且易于样式化(我使用 :before 生成分隔符,因为它提供了更大的控制和变化,更少的打字,以及更高的一致性)。我感谢您对 HTML5 中可能方法的提示——我一定会将这篇文章链接到博客文章作为推荐读物。
我是 HTML 和 CSS 的新手。这是我尝试将面包屑改编到 IE 的方法。
CSS
HTML
我总是使用一组普通的链接,没有列表或任何花哨的东西。它最容易管理、更新和阅读。
…不过我应该指出:不要忘记对你的大于(gt; 或 >)符号进行编码。:D
实际上你并不需要。有时与打开的小于号(如 HTML 标签)匹配时会很好看,但只有打开的那个需要编码才能防止出现问题。