重复问题
- 我已搜索现有的问题
最新版本
- 我已测试了最新版本
重现问题的步骤 🕹
链接到实时示例:
https://codesandbox.io/s/youthful-artem-ycvxvf?file=/src/App.tsx
步骤:
- 启用屏幕阅读器(我使用的是NVDA)
- 切换到按钮
- 按Enter键打开弹出窗口
- 弹出窗口内容未被读取
当前行为 😯
目前,当你打开一个弹出窗口时,它的内容不会被屏幕阅读器读取。
预期行为 🤔
弹出窗口的内容应该在打开时被屏幕阅读器读取。
上下文 🔦
我正在构建一个弹出帮助模态框,但我不想使用全屏模态框。弹出窗口似乎应该是正确的选择,它的行为大致如下:
- 打开时聚焦其内容
- 从内部按下
Escape
可以关闭它 - 按tab键可以在弹出窗口内循环切换元素
然而,屏幕阅读器没有正确地读取其内容。当对话框打开时,没有屏幕阅读器反馈,所以你不知道对话框已经打开或者你的焦点已经移动到其中。
我花了超过2个小时试图弄清楚原因,最后我发现这是因为弹出窗口的角色是 generic
而不是 dialog
。通过将角色设置为 dialog
,打开弹出窗口时会宣布为对话框并且内容会被读取。
3条答案
按热度按时间niwlg2el1#
你可能或可能不想将
role=dialog
默认设置为这样,因为这可能会破坏一些现有的实现,但我强烈建议至少在使用弹出组件时提供一些可访问性指导。km0tfn4u2#
Popover是一个较低级别的构建块,可以用于多种交互。在这种情况下,用户需要提供与实现用例相关的a11y属性。
话虽如此,我同意文档在这方面确实有所欠缺,应该进行更新。
f87krz0w3#
非常感谢迅速回复!我猜想这可能是一个构建块。
我同意用户应该了解一些无障碍问题的知识。
最让我担心的是以下常见的测试方法并没有突出显示存在问题:
这是一个只有在尝试使用屏幕阅读器时才能发现的问题,而只有少数设计师和开发人员这样做。
令人震惊!
再次感谢您的关注。更新文档肯定会有所帮助。