2. 在 HTML 中使用 ARIA 的说明

2.1 ARIA 使用第一条规则

如果您可以使用具有所需语义和行为并且已内置的原生 HTML 元素 [HTML] 或属性,而不是重新利用某个元素并添加 ARIA 角色、状态或属性以使其可访问,那么请这么做

在什么情况下这可能不可行?

2.2 ARIA 使用第二条规则

不要改变原生语义,除非确实有必要。

例如:开发者想要构建一个作为选项卡的标题。

不要这样做:

<h2 role=tab>heading tab</h2>

这样做:

<div role=tab><h2>heading tab</h2></div>

如果使用非交互元素作为交互元素的基础,开发者必须使用 ARIA 添加语义并使用脚本添加相应的交互行为。例如,对于按钮,更好且更容易的做法是 直接使用(原生 HTML)button

可以使用与所用 ARIA 角色具有相似语义的原生 HTML 元素作为回退。例如,在 ARIA 启用并由脚本控制的树部件的框架中使用 HTML 列表元素作为骨架是可以的。

2.3 ARIA 使用第三条规则

所有交互式 ARIA 控件必须可用键盘操作。

如果您创建了一个用户可以点击、轻触、拖动、放置、滑动或滚动的小部件,用户也必须能够使用键盘导航到该小部件并执行等效操作。

所有交互式小部件必须通过脚本响应标准按键或适用的按键组合。

例如,如果使用 role=button,该元素必须能够接收焦点,用户必须能够使用同时支持的 enter(在 Windows 系统上)或 return(在 macOS 上)以及 space 键来激活与该元素相关联的操作。

请参阅 APG 模式 以及 开发键盘接口,这些内容均收录于 WAI-ARIA 作者实践指南

2.4 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:nonevisibility:hidden 被隐藏,它将不可获得焦点,并且也会从 可访问性树 中移除。这使得添加 aria-hidden="true" 或显式设置 tabindex="-1" 变得不必要。