应仅在需键盘导航且无合适原生语义标签的大型功能区块(如“订单确认表单”)中使用 role="region",并必须配 aria-label 或 aria-labelledby;禁用在等原生地标标签上,且须确保内部有可聚焦元素。

role="region" 什么时候该用,什么时候不该用
不是所有 <div> 都适合加 <code>role="region"。它只适用于**用户可能需要跳转到的、有独立功能或主题的大型内容区块**,比如“最新公告栏”“侧边工具面板”“评论提交区”。浏览器和读屏器会把带 role="region" 的元素列为可导航的区域(类似 <main></main> 或 <aside></aside>),但滥用会导致导航列表过长、干扰用户。WAI-ARIA 规范明确建议:优先用原生语义化标签(<section></section>、<article></article>、<aside></aside> 等),仅在无法用原生标签准确表达意图时,再用 role="region" 补充。
aria-label 必须提供具体、不可省略的描述文本
aria-label 是屏幕阅读器播报该区域的唯一依据,不能留空、不能用占位符(如 "region" 或 "section"),也不能依赖视觉上下文。以下写法是错的:<div role="region" aria-label="">
<br><code><div role="region" aria-label="区域">
<br>
正确做法是直说用途,例如:<br><code><div role="region" aria-label="订单确认与支付表单">
<br><code><div role="region" aria-label="实时聊天窗口,当前在线客服:小李">
<br>
注意:如果区块内已有可见标题(如 <code><h2>联系客服</h2>),更推荐用 aria-labelledby 关联,而非重复写 aria-label —— 否则容易造成播报冗余或不一致。
必须配合键盘焦点管理才能真正可用
仅加 role="region" 和 aria-label 不等于可访问。用户按 R(NVDA/JAWS)或 Ctrl+Alt+R(VoiceOver)能定位到该区域,但若内部没有可聚焦元素(如 <button></button>、<input>、或设置了 tabindex="0" 的容器),焦点会卡住或跳过。实操要点:
- 确保区域内至少有一个默认可聚焦的控件,或手动为关键容器添加
tabindex="0" - 若区域是模态弹窗类组件,打开后应立即将焦点移入(用
.focus()),关闭后恢复到触发点 - 避免在
role="region"上直接设tabindex="-1"—— 这会让区域无法被键盘导航到
示例(安全写法):<div role="region" aria-label="搜索筛选面板">
<br><code> <h3>筛选条件</h3> <label>价格区间 <input type="range"></label>











