<nav>标签仅用于语义化标记主要导航链接组,不触发跳转或高亮;适用于主导航栏、侧边菜单等,不可用于零散链接或非导航内容;可嵌套<a>、<button>、<ul>、<form>等导航相关元素,但需确保无障碍可用。
html 只在页面存在**主要导航区块**时才用: 可以嵌套,但内容必须是导航功能相关的。W3C 明确允许 能,但前提是它没被 CSS 隐藏或 ARIA 属性干扰。默认情况下,支持无障碍的读屏软件(如 NVDA、VoiceOver)会把 真正容易被忽略的是:语义标签不等于功能实现。 立即学习“前端免费学习笔记(深入)”;<nav></strong> 标签不是用来“导航”的动作,它只是语义化地标记一组导航链接——浏览器、屏幕阅读器和搜索引擎靠它理解“这部分是跳转用的”,但它本身不触发跳转、不控制路由、也不自动高亮当前页。</p>
<H3>什么时候该用 <code><nav>
而不是 <div>
<nav> 适合包裹主导航栏、侧边菜单、页脚链接组这类用户会主动点击跳转的链接集合。如果只是几个零散链接(比如“返回顶部”“打印本页”),或纯 JS 控制的 Tab 切换面板,别硬套 <nav>。
<a href="#section2"> 锚点链接;轮播图下方的圆点指示器;表单里的“忘记密码?”链接<nav> 可以有多个(比如同时有顶部导航 + 移动端汉堡菜单),但每个都应代表独立的导航意图,别为了语义而堆砌
<nav> 里必须放 <a> 吗?能嵌套其他标签吗?<nav> 包含 <a>、<button>(如 JS 触发的菜单开关)、<ul>/<ol>(用于结构化列表),甚至 <form>(比如站内搜索框)。
<nav><ul><li><a href="/">首页</a></li></ul></nav>
<nav><form action="/search"><input name="q"><button type="submit">搜</button></form></nav>
<nav><p>欢迎访问我们的网站!</p></nav>(纯文本无导航行为)<header>)直接塞进 <nav>,logo 和搜索框若不属于导航逻辑,就该留在 <header> 里,而非 <nav> 内用了
<nav> 就能被屏幕阅读器识别为导航区?<nav> 当作一个可跳过的“导航区域”,用户按快捷键(如 Insert+F7)就能快速定位。
<nav aria-label="主菜单">...</nav>(加 aria-label 更明确)<nav style="display:none">...</nav> 或 <nav aria-hidden="true">...</nav>(直接屏蔽读屏)aria-expanded 和 aria-controls 配合管理状态,否则读屏用户可能卡在不可见的 <nav> 里<nav> 不解决路由、不处理高亮、不优化 SEO 权重——它只是告诉机器“这里是一组导航链接”,剩下的样式、交互、状态管理,全得你手动补上。











