【发布时间】:2019-05-29 23:50:49
【问题描述】:
我有一个有 2 个级别的 <nav> 元素。顶级项用<button>标记,子项用<a>标记,如:
<nav role="navigation">
<ul>
<li>
<button type="button">Category 1</button>
<ul class="submenu">
<li>
<a href="/cat1/subcat1">Subcategory 1</a>
</li>
<!-- ... other links -->
</ul> <!-- /.submenu -->
</li>
<li>
<button type="button">Category 2</button>
<ul class="submenu">
<li>
<a href="/cat2/subcat1">Subcategory 1</a>
</li>
<!-- ... other links -->
</ul> <!-- /.submenu -->
</li>
</ul>
</nav>
顶级项目仅用作容器,没有自己的页面可链接。
我应该如何为这个标记添加键盘辅助功能?
我目前考虑的选项是:
选项 1
当顶级项目(<button> 标签)被聚焦时打开菜单。
当用户在子项之间切换时,使菜单保持打开状态。
当焦点移动到另一个顶级项目或页面的其余部分时关闭菜单。
此外,允许通过 Escape 键关闭菜单并转移焦点。
选项 2
使用role="menu" 将获得的焦点语义,即:
顶级项目上的 Enter、空格或向下箭头打开菜单;
子项上的向下箭头将焦点移至下一项;
子项上的向上箭头将焦点移至上一项;
顶级项目上的向上箭头关闭菜单,并且;
子项上的 Escape 键,关闭菜单并将焦点转移到顶级项。
这将允许保留 Tab 键以移动到下一个顶级项目。
就个人而言,我更喜欢选项 2,但我确实想知道它是否模糊了预期和显示之间的界限。
【问题讨论】:
标签: javascript html accessibility