仅在或顶级sectioning元素中才隐式为role="banner";必须唯一且仅含页面独有内容;需为全局主导航;搜索须用。

banner角色对应,但不是所有header都该用
浏览器和读屏软件把 <header></header> 当作隐式 role="banner",前提是它直接属于 或顶级 sectioning 内容(比如没被 @#@#@#@#@#@#@#@#@#@0@#@#@#@#@#@#@#@#@#@1 —— 这类上下文相关链接属于内容流一部分,读屏器会按顺序读,强行加 <nav></nav> 反而干扰跳转逻辑。
- 一个页面可以有多个
<nav></nav>,但每个必须有独立导航目的(如顶部主菜单 + 页脚分类导航) -
<nav></nav>内部不强制用<ul></ul>,但避免塞按钮、表单控件等非跳转目标 - 需要区分多个导航区时(如“主菜单”和“语言切换”),务必加
aria-label,例如<nav aria-label="语言选择"></nav>
search landmark没有原生标签,得手动声明
HTML5 没给 search 地标配专用标签,<form></form> 是唯一推荐载体。直接写 <form role="search"></form> 即可触发隐式 landmark,读屏器会识别为“搜索区域”,支持快捷键跳转(如 NVDA+Insert+S)。
别用 <div role="search"> —— form 元素自带语义和键盘交互能力(回车提交),div 没有。也别把整个搜索框组件(含按钮、筛选项)全包进去,只包裹真正执行搜索动作的输入域和提交控件。
<ul>
<li>搜索框若放在 <code><header></header> 里,仍需单独用 <form role="search"></form> 包裹,不能依赖 header 的 banner 角色
role="search",多个搜索框(如高级搜索弹窗)应通过 aria-hidden 或动态挂载控制可见性role="search",此时可加 aria-label="站内搜索" 保底











