HTML tabindex 全局属性

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

tabindex 全局属性允许开发者使 HTML 元素可聚焦,允许或阻止它们被顺序聚焦(通常通过 Tab 键,因此得名),并确定它们在顺序聚焦导航中的相对顺序。

试一试

<p>Click anywhere in this pane, then try tabbing through the elements.</p>

<label>First in tab order:<input type="text" /></label>

<div tabindex="0">Tabbable due to tabindex.</div>

<div>Not tabbable: no tabindex.</div>

<label>Third in tab order:<input type="text" /></label>
p {
  font-style: italic;
  font-weight: bold;
}

div,
label {
  display: block;
  letter-spacing: 0.5px;
  margin-bottom: 1rem;
}

div:focus {
  font-weight: bold;
}

它接受一个整数作为值,根据整数值的不同而产生不同的结果。

注意:如果一个 HTML 元素渲染后具有带有任何有效整数值的 tabindex 属性,则该元素可以通过 JavaScript(通过调用 focus() 方法)或通过鼠标点击进行视觉聚焦。特定的 tabindex 值控制元素是否可“tabbable”(即,通过顺序键盘导航可访问,通常使用 Tab 键)。

  • 负值(具体的负值无关紧要,通常为 tabindex="-1")表示该元素不能通过顺序键盘导航访问。

    注意:tabindex="-1" 对于不应通过 Tab 键直接导航,但需要设置键盘焦点的元素可能很有用。例如,当一个屏幕外的模态窗口出现时应该被聚焦,或者当一个错误的表单提交时,错误消息应该立即被聚焦。

  • tabindex="0" 表示该元素应该在任何正 tabindex 值之后,在顺序键盘导航中可聚焦。这些元素的焦点导航顺序由它们在文档源中的顺序决定。

  • 正值表示该元素应该在顺序键盘导航中可聚焦,其顺序由数字值决定。也就是说,tabindex="4"tabindex="5"tabindex="0" 之前聚焦,但在 tabindex="3" 之后聚焦。如果多个元素共享相同的正 tabindex 值,则它们之间的相对顺序遵循它们在文档源中的位置。tabindex 的最大值为 32767。

  • 如果包含 tabindex 属性但未设置值,则元素是否可聚焦由用户代理决定。

    警告:建议仅使用 0-1 作为 tabindex 值。避免使用大于 0tabindex 值和可以改变可聚焦 HTML 元素顺序的 CSS 属性(弹性项目排序)。这样做会使依赖键盘导航或辅助技术的人难以导航和操作页面内容。相反,请以逻辑顺序编写文档中的元素。

一些可聚焦的 HTML 元素在底层由 用户代理 默认设置 tabindex 值为 0。这些元素包括带有 href 属性的 <a><area><button><frame> 已废弃 <iframe><input><object><select><textarea>,以及 SVG <a> 元素,或者为 <details> 元素提供摘要的 <summary> 元素。除非改变默认行为(例如,包含负值将从焦点导航顺序中移除该元素),否则开发者不应向这些元素添加 tabindex 属性。

警告:tabindex 属性不得用于 <dialog> 元素。

可访问性考虑

避免将 tabindex 属性与非交互式内容结合使用,以使某些旨在交互的内容可以通过键盘输入进行聚焦。例如,使用 <div> 元素来描述按钮,而不是 <button> 元素。

使用非交互式元素编写的交互式组件不会列在可访问性树中。这会阻止辅助技术导航和操作这些组件。内容应使用交互式元素(<a><button><details><input><select><textarea> 等)进行语义描述。这些元素具有内置的角色和状态,可以将状态传达给辅助技术,否则这些状态必须通过 ARIA 进行管理。

规范

规范
HTML
# attr-tabindex

浏览器兼容性

另见