单选框动画(圆点弹性放大 + 波纹扩散选中动效)

CSS 许可:自研原创

单选框动画组件:选中时圆点弹性放大、外圈波纹扩散,另附分段选择器变体,原生 radio 实现保证表单语义,纯 CSS 自研零依赖。

效果演示(真实可交互)

演示区上方是三个经典单选项:点击任意一项,圆点从中心弹性放大弹出,同时选中项外圈扩散出一圈波纹并淡出,未选中项的圆点自动收起。下方是一个分段选择器变体(日间 / 夜间 / 自动),选中项填充渐变背景并微微弹跳,适合做设置面板或筛选器的视觉升级。

切换选项:圆点弹性放大,选中项外圈波纹扩散;下方为分段选择器变体

完整代码

HTML(原生 radio 加双层圆点结构):

<label class="rdo">
  <input type="radio" name="demo" />
  <span class="rdo-mark"><span class="rdo-dot"></span></span>
  单选项文字
</label>

CSS(圆点弹性放大 + 伪元素波纹扩散):

.rdo input { position: absolute; opacity: 0; }
.rdo-dot {
  width: 10px; height: 10px; border-radius: 50%;
  background: linear-gradient(135deg, #6c8cff, #8a5cff);
  transform: scale(0);                        /* 默认隐藏 */
}
.rdo input:checked + .rdo-mark .rdo-dot {
  animation: rdo-pop .35s cubic-bezier(.34, 1.56, .64, 1) forwards; /* 过冲回弹 */
}
.rdo input:checked + .rdo-mark::after {
  content: ""; position: absolute; inset: -3px; border-radius: 50%;
  border: 2px solid rgba(108, 140, 255, .5);
  animation: rdo-ping .5s ease-out;           /* 外圈波纹 */
}
@keyframes rdo-pop { from { transform: scale(0); } to { transform: scale(1); } }
@keyframes rdo-ping { from { transform: scale(.7); opacity: 1; } to { transform: scale(1.5); opacity: 0; } }

两层动画分别落在不同元素上:圆点用 cubic-bezier(.34, 1.56, .64, 1)——Y 值超过 1 产生过冲,圆点会先弹过目标大小再回正,手感活泼;波纹用 ::after 伪元素画一圈描边圆,从 0.7 倍放大到 1.5 倍并淡出,模拟「选中冲击波」。name 相同保证同一组 radio 互斥,选中态全部由 CSS :checked 驱动,无需一行 JS。

参数说明

参数位置说明
弹跳过冲rdo-pop 的 cubic-bezier第四项 1.5-1.7,越大弹得越猛
波纹半径rdo-ping 的 scale(1.5)1.3-1.8,控制扩散范围
波纹颜色::after 的 border 颜色跟随主题色半透明即可
圆点大小.rdo-dot 的宽高约为外圈半径的一半最协调
分组互斥input 的 name 属性同名即互斥,必填

兼容性与性能

常见问题

Q: 点击选项时圆点没弹出来? 检查 .rdo-dot 是否设置了 transform: scale(0) 初始态,以及 checked 选择器层级是否正确(input 与 .rdo-mark 必须相邻)。

Q: 波纹扩散一次后就不再出现? ::after 的动画只在 checked 状态变化时触发。同一组内切换选项时,新选中项的波纹会正常播放;反复点击已选中项不会重播,这是预期行为。

Q: 想让分段选择器的选中项加滑动动画? 可以组合滑动指示条:为分段容器加 position: relative,用 JS 测量选中项位置并驱动一个绝对定位的指示层,与标签指示器组件(tab-indicator-animation)是同一套思路。

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(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核