You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

屏幕阅读器应播报菜单项链接为「首页、链接、菜单项」还是「首页、菜单项」

问题核心原因分析

你遇到的播报歧义本质上是ARIA角色使用不当导致的语义叠加问题,先明确WAI-ARIA规范对菜单相关角色的定义:
role="menu" 及配套的 menuitem 角色仅适用于应用类操作菜单(如软件右键菜单、编辑器顶部的文件/编辑菜单),不适用于普通网站的站点导航菜单,这是很多开发者容易踩的常见误区。


两种场景的规范实现与对应播报规则

场景1:普通站点导航菜单(90%以上的业务场景属于这个)

不需要添加任何menu相关的ARIA角色,直接用原生语义标签实现即可:

<nav aria-label="主导航">
  <ul>
    <li>
      <a href="/en-us/">Home</a>
    </li>
    <li>
      <a href="/en-us/search">Search</a>
    </li>
  </ul>
</nav>

规范播报方式:「Home、链接」,不需要播报「菜单项」,用户可以明确感知这是导航跳转控件,符合WCAG无障碍要求。

场景2:应用类操作菜单

如果确实是做应用内的操作菜单,需要把role="menuitem"直接加在可交互元素(也就是<a>标签)上,而不是父级<li>,避免语义叠加:

<ul role="menu" aria-label="操作菜单">
  <li>
    <a role="menuitem" href="/en-us/">Home</a>
  </li>
  <li>
    <a role="menuitem" href="/en-us/search">Search</a>
  </li>
</ul>

规范播报方式:「Home、菜单项」,此时menuitem角色会覆盖<a>的原生链接角色,不会额外播报链接,避免给用户造成角色认知混淆。


你当前代码的问题

你把role="menuitem"加在了<li>标签上,<li>本身不是可交互元素,内部的<a>保留了原生链接语义,两个控件语义叠加就导致了屏幕阅读器同时播报「链接、菜单项」,属于不符合规范的非预期表现。

内容的提问来源于stack exchange,提问作者superninja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:27:03