应仅对有独立功能、内容丰富且无更优语义标签的区块使用role="region",并必须配真实存在的可见标题ID实现aria-labelledby,确保屏幕阅读器可识别跳转。

用 role="region" 和 aria-labelledby 标记重要内容区块,核心是让屏幕阅读器用户能快速识别区块用途并跳转访问。关键不是随便加属性,而是确保区块有明确目的、有唯一可理解的标题,并且标题元素真实存在、可聚焦或语义合理。
先判断是否真需要 region 角色
不是所有区块都要加 role="region"。只有当该区块:
• 有独立功能或信息主题(比如“最新公告”“相关文章推荐”“表单操作区”)
• 内容较丰富,值得被单独列为导航目标
• 不属于已有语义化标签能准确表达的范围(如 、、 已足够时,优先用原生语义标签)
如果只是普通 div 包裹几行文字,加 region 反而增加噪音。
必须配一个真实存在的标题元素
aria-labelledby 的值必须指向页面中一个**已存在的、可见的、有实际文本内容的元素 ID**。不能指向空标签、display: none 元素或仅靠 CSS 生成的内容。
例如这样写是对的:
注意:id="news-title" 必须唯一;标题建议用 –,既利于屏幕阅读器识别层级,也兼顾视觉用户浏览习惯。
给 region 补充名称(可选但推荐)
如果标题文本不够明确(比如只写“更多”),或者想在辅助技术中显示更精准的描述,可以加 aria-label。它会覆盖 aria-labelledby 的内容,所以二者一般不同时用——优先用 aria-labelledby 保持内容与视觉一致,仅当无法修改标题文本时才用 aria-label。
例如:
测试是否生效
打开 NVDA 或 VoiceOver,按 D(NVDA)或 Ctrl + Option + U(VoiceOver)调出“区域”列表,确认你的区块出现在其中,且朗读出的名称和预期一致。顺便检查:
• 标题元素是否可聚焦(必要时加 tabindex="-1")
• 区块内没有意外打断焦点流的 tabindex="0" 干扰项
• 同一页不出现多个 region 缺少标识或 ID 冲突的情况










