如果您可以使用具有所需语义和行为并且已内置的原生 HTML 元素 [HTML] 或属性,而不是重新利用某个元素并添加 ARIA 角色、状态或属性以使其可访问,那么请这么做。
在什么情况下这可能不可行?
- 如果该功能在 HTML [HTML] 中可用但尚未被实现,或已实现但可访问性支持 不可用。
- 如果视觉设计限制排除了使用某个原生元素,因为该元素无法按要求进行样式化。
- 如果该功能目前在 HTML 中不可用。
不要改变原生语义,除非确实有必要。
例如:开发者想要构建一个作为选项卡的标题。
不要这样做:
<h2 role=tab>heading tab</h2>
应这样做:
<div role=tab><h2>heading tab</h2></div>
如果使用非交互元素作为交互元素的基础,开发者必须使用 ARIA 添加语义并使用脚本添加相应的交互行为。例如,对于按钮,更好且更容易的做法是 直接使用(原生 HTML)button。
可以使用与所用 ARIA 角色具有相似语义的原生 HTML 元素作为回退。例如,在 ARIA 启用并由脚本控制的树部件的框架中使用 HTML 列表元素作为骨架是可以的。
所有交互式 ARIA 控件必须可用键盘操作。
如果您创建了一个用户可以点击、轻触、拖动、放置、滑动或滚动的小部件,用户也必须能够使用键盘导航到该小部件并执行等效操作。
所有交互式小部件必须通过脚本响应标准按键或适用的按键组合。
例如,如果使用 role=button,该元素必须能够接收焦点,用户必须能够使用同时支持的 enter(在 Windows
系统上)或 return(在 macOS 上)以及 space 键来激活与该元素相关联的操作。
请参阅 APG 模式 以及 开发键盘接口,这些内容均收录于 WAI-ARIA 作者实践指南。
不要在可获得焦点的元素上使用 role="presentation" 或 aria-hidden="true"。
在可获得焦点的元素上使用这些属性会导致某些用户将焦点置于“无内容”处。
不要这样做:
<button role=presentation>press me</button>
也不要这样做:
<button aria-hidden="true">press me</button>
将 aria-hidden 应用于可见交互元素的父元素/祖先也会导致该交互元素被隐藏,因此 也不要这样做:
<div aria-hidden="true">
<button>press me</button>
</div>
如果交互元素不可见或无法交互,那么可以应用 aria-hidden,前提是它不可获得焦点。例如:
button {opacity:0}
<button tabindex="-1" aria-hidden="true">press me</button>
如果交互元素通过对元素自身或其任一祖先使用 display:none 或 visibility:hidden
被隐藏,它将不可获得焦点,并且也会从 可访问性树
中移除。这使得添加 aria-hidden="true" 或显式设置 tabindex="-1" 变得不必要。