复选框动画(对勾描线 + 弹性回弹勾选动效)

CSS 许可:自研原创

复选框动画组件:勾选时对勾以 SVG 描线逐笔画出,盒子弹性回弹,提供圆角、圆形、圆角方形与禁用态四种样式,原生 input 实现无障碍,纯 CSS 自研。

效果演示(真实可交互)

点击演示区的复选框:勾选瞬间盒子先弹性放大再回弹,同时对勾以描线动画逐笔画出;取消勾选时对勾淡出。四个样式分别是圆角方形(默认选中)、圆形、圆角方形变体和禁用态,全部基于原生 checkbox 实现——点击、聚焦、键盘空格切换都开箱即用。

点击切换:勾选时对勾描线逐笔画出,盒子弹性回弹

完整代码

HTML(原生 input 加 SVG 对勾,label 包裹保证可访问性):

<label class="cbx">
  <input type="checkbox" />
  <span class="cbx-box">
    <svg viewBox="0 0 24 24" class="cbx-svg">
      <path d="M5 12.5l4.6 4.6L19 7.4" />
    </svg>
  </span>
  复选框文字
</label>

CSS(描线动画用 stroke-dasharray / stroke-dashoffset,弹跳用关键帧):

.cbx input { position: absolute; opacity: 0; }
.cbx-svg path {
  stroke-dasharray: 26;        /* 对勾路径总长 */
  stroke-dashoffset: 26;       /* 初始全部隐藏 */
}
.cbx input:checked + .cbx-box {
  background: linear-gradient(135deg, #6c8cff, #8a5cff);
  animation: cbx-pop .35s ease;              /* 盒子弹性回弹 */
}
.cbx input:checked + .cbx-box .cbx-svg path {
  animation: cbx-draw .3s ease .1s forwards; /* 延迟描线 */
}
@keyframes cbx-pop { 0% { transform: scale(1); } 40% { transform: scale(1.18); } 100% { transform: scale(1); } }
@keyframes cbx-draw { to { stroke-dashoffset: 0; } }

两个动画的配合是精髓:stroke-dasharray 与 stroke-dashoffset 同值,让对勾路径初始「完全隐藏」,勾选时 offset 归零,笔画从起点画到终点;盒子用 scale 关键帧做弹性回弹,对勾描线延迟 0.1 秒开始,形成「先弹盒子、再画对勾」的先后节奏。input 用绝对定位透明隐藏,label 仍可点击切换,键盘焦点用 :focus-visible 绘制外圈高亮。

参数说明

参数位置说明
描线时长cbx-draw 的 0.3s200-500ms,配合延迟 0.1s 使用
弹跳幅度cbx-pop 关键帧的 1.181.1-1.3,越大越夸张
描线长度stroke-dasharray: 26必须与 path 实际长度一致
盒子圆角.cbx-box 的 border-radius6px 方形 / 50% 圆形 / 7px 圆角方形
勾选颜色checked 状态的 background渐变或纯色皆可

兼容性与性能

常见问题

Q: 对勾没有描线效果,直接整条出现? 检查 stroke-dasharray 数值是否与路径长度一致。路径总长约为 26,若自定义了更复杂的对勾路径,需用 JS 读取 path.getTotalLength() 重新赋值。

Q: 点击文字没有反应? label 需要与 input 建立关联。用 label 包裹 input 的方式(本组件的写法)或给 label 设置 for 属性指向 input 的 id,二选一即可。

Q: 复选框在深色背景下看不清边框? 把 .cbx-box 的 border 颜色换成高对比色,或将 input:checked 的渐变换成亮色主题,伪元素绘制方式不变。

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

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核