material-ui [文档] 实现可访问的Popovers

tkclm6bt  于 3个月前  发布在  其他
关注(0)|答案(3)|浏览(44)

重复问题

  • 我已搜索现有的问题

最新版本

  • 我已测试了最新版本

重现问题的步骤 🕹

链接到实时示例:
https://codesandbox.io/s/youthful-artem-ycvxvf?file=/src/App.tsx
步骤:

  1. 启用屏幕阅读器(我使用的是NVDA)
  2. 切换到按钮
  3. 按Enter键打开弹出窗口
  4. 弹出窗口内容未被读取

当前行为 😯

目前,当你打开一个弹出窗口时,它的内容不会被屏幕阅读器读取。

预期行为 🤔

弹出窗口的内容应该在打开时被屏幕阅读器读取。

上下文 🔦

我正在构建一个弹出帮助模态框,但我不想使用全屏模态框。弹出窗口似乎应该是正确的选择,它的行为大致如下:

  • 打开时聚焦其内容
  • 从内部按下 Escape 可以关闭它
  • 按tab键可以在弹出窗口内循环切换元素

然而,屏幕阅读器没有正确地读取其内容。当对话框打开时,没有屏幕阅读器反馈,所以你不知道对话框已经打开或者你的焦点已经移动到其中。
我花了超过2个小时试图弄清楚原因,最后我发现这是因为弹出窗口的角色是 generic 而不是 dialog 。通过将角色设置为 dialog ,打开弹出窗口时会宣布为对话框并且内容会被读取。

niwlg2el

niwlg2el1#

你可能或可能不想将 role=dialog 默认设置为这样,因为这可能会破坏一些现有的实现,但我强烈建议至少在使用弹出组件时提供一些可访问性指导。

km0tfn4u

km0tfn4u2#

Popover是一个较低级别的构建块,可以用于多种交互。在这种情况下,用户需要提供与实现用例相关的a11y属性。
话虽如此,我同意文档在这方面确实有所欠缺,应该进行更新。

f87krz0w

f87krz0w3#

非常感谢迅速回复!我猜想这可能是一个构建块。
我同意用户应该了解一些无障碍问题的知识。
最让我担心的是以下常见的测试方法并没有突出显示存在问题:

  • 阅读文档
  • 寻找警告或错误
  • 测试键盘导航
  • 使用浏览器工具,如AXE或WAVE

这是一个只有在尝试使用屏幕阅读器时才能发现的问题,而只有少数设计师和开发人员这样做。
令人震惊!
再次感谢您的关注。更新文档肯定会有所帮助。

相关问题