首页 web前端 css教程 我们如何改善单页应用程序菜单的可访问性

我们如何改善单页应用程序菜单的可访问性

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

.menu-item {

  位置:相对;

}

 

.sub-menu {

  位置:绝对;

  左:-100000px; / *屏幕外定位 */

}

 

.menu-item:悬停.sub-menu,

.menu-item:焦点.sub-menu,

.menu-item:focus-within .sub-menu {

  左:0;

}

登录后复制

这改进了键盘导航,但引入了一个新问题:选择后菜单保持打开状态(单击或选项卡)。这是因为选定的项目保留了焦点,并且温泉不会触发整页重新加载以清除焦点。此外,菜单交互后,通过键盘无法访问“跳转到内容”链接。

我们第一次尝试使用document.activeElement.blur()在React Router的onClick Link中解决此问题:

1

2

3

const clearfocus =()=> {

  document.activeElement.blur();

};

登录后复制

当单击后关闭菜单时,它并未解决键盘导航问题或维护预期的“跳转到内容”链接行为。

为了解决这个问题,我们通过编程性将重点强加于DOM中的“跳转到内容”链接上方的隐形,非相互作用的锚点元素:

1

2

3

4

5

6

7

8

9

10

11

12

const app =()=> {

  const focusEtref = react.useref();

  // ...其他代码...

  返回 (

     

      <a aria-hidden="true" href="https://www.php.cn/link/7c127e0c66f06e58c7c7310a7c6fa488" ref="{focusResetRef}" tabindex="-1" style="{{" position: top:>重点重置</a>

      <a classname="jump-to-content-a11y-styles" href="https://www.php.cn/link/3292c5c2ca71351a9406a9614e147ad3">跳到内容</a>

      <menu onselectmenuitem="{handleResetFocus}"></menu>

      {/ * ... App的其余部分 */}

    &gt;

  );

};

登录后复制

这确保了菜单选择后,下一个选项卡停止是“跳转到内容”链接。除程序化焦点外, aria-hiddentabIndex和样式确保了该元素仍然是无形的和非相互作用的。

为了进一步增强用户体验,尤其是对于大型菜单,我们添加了一个clearHover状态和一个超时,以在选择后立即清除悬停状态,以确保菜单始终如一地关闭,无论输入方法如何。

我们的最终实现使用了React上下文,以更轻松地管理组件。尽管我们缺乏现实世界的用户数据,但我们的解决方案为我们的水疗中心中的键盘和鼠标用户提供了一致且可访问的体验,从而模仿了整页重新加载的行为。我们欢迎对这种方法的反馈。

以上是我们如何改善单页应用程序菜单的可访问性的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

将框阴影添加到WordPress块和元素 将框阴影添加到WordPress块和元素 Mar 09, 2025 pm 12:53 PM

将框阴影添加到WordPress块和元素

使用智能表单框架创建JavaScript联系表格 使用智能表单框架创建JavaScript联系表格 Mar 07, 2025 am 11:33 AM

使用智能表单框架创建JavaScript联系表格

创建一个具有可满足属性的内联文本编辑器 创建一个具有可满足属性的内联文本编辑器 Mar 02, 2025 am 09:03 AM

创建一个具有可满足属性的内联文本编辑器

使用GraphQL缓存 使用GraphQL缓存 Mar 19, 2025 am 09:36 AM

使用GraphQL缓存

使您的第一个自定义苗条过渡 使您的第一个自定义苗条过渡 Mar 15, 2025 am 11:08 AM

使您的第一个自定义苗条过渡

比较5个最佳的PHP形式构建器(和3个免费脚本) 比较5个最佳的PHP形式构建器(和3个免费脚本) Mar 04, 2025 am 10:22 AM

比较5个最佳的PHP形式构建器(和3个免费脚本)

在node.js中使用multer上传并上传express 在node.js中使用multer上传并上传express Mar 02, 2025 am 09:15 AM

在node.js中使用multer上传并上传express

展示,不要说 展示,不要说 Mar 16, 2025 am 11:49 AM

展示,不要说

See all articles