
本文介绍如何使用 `` + `
在 Web 开发中,“切换按钮”(toggle button)常被误解为必须是
✅ 语义明确:复选框天然表达“开/关”二元状态,屏幕阅读器会自动播报其当前值(如 “checked” / “not checked”),无需额外 ARIA 属性。
✅ 行为可靠:原生支持鼠标点击、空格键切换、Tab 键焦点导航,完全符合 WCAG 2.1 和 ARIA Authoring Practices 指南。
✅ 样式继承:当与
以下是最小可行实现:
<input type="checkbox" id="my-toggle"> <label for="my-toggle">Toggle me</label>
只需确保 input 的 id 与 label 的 for 属性匹配,点击标签即等效于操作复选框——这是 HTML 原生的“隐式关联”机制,既轻量又健壮。
若需按钮式外观,推荐采用 CSS 隐藏复选框 + 样式化标签 的模式(不依赖框架):
立即学习“前端免费学习笔记(深入)”;
<style> /* 隐藏原生复选框,保留其功能 */ #my-toggle { position: absolute; opacity: 0; pointer-events: none; } /* 将 label 样式化为按钮,并响应状态 */ label[for="my-toggle"] { display: inline-block; padding: 8px 16px; background-color: #007bff; color: white; border: none; border-radius: 4px; cursor: pointer; user-select: none; } label[for="my-toggle"]:hover { background-color: #0056b3; } /* 当复选框被勾选时,label 显示“按下”态(例如深色背景) */ #my-toggle:checked + label { background-color: #004085; box-shadow: inset 0 2px 4px rgba(0,0,0,0.2); } /* 聚焦时提供可见轮廓(无障碍必需) */ #my-toggle:focus + label { outline: 2px solid #007bff; outline-offset: 2px; } </style> <input type="checkbox" id="my-toggle"> <label for="my-toggle">Toggle me</label>
⚠️ 注意事项:
- 切勿移除 outline 或禁用 :focus 样式——这对键盘用户至关重要;如需自定义焦点样式,请确保对比度达标(≥ 3:1);
- 若使用 bootstrap 等框架,可直接利用其 .btn-check 工具类(如答案中所示),它已封装上述隐藏+关联逻辑;
- 避免用
总结:真正的“最简单”不是代码行数最少,而是用正确的语义元素解决正确的问题。 是 HTML 为切换状态提供的第一公民,搭配