tabindex 属性控制元素焦点行为:0 值按 dom 顺序进入 tab 流;-1 值仅支持 js 聚焦;正整数会破坏自然顺序应避免。动态组件需主动管理焦点,隐藏/禁用元素需配合 tabindex="-1" 或 inert 确保不被聚焦。

tabindex 是 HTML5 中控制元素能否获得焦点、以及焦点顺序的关键属性,合理使用能显著提升键盘导航体验和页面可访问性。
理解 tabindex 的三种取值逻辑
tabindex 不是简单的“开/关”开关,不同数值对应不同行为:
- tabindex="0":元素不可被脚本聚焦,但可按 DOM 顺序自然进入 Tab 流,适合按钮、链接、自定义控件等需键盘操作的非表单元素;
-
tabindex="-1":元素无法通过 Tab 键进入,但可通过 JavaScript 调用
.focus()主动聚焦,常用于模态框首次打开时聚焦标题、或临时跳转到某个区域; - tabindex="正整数(如 1、2、5)":强制指定 Tab 顺序优先级,但易破坏文档流逻辑,实际项目中应避免——它会让焦点跳转变得不可预测,尤其在动态内容或组件复用场景下。
保持自然 Tab 顺序优于手动排序
浏览器默认按 HTML 源码顺序进行 Tab 导航。结构清晰的语义化标记(如正确嵌套 nav、main、section)本身就能支撑良好的焦点流。强行用正数 tabindex 打乱顺序,反而会让屏幕阅读器用户困惑。例如:
- 导航栏在 HTML 中位于页首,就让它第一个被 Tab 到;
- 主内容区紧随其后,不应因视觉上“更突出”而设为 tabindex="1";
- 侧边栏或页脚通常放在源码靠后位置,也应保持其自然靠后的 Tab 位置。
动态内容与组件中的 tabindex 实践要点
单页应用或含折叠面板、选项卡、弹出层的界面,需在状态变化时主动管理焦点:
- 展开一个 accordion 面板后,应将焦点移至其首项可交互元素(如内部按钮或链接),可用
tabindex="-1"配合.focus()实现; - 模态框打开时,立即聚焦到第一个可操作元素(如“确认”按钮),并用
tabindex="-1"临时赋予其聚焦能力; - 关闭模态框后,焦点应回退到触发它的元素(如原“编辑”按钮),避免焦点丢失到页面顶部。
禁用与隐藏元素的 tabindex 处理
不可用(disabled)或视觉隐藏(display: none / visibility: hidden)的元素,即使设了 tabindex 也不会出现在 Tab 流中。但要注意:
-
aria-hidden="true"不影响 tabindex 行为,若同时存在,需显式设置tabindex="-1"或移除 tabindex; - 仅用
opacity: 0或position: absolute; left: -9999px隐藏的元素,仍可能被 Tab 到,应配合tabindex="-1"或inert属性(现代浏览器支持)来真正排除; - 禁用的
<button disabled></button>自动脱离 Tab 流,无需额外设置 tabindex。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










