最轻量可靠的做法是用 document.getelementbyid 找容器并用 hidden 属性控制显隐;hidden 语义明确、保障无障碍,而 display: none 会使屏幕阅读器忽略内容;data-tab 与 aria-controls 必须成对使用以建立语义关联;切换时需同步更新按钮 aria-selected 和面板 hidden 状态,并调用 focus() 确保键盘可访问。

直接用 document.getElementById 找目标容器 + hidden 属性控制显隐,是最轻量、最可靠的做法。框架不是必须的,原生 JS 就够用,关键在于状态同步和无障碍支持。
为什么不能只用 display: none
它会让屏幕阅读器完全忽略内容,键盘焦点也跳过该区域;hidden 属性语义明确,既隐藏视觉呈现,又保留辅助技术可访问性。浏览器对 hidden 的处理比 CSS 更一致,尤其在初始渲染和动态更新时。
- 错误写法:
el.style.display = 'none'—— 辅助技术不可见,且容易被其他样式覆盖 - 正确写法:
el.hidden = true或el.setAttribute('hidden', '') - 注意:不要混用
hidden和aria-hidden="true",后者仅影响辅助技术,不隐藏视觉
data-tab 和 aria-controls 必须成对出现
这是让按钮和面板建立“谁管谁”的语义关联,不是可选装饰。没有它,屏幕阅读器无法告诉用户“点这个按钮会打开哪块内容”。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 按钮需带
data-tab="about"和aria-controls="panel-about" - 对应面板需有
id="panel-about"和role="tabpanel" - 初始激活项要设
aria-selected="true",其他按钮设aria-selected="false" - 切勿只改面板状态而漏掉按钮的
aria-selected—— 键盘导航会卡在旧焦点上
切换逻辑必须手动同步两头
浏览器不会自动帮你更新按钮状态或面板可见性。每次点击,JS 必须显式操作按钮组和面板组,缺一不可。
- 先遍历所有
[data-tab]按钮,统一清除aria-selected - 再给当前按钮设
aria-selected="true" - 用
document.getElementById()找到对应面板,移除hidden - 再遍历所有
[role="tabpanel"],给非目标面板加hidden - 最后调用
panel.focus(),确保键盘用户能立刻与新内容交互
最容易被忽略的是焦点管理 —— 即使 DOM 切换正确,没调 focus(),键盘用户就得按多次 Tab 才能进入新视图。这不是锦上添花,而是无障碍合规的硬性要求。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










