如何标记当前活跃的 tab 面板(aria-selected 和 tabindex)

落敏君_3464

落敏君_3464

2026-01-20

481人浏览

原创

标记当前活跃 tab 面板需同时设 tabindex="0"(使其可聚焦)并管理其他面板为 tabindex="-1";aria-selected 仅用于 role="tab" 按钮,不可用于 tabpanel;tabpanel 必须通过 aria-labelledby 关联对应 tab ID,并用 aria-hidden 与视觉隐藏配合控制显示。

如何标记当前活跃的 tab 面板(aria-selected 和 tabindex)

要标记当前活跃的 tab 面板,关键不是只设 aria-selected="true",而是必须同时配合 tabindex="0"(让其可聚焦)和正确管理其他面板的 tabindex="-1",否则屏幕阅读器可能无法准确传达“当前选中”状态,键盘用户也无法通过 Tab 键到达该面板内容。

tab 面板(tabpanel)本身需要可聚焦

默认情况下,

是不可聚焦的。即使设置了 aria-selected="true",它对键盘导航和读屏器没有实际意义。
  • 给当前活跃的 tabpanel 设置 tabindex="0",使其能被键盘聚焦(例如按 Tab 进入)
  • 其他非活跃的 tabpanel 应设 tabindex="-1"(可编程聚焦,但不进入 Tab 键顺序)
  • 不要给 tabpanel 设 tabindex="0" 后又隐藏它(display: none 或 hidden),否则会破坏可访问性逻辑

aria-selected 只用于 tab 按钮(tab),不用于面板

aria-selected 的语义对象是 role="tab" 元素,不是 tabpanel。它是用来告诉辅助技术“哪个 tab 按钮当前被选中”,属于标签页控件的视觉/状态反馈层。

  • 当前激活的 应设 aria-selected="true"
  • 其他 tab 按钮应设 aria-selected="false"(显式声明更稳妥)
  • tabpanel 上写 aria-selected 是无效且不符合 ARIA 规范的,应移除

确保 aria-labelledby 正确关联 tab 和 panel

每个 tabpanel 必须通过 aria-labelledby 显式指向对应的 tab 按钮 ID,这样屏幕阅读器才能将面板内容与当前选中的 tab 标签建立语义联系。

  • 例如:
  • 对应 tab:
  • 这个关联在切换时必须同步更新:换 tab 时,新 panel 的 aria-labelledby 要指向新 tab 的 ID
  • 隐藏非活跃面板要用 visibility + aria-hidden,而非 display:none

    单纯用 display: none 会让屏幕阅读器完全忽略该 panel,即使它有 tabindex="-1"。理想做法是结合视觉隐藏与语义控制:

    • 非活跃 panel:添加 aria-hidden="true",并用 visibility: hidden; position: absolute; 等方式视觉隐藏(保留 DOM 结构和焦点能力)
    • 活跃 panel:设 aria-hidden="false"(或不设,默认为 false),并确保可见
    • 避免用 hidden 属性或 display: none 直接移除可访问性上下文

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2024.08.14

6541

7

CSS position定位有几种方式
CSS position定位有几种方式

有4种,分别是静态定位、相对定位、绝对定位和固定定位。更多关于CSS position定位有几种方式的内容,可以访问下面的文章。

2023.11.23

352

4

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

20

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

20

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

0

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

120

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

60

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

60

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

40

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习