导航必须用包裹以满足语义和可访问性刚需,单层平铺、Flex布局、动态高亮当前页、移动端折叠菜单需兼顾键盘焦点与ARIA属性。

导航必须用 包裹,不是为了好看,是语义和可访问性刚需
浏览器、读屏软件、SEO 爬虫都靠 单层导航(比如首页、关于、联系)就平铺 浮动( 注意两点: HTML 静态文件没法自己知道“我在哪”,所以所有页面都硬写 注意边界情况: 实现 Markdown↔ HTML 互转,支持导出 PDF,用于用户请求的文档格式转换。 汉堡菜单(hamburger)本质是 JS 切换 容易忽略的点: 扁平化不是删标签,是删掉没意义的嵌套。一个 识别“这是导航区域”。不用它,只写一堆 ,等于把路标拆了扔地上——人还能猜,机器直接迷路。别用 ,别套 ——你给的 HTML 限制里没开 标签,硬加反而违规,还可能被 Lighthouse 报“结构不合法”。多层下拉?那是交互逻辑,HTML 层面仍保持单层结构,JS 控制显隐即可。
display: flex 是横向排列唯一靠谱选择,gap 比 margin 干净得多float)和行内块(display: inline-block)会因换行/空格产生不可控间隙,且无法垂直居中。Flex 一行代码就能对齐、等距、响应式收缩:justify-content: center 居中,align-items: center 垂直对齐,gap: 1.5rem 控制项间距。
gap 在 IE 中不支持;如需兼容,改用 margin-right,并给最后一个 加 margin-right: 0
上设 white-space: nowrap,否则小屏会横向溢出,用户得拖着看当前页高亮不能写死,必须动态判断
window.location.pathname
class="active" 是错的。要么后端渲染时注入,要么前端 JS 匹配路径:document.querySelectorAll('nav a').forEach(link => {
if (link.href === window.location.origin + window.location.pathname) {
link.classList.add('active');
}
});
/ 要单独处理,否则 /about 也会匹配成功?ref=1)或哈希(#section)时,只比对 pathname 部分移动端折叠菜单不是布局问题,是交互叠加,基础结构不能妥协
class 显隐,不影响 HTML 结构。无论是否折叠, 内部仍是平铺的 ,样式上用 flex-direction: column 或 display: none 控制即可。
aria-expanded 和 aria-controls 标注按钮与菜单关系,读屏器才懂这是可展开区域 包进 或 —— 导航不是表单控件,语义混乱、几个 、一段 Flex 样式、一行路径判断脚本,就足够支撑绝大多数场景。复杂点在于语义边界的拿捏:比如搜索框该不该放 里?答案是“可以,但必须用 包裹并标注 role=search”,而不是图省事塞个 就完事。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










