如何解决辅助功能 - aria-haspopup 菜单 - 菜单中除 menuitem 之外的交互元素
问题陈述和现有理解
我有一个弹出窗口,其中包含分成多个部分的不同类型的内容,并在单击按钮时触发。我试图在此实现中公开适当的可访问性/ aria 语义。 (它不是模态对话框,而是一个简单的就地弹出窗口)。根据我目前的研究,我认为这是有道理的:
-
aria-expanded
在触发按钮上 -
aria-haspopup="menu"
在触发按钮上 -
role="menu"
在弹出窗口中 -
role="menuitem"
在弹出窗口中的内容 - 其他可选的键盘辅助功能
示例:
- 此菜单按钮实现示例:https://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-links.html
- Twitter 使用
role="menu"
实现类似的弹出窗口
- bootstrap 关于下拉菜单的一般指南 https://getbootstrap.com/docs/4.0/components/dropdowns/#accessibility
WAI ARIA 标准定义了一个实际的 role="menu" 小部件,但是这个 特定于触发操作或 功能。 ARIA 菜单只能包含菜单项、复选框菜单 项、单选按钮菜单项、单选按钮组和子菜单。
另一方面,Bootstrap 的下拉菜单被设计为通用的 并适用于各种情况和标记结构。为了 例如,可以创建包含额外的下拉菜单 输入和表单控件,例如搜索字段或登录表单。为了 因此,Bootstrap 不期望(也不自动添加)任何 真正的 ARIA 菜单所需的角色和 aria- 属性。作者 必须自己包含这些更具体的属性。
我的问题有点类似,但我需要一些帮助来决定菜单项的角色。
要求:
这是我的弹出菜单的样子:
- 有 2 个部分被分隔线隔开
- 第一部分有一些信息和一些互动元素
- 第二部分有链接
- 对于第二部分,我对在每个部分使用
menuitem
角色非常满意 - 我不太确定如何处理第一部分
- 根据目前的理解:
- 与 twitter 实现一样,我可以通过不向它们添加
menuitem
角色来忽略第一部分中的非交互元素,但是我应该如何处理交互元素。例如,对于Funds
项,我无法向整个容器添加role="menuitem"
,因为这样Add Funds
按钮将不适用于屏幕阅读器用户 (?) 。 - 我可以将
role="menuitem"
添加到按钮,并确保添加更好的 aria-label,它会公布当前资金以及允许用户单击按钮添加资金,但我是对此不太确定。
问题:
- 在这种情况下是否应该应用任何其他 ARIA 角色/可访问性语义?这个用例是一个符合 role="menu" 定义的菜单吗?
- 如果 role="menu" 和 role="menuitem" 最适合这种设置,我应该如何处理组件第一部分中的交互元素?
- 如果我的要求不适合任何弹出角色,是否可以不使用
aria-haspopup
公开它而只使用 aria-expanded ?
其他资源:
- Accessibility: what can aria-haspopup be used for?
- https://github.com/w3c/aria-practices/issues/1926
解决方法
我自己是屏幕阅读器用户,根据经验,与菜单相关的 ARIA 角色通常是不合适的,这会导致难以使用页面。 所以我最好的建议是不要在如此复杂的设置中使用它。使用 aria-expanded 可能是最合理的,当然也足够了。
只要它比非常简单的项目更进一步,它就不再是最严格意义上的菜单,屏幕阅读器在使它们可用和/或提供正确信息方面存在各种困难。 菜单应该完全由可以通过按下它们来激活的项目组成,仅此而已。 请记住,ARIA 的全局设计考虑到了原生 UI 元素。在本机(非 Web)程序中,菜单可以包含项目和分隔符,仅此而已。所以这里应该是一样的。 顺便说一下,链接的问题也是如此。
如果您在菜单中添加更复杂的元素,则会出现以下问题,而它们的答案根本不明显:
- 在开始输入之前,是否需要按 Enter 键激活菜单内的文本字段?
- 是否需要按 Tab 键才能到达项目内的按钮或链接?和文本字段或选择?
- 如何在不激活当前选择的情况下打开和关闭菜单内的选择?很少有人知道 Alt+向下/向上箭头,也很少有人在他们的 Web 组件中实现它们
在菜单中添加更复杂的项目在 Office 2007+ 和 Windows 8+ 中提供了功能区。它们是与屏幕阅读器一起使用的噩梦。 您永远不知道是否必须按 Enter、Tab 或仅使用箭头键才能到达所需内容。 所以请不要在网络上复制这个。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。