【问题标题】:Accessible dropdown menu: <li> has multiple children可访问的下拉菜单:<li> 有多个子项
【发布时间】:2019-09-25 00:07:10
【问题描述】:

我正在努力制作可访问的下拉菜单。我主要关注这个 W3 示例:https://www.w3.org/TR/wai-aria-practices-1.1/examples/menubar/menubar-1/menubar-1.html#

但是,我的菜单结构不同寻常。我的一些列表项包含多个按钮,这些按钮在列表项中水平对齐。

<ul role="menu">
	<li role="none">Header</li>
	<li role="none">
		<button role="menuitem">Option A</button>
		<button role="menuitem">Option B</button>
		<button role="menuitem">Option C</button></li>
	<li role="none">
		<button role="menuitem">Button Foo</button>
	</li>
</ul>

有没有推荐的方法让这个 WCAG 可以访问? 我希望用户使用 LEFT/RIGHT 键在列表项内的按钮之间移动。

此外,目前我的屏幕阅读器 (NVDA) 将通知用户列表中有 4 个项目(因为有 4 个元素带有 role="menuitem" 标签)。理想情况下,我希望屏幕阅读器让用户知道列表中只有 2 个项目,然后当他在带有兄弟姐妹的按钮上时(例如我的示例中的“选项 A”),我希望屏幕阅读器宣布,除了在菜单的第一项之外,它是列表项中 3 个选项中的第 1 个。

感谢任何建议!

【问题讨论】:

  • 欢迎来到 StackOverflow。你现在的问题太笼统了。这里至少有两个单独的问题。一:使用 LEFT/RIGHT 键导航按钮,这是一个 javascript 问题,您应该尝试解决该问题。二:屏幕阅读器的wcag要求,这也可能分解为多个问题。请保持对一个问题的质疑。如果需要,可以提出多个问题。

标签: javascript html accessibility wcag


【解决方案1】:

重要提示menu 角色和模式旨在用于应用程序。如果你想做一个简单网站的菜单,你应该使用navigation角色


现在回答你的问题...

您正在描述 menuitemradio 角色的用途:(注意:如果不同的选项不是独占的,这也可能是 menutitemcheckbox

<ul role="menu">
    <li role="none" id="group_header">Header</li>
    <li role="group" aria-describedby="group_header">
        <button role="menuitemradio">Option A</button>
        <button role="menuitemradio">Option B</button>
        <button role="menuitemradio">Option C</button></li>
    <li role="none">
        <button role="menuitem">Button Foo</button>
    </li>
</ul>

我希望用户使用 LEFT/RIGHT 键在列表项内的按钮之间移动。

您可以查看menu 角色项on the WAI ARIA Authoring practices 的键盘交互要求,其中不仅包括左右键。因此,您将不得不为您的应用程序依赖重要的 javascript 开发。


注意:请记住,如果您正在设计一个网站(因此您的菜单不会属于application 角色),您应该使用navigation 角色。这会更容易,您可以使用任何标准的 HTML 元素,例如 input[type='radio'],它们将本机处理左右键:

<ul role="navigation" aria-label="Menu">
   <li><div id="group_header">Header</div>
     <div role="group" aria-describedby="group_header">
        <label><input type="radio" name="item" /> Option A</label>
        <label><input type="radio" name="item" /> Option B</label>
        <label><input type="radio" name="item" /> Option C</label>
     </div>
   </li>
   <li><button>Button Foo</button></li>
</ul>

关于"menu not for website" theme的讨论

【讨论】:

  • 我不同意您使用 menuitemradio 的建议。该角色假设组中的一个项目当前处于活动状态,而其他项目处于非活动状态,并且一次可能只有一个选项处于活动状态。这可能不是提问者想要的。据我了解,A、B 和 C 只是三种可能的动作。使用子菜单可能更合适。
  • @QuentinC 你是对的。 Op 说 A、B 和 C 有 3 个 options (不是动作),但没有说它们像我想象的那样是排他的。如有必要,我添加了关于使用menuitemcheckbox 的简短说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2012-02-03
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多