2021-05-18 04:33:52
使用HTML有序列表(<ol>)结合语义化标签和ARIA属性可高效实现面包屑导航,兼顾SEO与无障碍体验。 以下是具体实现方法及代码示例:
一、核心HTML结构使用<nav>包裹<ol>,通过aria-label标注导航类型,<li>内嵌链接或当前页标识:
<nav aria-label="Breadcrumb"> <ol> <li><a href="/">首页</a></li> <li><a href="/products/">产品</a></li> <li><span aria-current="page">手机</span></li> </ol></nav>去除默认编号,添加分隔符,并调整布局:
[aria-label="Breadcrumb"] ol { list-style: none; padding: 0; margin: 0; display: flex;}[aria-label="Breadcrumb"] li::after { content: " / "; color: #666; margin: 0 8px;}[aria-label="Breadcrumb"] li:last-child::after { content: "";}[aria-label="Breadcrumb"] a { color: #0074D9; text-decoration: none;}[aria-label="Breadcrumb"] a:hover { text-decoration: underline;}解析URL路径,自动填充面包屑内容:
function createBreadcrumb() { const path = window.location.pathname.split('/').filter(p => p); const root = { name: '首页', url: '/' }; const breadcrumb = document.querySelector('[aria-label="Breadcrumb"] ol'); // 添加根节点 breadcrumb.innerHTML = `<li><a href="${root.url}">${root.name}</a></li>`; let basePath = ''; path.forEach((segment, index) => { basePath += '/' + segment; const name = decodeURIComponent(segment); // 处理中文路径 const isLast = index === path.length - 1; const item = isLast ? `<li><span aria-current="page">${name}</span></li>` : `<li><a href="${basePath}">${name}</a></li>`; breadcrumb.insertAdjacentHTML('beforeend', item); });}document.addEventListener('DOMContentLoaded', createBreadcrumb);语义化优先级:
使用<ol>而非<ul>,因面包屑路径具有顺序性。
aria-current="page"替代传统<span class="current">,提升无障碍兼容性。
可访问性增强:
屏幕阅读器通过<nav>和aria-label快速识别导航类型。
aria-current明确当前位置,避免用户迷失。
SEO优化:
语义化结构帮助搜索引擎理解页面层级。
动态生成内容确保路径与URL一致,避免重复。
通过上述方法,可实现一个语义清晰、可访问性强、且能动态适应URL变化的面包屑导航系统。