微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

辅助功能 - aria-haspopup 菜单 - 菜单中除 menuitem 之外的交互元素

如何解决辅助功能 - aria-haspopup 菜单 - 菜单中除 menuitem 之外的交互元素

问题陈述和现有理解

我有一个弹出窗口,其中包含分成多个部分的不同类型的内容,并在单击按钮时触发。我试图在此实现中公开适当的可访问性/ aria 语义。 (它不是模态对话框,而是一个简单的就地弹出窗口)。根据我目前的研究,我认为这是有道理的:

  • aria-expanded 在触发按钮上
  • aria-haspopup="menu" 在触发按钮上
  • role="menu" 在弹出窗口中
  • role="menuitem" 在弹出窗口中的内容
  • 其他可选的键盘辅助功能

示例:

how it looks on twitter

code implementation

WAI ARIA 标准定义了一个实际的 role="menu" 小部件,但是这个 特定于触发操作或 功能。 ARIA 菜单只能包含菜单项、复选框菜单 项、单选按钮菜单项、单选按钮组和子菜单

另一方面,Bootstrap 的下拉菜单被设计为通用的 并适用于各种情况和标记结构。为了 例如,可以创建包含额外的下拉菜单 输入和表单控件,例如搜索字段或登录表单。为了 因此,Bootstrap 不期望(也不自动添加)任何 真正的 ARIA 菜单所需的角色和 aria- 属性。作者 必须自己包含这些更具体的属性

我的问题有点类似,但我需要一些帮助来决定菜单项的角色。

要求:

这是我的弹出菜单的样子:

my requirement

  • 有 2 个部分被分隔线隔开
  • 第一部分有一些信息和一些互动元素
  • 第二部分有链接
  • 对于第二部分,我对在每个部分使用 menuitem 角色非常满意
  • 我不太确定如何处理第一部分
  • 根据目前的理解:
    • 在创建可访问性树时忽略 menuitem 中没有 menu 角色的任何内容
    • menuitem 的任何子代都删除了它们的语义。因此,button 中的 menuitem 不会如此声明。
  • 与 twitter 实现一样,我可以通过不向它们添加 menuitem 角色来忽略第一部分中的非交互元素,但是我应该如何处理交互元素。例如,对于 Funds 项,我无法向整个容器添加 role="menuitem",因为这样 Add Funds 按钮将不适用于屏幕阅读器用户 (?) 。
  • 我可以将 role="menuitem" 添加到按钮,并确保添加更好的 aria-label,它会公布当前资金以及允许用户单击按钮添加资金,但我是对此不太确定。

问题:

  • 在这种情况下是否应该应用任何其他 ARIA 角色/可访问性语义?这个用例是一个符合 role="menu" 定义的菜单吗?
  • 如果 role="menu" 和 role="menuitem" 最适合这种设置,我应该如何处理组件第一部分中的交互元素?
  • 如果我的要求不适合任何弹出角色,是否可以不使用 aria-haspopup 公开它而只使用 aria-expanded ?

其他资源:

解决方法

我自己是屏幕阅读器用户,根据经验,与菜单相关的 ARIA 角色通常是不合适的,这会导致难以使用页面。 所以我最好的建议是不要在如此复杂的设置中使用它。使用 aria-expanded 可能是最合理的,当然也足够了。

只要它比非常简单的项目更进一步,它就不再是最严格意义上的菜单,屏幕阅读器在使它们可用和/或提供正确信息方面存在各种困难。 菜单应该完全由可以通过按下它们来激活的项目组成,仅此而已。 请记住,ARIA 的全局设计考虑到了原生 UI 元素。在本机(非 Web)程序中,菜单可以包含项目和分隔符,仅此而已。所以这里应该是一样的。 顺便说一下,链接的问题也是如此。

如果您在菜单中添加更复杂的元素,则会出现以下问题,而它们的答案根本不明显:

  • 在开始输入之前,是否需要按 Enter 键激活菜单内的文本字段?
  • 是否需要按 Tab 键才能到达项目内的按钮或链接?和文本字段或选择?
  • 如何在不激活当前选择的情况下打开和关闭菜单内的选择?很少有人知道 Alt+向下/向上箭头,也很少有人在他们的 Web 组件中实现它们

在菜单中添加更复杂的项目在 Office 2007+ 和 Windows 8+ 中提供了功能区。它们是与屏幕阅读器一起使用的噩梦。 您永远不知道是否必须按 Enter、Tab 或仅使用箭头键才能到达所需内容。 所以请不要在网络上复制这个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。