什么是符合 WAI-ARIA 标准的导航栏/菜单实现

2024-03-19

我们正在为门户网站的主导航菜单实施(即添加)WAI-ARIA 支持。菜单如下所示:

菜单采用经典的方式实现<ul> / <li> / <a>DOM 树,使用 CSS 设计,看起来像水平选项卡。

这种小部件的 WAI-ARIA 兼容实现是什么?

我已经阅读了 w3org 的最新 WAI-ARIA 规范的许多部分,以获得一般理解、分类法等。 然后我阅读了几个 UI 小部件实现的示例。我找不到任何专门针对此类 CSS 导航菜单的示例。我一直发现的最接近的小部件是菜单、菜单栏和选项卡面板。当然我也看了免费 ARIA 社区组 https://groups.google.com/forum/?fromgroups=#!topic/free-aria/HWMoOUsnBOw(这个问题最初发布的地方)。

我想说的是none这些小部件与 (CSS) 导航菜单完全匹配。例如,TabPanel 可以控制页面中的某些内容(--> aria-controls),也可能是 MenuBar;但我完全不确定导航菜单控制页面中的内容(它控制要显示的下一页)。不进一步说,还有一些其他差异。 参考文献位于帖子末尾。如果有人提供更好(或更合适)的导航菜单示例,我们将很高兴了解它们。

参考

  • https://developer.mozilla.org/en-US/docs/Accessibility/ARIA/ARIA_Test_Cases#Menubar_and_Menu https://developer.mozilla.org/en-US/docs/Accessibility/ARIA/ARIA_Test_Cases#Menubar_and_Menu
  • http://wiki.jqueryui.com/w/page/38666403/Menubar http://wiki.jqueryui.com/w/page/38666403/Menubar
  • http://www.oaa-accessibility.org/examplep/menubar2/ http://www.oaa-accessibility.org/examplep/menubar2/
  • http://test.cita.illinois.edu/aria/menubar/ http://test.cita.illinois.edu/aria/menubar/
  • http://dev.aol.com/dhtml_style_guide#menu http://dev.aol.com/dhtml_style_guide#menu
  • http://whatsock.com/modules/aria_tabs_menu_modules/demo.htm http://whatsock.com/modules/aria_tabs_menu_modules/demo.htm
  • http://www.w3.org/TR/wai-aria-practices/#menu http://www.w3.org/TR/wai-aria-practices/#menu
  • http://www.w3.org/TR/wai-aria/roles http://www.w3.org/TR/wai-aria/roles
  • http://www-03.ibm.com/able/resources/wai_aria_intro.html http://www-03.ibm.com/able/resources/wai_aria_intro.html

一个可能的实现是:

HTML 结构:

<div> <!-- Outer wrapper -->
  <ul> <!-- Main navigation bar container -->
    <li> <!-- First-level item without submenu -->
      <a> <!-- Destination URL -->
      </a>
    </li>
    <li> <!-- First-level item with submenu -->
      <a> <!-- Destination URL -->
      </a>
      <ul> <!-- Second-level menu container -->
        <li> <!-- Second-level item -->
          <a>
          </a> <!-- Destination URL -->
        </li>
      </ul>
    </li>
  </ul>
</div>

Roles:

  • 外包装的 role=”navigation”<div>
  • 角色=“菜单栏”<ul>导航栏容器
  • 第二层的 role="menu"<ul>容器
  • 第一级和第二级的 role="presentation"<li>菜单项(在公开的可访问菜单栏结构中不需要它们)
  • 第一级和第二级的 role="menuitem"<a>菜单项

特性:

  • aria-haspopup="true" 为第一级<a>具有子菜单的菜单项
  • aria-labelledby="上一个的 ID<a>二级菜单项”<ul>容器

States:

  • aria-selected="true" 当前访问的第一级或第二级<a>物品;另一方面 aria-selected="false"<a>项目。即强制执行“选定 当前页面”的概念
  • aria-expanded="true/false" 用于第二级<ul>容器
  • aria-hidden="true/false" 用于第二级<ul>容器
  • aria-activedescendant="" 为主<ul>导航栏容器。这是使用 tabindex 的替代方法
  • 当前访问的 tabindex=0<a>物品;另一方面 tabindex=-1<a>项目。这是为了在切换到导航栏时首先关注当前页面。它是使用 aria-activedescendant 的替代方法

键盘:

  • Tab:将焦点从 Web 应用程序中的其他点移入/移出菜单。
  • Shift+Tab:以相反的顺序将焦点从 Web 应用程序中的其他点移入/移出菜单。
  • 右箭头:下一个导航栏项目
  • 左箭头:上一个导航栏项目
  • Enter:激活当前聚焦的项目(即导航到相应的 URL)
  • 空格:激活当前聚焦的项目(即导航到相应的 URL)

2014 年 8 月:所选咏叹调与菜单项

回复 @Joshua Muheim 评论:现在我可以看到从这里 http://www.w3.org/TR/wai-aria/roles#menuitemradio,以及来自他的参考 http://www.w3.org/TR/wai-aria/states_and_properties#aria-selected, that aria-selected不允许使用属性menuitem role.
正如我最近读到的所以答案 https://stackoverflow.com/a/24798883/540776鉴于当前的情况,有一些解决方案,并且还有一个新的提议属性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是符合 WAI-ARIA 标准的导航栏/菜单实现 的相关文章

  • 关闭呈现的视图控制器后推送视图控制器

    我有这个导航堆栈 RootVC gt VC1 gt 呈现 gt ModalVC 我有VC2 不在导航堆栈中 演示时ModalVC 我想单击 ModalVC 中的按钮来关闭 ModalVC 然后推送VC2之后进入导航堆栈VC1一键点击 它应该
  • 我可以阻止 Blazor 中的导航吗?

    在 Blazor 服务器端应用程序中 是否涉及一些执行实际导航的 javascript 例如当用户点击链接时 我的意思是像window history pushState 理论上是否可以覆盖该 javascript 以防止在某些情况下 当页
  • 如何更改Android弹出菜单的背景颜色

    我通过查询数据库生成菜单的每个选项 这是我的代码 final PopupMenu popupMenu new PopupMenu getBaseContext v SQLiteDatabase db AdapterDb getReadabl
  • 选项卡式导航。 Jquery 和 CSS 问题

    前面讨论过的脚本问题 Here https stackoverflow com questions 7169724 jquery to detect identical class and text for tab navi 基本上我的 h
  • Laravel 中的菜单逻辑应该放在哪里?

    在 Laravel 中放置菜单数据逻辑的最佳概念位置是什么 如果我使用菜单包放在哪里 在Base Controller创建额外的功能或不同的东西 Note 这个答案是为 Laravel 3 编写的 可能适用于最新的 Laravel 4 也可
  • 如何使用 php 列出目录以在文件夹中导航,而不使用 javascript? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在寻找这个 PHP 函数 列出目
  • JSF Primefaces 选择菜单页面导航

    我正在使用 JSF 和 Primefaces 开发一个 Web 应用程序 我想显示以下菜单 并根据所选选项转到一页或另一页 XHTML代码
  • 响应式菜单/小型设备:单击菜单项时关闭/折叠菜单

    我想更改小型设备上 Twitter 引导菜单的行为 以通过单击菜单项或单击菜单按钮来关闭展开的菜单 目前 默认 我只能通过单击右上角的菜单按钮来折叠它 无论我是否单击了链接 菜单项 我该怎么做呢 我无法从 TB 文档中弄清楚这一点 并且在互
  • 为什么 WebBrowser Document Completed() 会触发两次?

    嗯 我正在使用一个简单的网络浏览器控件来浏览页面 因此我需要在执行此操作时更改表单的文本 我在用着 private void webBrowser1 DocumentCompleted object sender WebBrowserDoc
  • Windows 窗体中的本机外观(类似资源管理器)主菜单

    除了使用 MenuStrip 之外 还有其他方法在 C 中创建主菜单吗 它看起来与标准资源管理器菜单不相似 我在这里做错了什么吗 我只想要标准应用程序主菜单 例如浏览器菜单 听起来您想要一个尊重操作系统主题的菜单 MainMenu 类将执行
  • 更改 Android 上活动动画的 z 顺序

    有没有办法反转活动动画的 z 顺序 基本上 当您启动新活动时 它会被添加到后台堆栈 并且其窗口会添加到前一个活动的窗口上 有时稍后返回时 从后台堆栈获取的活动会在顶部活动下方显示其窗口 大多数时候这是完全有道理的 但我对这种行为有以下问题
  • css设置speak:none现在相当于aria-hidden =“true”吗?

    我只是想知道我是否应该期望 2015 年 1 月左右的浏览器和辅助技术以相当于设置 aria hidden true 的方式使用spoke none 我想指出一些半不透明的文本应该被忽略 并且想知道我是否可以在一次操作中完成它 只需添加一个
  • Android:带有图标的选项菜单“更多列表”

    我喜欢 Android 在选项菜单中自动显示许多菜单项 当屏幕上的菜单项过多时 它会显示 更多 按钮 我想保持这种方式 但是当您按 更多 时弹出的菜单项中没有菜单图标 有什么办法可以让我否决这个吗 如果没有 当用户单击 更多 时如何显示我自
  • .NET MAUI 导航动画

    如果我想在 MAUI 中为从一个页面到另一页面的过渡设置动画 我需要使用以下命令激活它true value await Shell Current GoToAsync nameof DashboardPage true 这会动画化页面从右到
  • 自定义菜单快捷键

    I am working on an application that has a Menu on top of it I want to use a different method for shortcut keys being thi
  • JSF 2 全局异常处理,导航到错误页面未发生

    我正在开发一个基于 JSF 2 0 的 Web 应用程序 我正在尝试实现一个全局异常处理程序 每当发生任何异常 例如 NullPointerException ServletException ViewExpiredException 等
  • Eclipse 的 Visual Studio Ctrl+Tab 和 Ctrl+Shift+Tab 等效项

    In Visual Studio I always use Ctrl Tab and Ctrl Shift Tab to navigate between documents I see that Eclipse has Ctrl F6 t
  • 当模态覆盖覆盖背景项目时,防止背景项目接收焦点?

    我正在努力使叠加模式更易于访问 它的工作原理本质上就像这个 JSFiddle https jsfiddle net 0dzcs30n 8 当您打开模式时 焦点无法正确进入模式 并且它继续关注页面中的其他 隐藏 背景 项目 你可以在我的 JS
  • NavigationUI 无法与底部导航视图实现一起正常工作

    所以我有一个场景 其中我有 5 个带有底部导航的片段 1 主页 2 收件箱 3 搜索 4 通知 5 个人资料 因此 我有另一个名为 BarcodeDetail 的片段 我从 Home Fragment 导航到该片段 首页 gt 条码详情 现
  • aria-live 和 JAWS

    我正在尝试让 aria live 区域与 JAWS 11 和 IE8 一起正常工作 使用下面的代码 我可以让 JAWS 在单击按钮时宣布新值 但行为不是我所期望的 本例的 JSFiddle http jsfiddle net fLzhR

随机推荐

  • 如果库需要不同版本的“base”该怎么办?

    我正在尝试安装需要与我已安装的版本不同的基础版本的软件包 我有4 6 0 0 他们要求 lt 4 6 我如何在我的系统上安装这些 编辑 这些包实际上需要较旧的包才能构建 而不仅仅是作为 cabal 约束 由于无法重新安装base 在更新之前
  • C# 中的 const 字节字段按位 NOT

    我意识到 如果我有一个 byte 类型的字段或变量 我可以对其应用按位 NOT 并将其转换为字节 但是 如果该字段是 const byte 我仍然可以应用按位 NOT 但无法将其转换为字节 例如 这编译 class Program byte
  • 我可以从 LotusScript 函数返回列表吗?

    我想从 LotusScript 中的函数返回一个列表 eg Function myfunc List As Variant Dim mylist List As Variant mylist one 1 mylist two 2 myfun
  • 在 Windows Phone 8 中使用 App.Current.Terminate() 方法

    由于Windows Phone 8为我们提供了这种以编程方式终止应用程序的方法 如果我们在应用程序中使用此方法在导航历史记录中没有回溯条目的情况下终止页面 那么在提交应用程序时会出现任何问题吗 使用此调用时 认证不会有任何问题 但请确保在调
  • 上传 zip 和 rar 文件在 codeigniter 中不起作用

    我为允许的类型创建的设置 config allowed types doc docx pdf xls xlsx rtf txt rar zip 在我的mine php中 zip gt array application x zip appl
  • Cordova 构建:请安装 Android 目标:“android-22”。我不想要 android-22。我想要 android-19 - 我该怎么办?

    我正在努力解决我的phonegap 设置和构建我的第一个应用程序 我创建了一个 hello1 项目 我添加了android项目 平台android已经添加 现在 当我运行 cordova 构建时 我收到错误 错误 请安装 Android 目
  • 如何使用 Apache CXF 以简单的方式获取传入和传出的soap xml?

    我一直在 CXF 上摆弄服务器端拦截器 但实现简单的传入和传出拦截器 为我提供包含 SOAP XML 的纯字符串 似乎并不是一项简单的任务 我需要在拦截器中包含纯 XML 以便我可以将它们用于特定的日志记录任务 标准的 LogIn 和 Lo
  • 重定向到从 json 响应获取的 url

    我正在使用 jquery ajax 方法向 php 网页发出 http 请求 作为响应 我采用像 status success url http url 这样的 json 在成功函数上 我从 json 重定向到 url 但大多数时候它都会失
  • iOS UINavigationBar vs UIToolbar vs UITabBar

    让我知道在什么情况下应该使用哪一个 它们之间有什么区别 每个组件的优点和缺点是什么 The UI导航栏类实现用于导航分层内容的控件 它是一个栏 通常显示在屏幕顶部 包含用于在层次结构中上下导航的按钮 主要属性是左 后 按钮 中心标题和可选的
  • 将请求转发到弹簧控制器

    从 servlet 我将请求转发到 spring 控制器 如下所示 RequestDispatcher rd request getRequestDispatcher myController test reqParam value rd
  • Elisp 交互功能,具有输入历史记录

    有很多交互式函数将字符串输入作为参数 defun zb run cmd X arg1 argN interactive Marg1 Marg2 some logic 如何制作每个这样的功能zb run cmd 1 zb run cmd N
  • 同时设置jtextfield textlimit和大写

    我的应用程序中有几个 jtextfield 我想将其中一个允许大写和小写 并限制可以引入 jtextfield 的字符数 我必须区分类别 一个用于放置限制 另一个用于放置大写或小写 jtextfield限制的代码 package teste
  • 为什么这个方法会导致无限循环?

    我的一位同事向我提出了关于这种导致无限循环的方法的问题 实际的代码有点复杂 无法在这里发布 但本质上问题归结为 private IEnumerable
  • Facebook Android SDK 会话 openForPublish 未创建新会话

    当我调用 Facebook Android SDK 时 Session tempSession new Builder this build Session setActiveSession tempSession tempSession
  • 更改 Android Studio 调试端口

    我四处搜寻并没有看到令人满意的答案 所以也许没有 我在工作时在 Mac 上运行 Android Studio 与调试端口 8600 存在冲突 我的印象是 如果发生冲突 Android Studio 会通过从 8600 开始递增来选择不同的端
  • 如何让Jmeter使用CSV数据作为GET参数?

    我想在 JMETER 中实现以下目标 Jmeter加载带有id号的CSV文件 Jmeter 中的每个用户 线程都会选择一个 id 号并将其添加到其 HTTP 请求中 例如http www testsite com test php id x
  • MySQL jdbc + SSL

    我为启用 SSL 的 MySQL 客户端设置系统属性 效果很好 System setProperty javax net ssl trustStore truststore System setProperty javax net ssl
  • DropBox 作为版本控制和异地备份

    在读完 Michael Lopp 的书 Being Geek 后 我开始使用 Dropbox 作为在家庭计算机和工作计算机之间同步文件的一种方式 这太棒了 它确实让您可以轻松地跟踪您正在处理的文件的最新版本 我的问题与人们使用此工具的经验有
  • TextBox 中的占位符文本居中

    我的 XAML 页面中有多个文本框
  • 什么是符合 WAI-ARIA 标准的导航栏/菜单实现

    我们正在为门户网站的主导航菜单实施 即添加 WAI ARIA 支持 菜单如下所示 菜单采用经典的方式实现 ul li a DOM 树 使用 CSS 设计 看起来像水平选项卡 这种小部件的 WAI ARIA 兼容实现是什么 我已经阅读了 w3