动画边框按钮(旋转渐变/虚线行军/呼吸光晕 3 款源码)

CSS 许可:自研原创

3 款纯 CSS 动画边框按钮:旋转渐变边框、虚线行军蚁边框、呼吸光晕边框,悬停暂停、按压缩放,零 JS 零依赖复制即用。

效果演示(真实可交互)

悬停暂停旋转 / 按住加速,点击试试 :active 状态

完整代码

HTML 结构:

<button class="ab-btn ab-rotate">旋转渐变边框</button>
<button class="ab-btn ab-march">虚线行军</button>
<button class="ab-btn ab-breathe">呼吸光晕</button>

CSS 核心代码:

/* 1 旋转渐变边框:conic-gradient + @property 驱动角度 */
.ab-rotate { position: relative; background: #171a26; color: #fff;
  padding: 14px 34px; border: none; border-radius: 12px; cursor: pointer; }
.ab-rotate::before {
  content: ''; position: absolute; inset: -3px; border-radius: 14px; z-index: -1;
  background: conic-gradient(from var(--ab-angle, 0deg),
    #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #c084fc, #ff6b6b);
  animation: ab-rotate-spin 3s linear infinite;
}
@property --ab-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
@keyframes ab-rotate-spin { to { --ab-angle: 360deg; } }
.ab-rotate:hover::before { animation-play-state: paused; }

/* 2 虚线行军:repeating-linear-gradient 平移动画 */
.ab-march {
  background:
    linear-gradient(#171a26, #171a26) padding-box,
    repeating-linear-gradient(45deg, #ff9f43 0 10px, transparent 10px 20px) border-box;
  border: 2px solid transparent;
  animation: ab-march-move 1.2s linear infinite;
}
@keyframes ab-march-move { to { background-position: 0 0, 28px 0; } }

/* 3 呼吸光晕:box-shadow 呼吸动画 */
.ab-breathe {
  border: 2px solid #4d96ff;
  animation: ab-breathe-pulse 2.2s ease-in-out infinite;
}
@keyframes ab-breathe-pulse {
  0%, 100% { box-shadow: 0 0 6px rgba(77,150,255,.35); }
  50% { box-shadow: 0 0 22px rgba(77,150,255,.85); }
}

参数说明

效果关键参数说明
旋转渐变3s + inset: -3px旋转周期;负 inset 决定边框厚度
旋转渐变animation-play-state: paused悬停时暂停动画
虚线行军28px 0 + 10px 20px移动距离与虚线周期
呼吸光晕22px + 2.2s最大光晕半径与呼吸周期
通用border-radius圆角越大越柔和,伪元素需同步 +2px

兼容性与性能

常见问题

Q: @property 不支持时怎么办? 旋转渐变款会退化为静态 conic 边框(角度停在初始值 0deg),仍能看到渐变配色;如需兼容老浏览器,可改用 background-position 平移法模拟旋转。

Q: 边框厚度怎么调整? 改 inset: -3px 的数值即可,注意伪元素圆角 border-radius: 14px 要同步比按钮本体(12px)大约 2px。

Q: 可以只在 hover 时才播放动画吗? 可以,把 animation 移到 .ab-rotate:hover::before 上即可,平时显示静态渐变边框。

Q: 移动端触屏有效果吗? 旋转与行军动画在触屏上持续播放,hover 暂停不会触发;呼吸光晕对触屏同样友好。

许可与来源

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

✍️ 作者与审核