我们如何改善单页应用程序菜单的可访问性
Mar 26, 2025 am 11:11 AM使用React路由器为React PWA建立可访问的主菜单提出了意外的挑战。本文详细介绍了我们创建键盘和鼠标友好型菜单的旅程,重点是克服单页应用程序(SPA)中的常见可访问性陷阱。
我们的目标是通过键盘和鼠标导航的菜单,允许用户通过顶级和子菜单项目(在悬停/焦点上显示),并具有清晰的焦点指示器。
使用CSS visibility
显示/隐藏子菜单的初步尝试对键盘用户失败,因为具有visibility: hidden
仍然是无形的。我们切换到操纵position
属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
这改进了键盘导航,但引入了一个新问题:选择后菜单保持打开状态(单击或选项卡)。这是因为选定的项目保留了焦点,并且温泉不会触发整页重新加载以清除焦点。此外,菜单交互后,通过键盘无法访问“跳转到内容”链接。
我们第一次尝试使用document.activeElement.blur()
在React Router的onClick
Link
中解决此问题:
1 2 3 |
|
当单击后关闭菜单时,它并未解决键盘导航问题或维护预期的“跳转到内容”链接行为。
为了解决这个问题,我们通过编程性将重点强加于DOM中的“跳转到内容”链接上方的隐形,非相互作用的锚点元素:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
这确保了菜单选择后,下一个选项卡停止是“跳转到内容”链接。除程序化焦点外, aria-hidden
, tabIndex
和样式确保了该元素仍然是无形的和非相互作用的。
为了进一步增强用户体验,尤其是对于大型菜单,我们添加了一个clearHover
状态和一个超时,以在选择后立即清除悬停状态,以确保菜单始终如一地关闭,无论输入方法如何。
我们的最终实现使用了React上下文,以更轻松地管理组件。尽管我们缺乏现实世界的用户数据,但我们的解决方案为我们的水疗中心中的键盘和鼠标用户提供了一致且可访问的体验,从而模仿了整页重新加载的行为。我们欢迎对这种方法的反馈。
以上是我们如何改善单页应用程序菜单的可访问性的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)