HTML怎么创建面包屑导航_HTML breadcrumb结构教程【路径】

2次阅读

面包屑必须用 包裹并添加 aria-label=”breadcrumb”,路径项用 包裹,当前页用 标记,分隔符应通过 css 伪元素实现,避免使用文字或背景图。

HTML怎么创建面包屑导航_HTML breadcrumb结构教程【路径】

面包屑必须用 <nav></nav> 包裹,否则语义失效

屏幕阅读器和搜索引擎<nav></nav> 识别这是导航区域,光用 <div> 或 <code><ol></ol> 套着“首页 > 分类 > 文章”没用。W3C 明确要求面包屑属于辅助导航,必须用 <nav></nav>,且建议加 aria-label="Breadcrumb"

  • 错误写法:<div class="breadcrumb"> <a href="/">首页</a> > <a href="/cat">分类</a> </div>
  • 正确写法:<nav aria-label="Breadcrumb"><ol> <li><a href="/">首页</a></li> <li><a href="/cat">分类</a></li> </ol></nav>
  • <ol></ol><ul></ul> 更合适——路径有明确顺序,序号本身不显示,但语义更强

aria-current="page" 是当前页的唯一合法标记方式

很多人用 class="active"aria-disabled="true" 标当前页,这些对无障碍完全无效。只有 aria-current="page" 能让读屏软件明确告知用户“这是你当前所在位置”。

  • 当前页项必须是 <li> 内的最后一个 <span></span>(不能是 <a></a>
  • 示例:<li><span aria-current="page">JavaScript 入门</span></li>
  • 别写 aria-current="true"aria-current="location"——前者非法,后者语义不符

CSS 隐藏分隔符比用文字更可靠

>/ 当分隔符看似简单,但会干扰读屏、缩放时错位、RTL(从右向左)布局下翻转。CSS 伪元素才是标准解法。

  • 推荐写法:ol.breadcrumb li:not(:last-child)::after { content: "›"; margin: 0 0.5em; }
  • 分隔符用 (U+203A)比 > 更符合排版惯例,视觉上更轻
  • 如果要支持 RTL,加 direction: ltr;<nav></nav> 上,避免分隔符被镜像
  • 千万别用 background-image 画箭头——高对比度模式下可能消失

动态生成面包屑时,document.title 不能直接当最后一级文本

页面标题常含品牌词、分隔符或 seo 砌(如“js 教程 | 前端网 | 2024 最新”),直接塞进面包屑会破坏路径清晰度。

立即学习前端免费学习笔记(深入)”;

  • 应从路由或数据层取真实内容名,比如 Vue routerto.matched[to.matched.Length - 1].meta.title
  • React Router 可在 useMatches() 后过滤掉 layout route,取最后一个非 layout 的 handle?.crumb
  • 服务端渲染时,模板需单独传入 crumbTitle 字段,而非复用 title
  • 空值或过长(>20 字)必须截断并加 title 属性,否则 hover 无提示、读屏读不全

实际项目里最容易漏的是 aria-current<nav></nav> 的组合;一旦缺一个,整个面包屑对残障用户就等于不存在。路径层级超过 4 级时,还得考虑是否该折叠中间项——但那是交互逻辑的事了,html 结构本身只管把语义钉死。

text=ZqhQzanResources