关于菜单:
  • 的ARIA role =“ menuitem”
  • ARIA role=“menuitem” for or

  • 我发现了两种可能的解决方案:

  • 标签应用role =" menuitem":

  • some menuitem
  • 标签应用role =" menuitem":

  • some menuitem
  • 我认为第二种解决方案是合乎逻辑的,但是我不 而且我不能在更复杂的情况下(只有2个)使用它,因为子菜单不是标记的子代:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <li role="menuitem">some menuitem
    </li>

    <li role="menuitem" aria-haspopup="true">
      some menuitem with children
     
    <ul>

        <li role="menuitem">submenuitem
    </li>

        ...
     
    </ul>


    </li>

    这是正确的吗? 是否有其他可能的改进?

    HTML结构由我使用的框架定义,我无法更改它。


    回答问题

    如果您确实要将操作系统样式的菜单应用于应用程序,则要将role放在上。那是执行菜单项功能的项目(链接到另一个视图,页面或状态)。

    因此,您的第二个建议是正确的:

  • some menuitem
  • 曲线球

    话虽如此,我怀疑您真的不想要操作系统样式的菜单。要查看期望的内容,请查看WAI-ARIA创作惯例项目2.14菜单或菜单栏。

    通过调用这种菜单,您是在告诉屏幕阅读器的熟练用户,它将像操作系统菜单一样工作,这意味着您需要遵守下面的键盘命令(因此必须全部编码,ARIA不需要只是让浏览器尊重他们)。

    相反,请考虑仅使用