弹性开关动画(3 款 Toggle Switch CSS 动效)

CSS 许可:自研原创

3 款自研弹性开关:iOS 绿色回弹、日夜图标交叉切换、迷你尺寸,纯 CSS 实现(隐藏 checkbox + label),回弹缓动过冲真实自然,复制即用。

效果演示(真实可交互)

开关是设置面板最常见的控件,弹性能让它「活」起来:圆钮滑动时带一点过冲回弹,松手后稳稳停在终点,手感接近原生 iOS。演示区 3 款分别适合系统设置、日夜模式切换、紧凑工具栏,均为真实可点击的 checkbox,键盘 Tab 聚焦也有高亮反馈。

完整代码

HTML(隐藏原生 checkbox,label 包轨道与圆钮):

<label class="switch">
  <input type="checkbox">
  <span class="track"><span class="knob"></span></span>
  <span class="text">弹性开关</span>
</label>

CSS(核心三件套:轨道、圆钮、回弹缓动):

.switch { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; }
.switch input { position: absolute; opacity: 0; pointer-events: none; }

.track { position: relative; width: 52px; height: 30px; border-radius: 999px;
  background: #dde3f2; transition: background .35s ease; }
.knob { position: absolute; top: 3px; left: 3px; width: 24px; height: 24px;
  border-radius: 50%; background: #fff; box-shadow: 0 2px 6px rgba(20,30,70,.25);
  /* 关键:cubic-bezier 的 overshoot 产生「弹一下」的过冲 */
  transition: transform .35s cubic-bezier(.34, 1.56, .64, 1); }

.switch input:checked + .track { background: #34c759; }
.switch input:checked + .track .knob { transform: translateX(22px); }

无需一行 JS:label 点击原生切换 checkbox,CSS 用相邻兄弟选择器 input:checked + .track 驱动状态。图标开关(日/月交叉旋转)与迷你开关的差异仅在轨道尺寸与圆钮内容,完整写法见演示区 .tg-* 系列。

参数说明

参数位置说明
回弹力度cubic-bezier(.34,1.56,.64,1)1.56 为过冲系数,越大弹得越明显
滑动时长transition: transform .35s200-400ms 手感最佳
轨道配色input:checked + .track 的 background开态颜色,常用绿/主题色
圆钮行程translateX(22px)需等于轨道宽度 - 圆钮宽度 - 两侧留白
尺寸.track / .knob 宽高按比例缩放,行程同步换算

兼容性与性能

常见问题

Q: 能商用吗? 可以。本组件为粤喵自研,免费商用无需署名。

Q: 圆钮滑不到位、有缝隙? 行程 translateX 必须精确等于「轨道宽 - 圆钮宽 - 左右内边距」。比如轨道 52、圆钮 24、内边距 3,行程就是 52 - 24 - 6 = 22px。

Q: 想用 JS 控制开关状态? 直接操作隐藏 checkbox:input.checked = true 会同步触发 CSS 动画;如需监听变化用 change 事件,无需操作圆钮本身。

Q: 打开后想要文字跟着变? 用 input:checked ~ .text 选择器给文字换色或换文案即可,注意 HTML 里文字要和 input 是兄弟关系。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核