渐变边框按钮(渐变描边/流动渐变边/悬停填充 3 款源码)
3 款纯 CSS 渐变边框按钮:padding 双重背景描边、流动渐变边动画、悬停渐变填充,兼容性好、无需图片资源,复制即用。
效果演示(真实可交互)
渐变描边兼容性最好;流动渐变边支持现代浏览器
完整代码
HTML 结构:
<button class="gb-btn gb-padding">渐变描边</button>
<button class="gb-btn gb-flow">流动渐变边</button>
<button class="gb-btn gb-hover">悬停渐变填充</button>
CSS 核心代码:
/* 1 padding 双重背景法:内层实色裁出 2px 透明边 */
.gb-padding {
border: 2px solid transparent;
background:
linear-gradient(#1b1f2e, #1b1f2e) padding-box,
linear-gradient(120deg, #ff6b6b, #ffd93d, #4d96ff, #c084fc) border-box;
}
/* 2 流动渐变边:大尺寸背景平移 */
.gb-flow {
border: 2px solid transparent;
background:
linear-gradient(#1b1f2e, #1b1f2e) padding-box,
linear-gradient(90deg, #ff6b6b, #ffd93d, #6bcb77, #4d96ff, #c084fc, #ff6b6b) border-box;
background-size: 100% 100%, 300% 100%;
animation: gb-flow-move 3s linear infinite;
}
@keyframes gb-flow-move { to { background-position: 0 0, 300% 0; } }
/* 3 悬停渐变填充 */
.gb-hover {
border: 2px solid transparent; color: #ffb3c1;
background:
linear-gradient(#10121a, #10121a) padding-box,
linear-gradient(135deg, #ff6b6b, #ffd93d) border-box;
}
.gb-hover:hover {
color: #1a0a0d;
background: linear-gradient(135deg, #ff6b6b, #ffd93d) padding-box,
linear-gradient(135deg, #ff6b6b, #ffd93d) border-box;
}
参数说明
| 实现方式 | 关键参数 | 说明 |
|---|---|---|
| padding 双重背景 | border: 2px solid transparent | 边框宽度即渐变可见宽度 |
| padding 双重背景 | linear-gradient(...) padding-box / border-box | padding-box 管内层,border-box 管边框 |
| 流动渐变边 | background-size: 300% 100% | 越大流动越明显,建议 200%~400% |
| 流动渐变边 | animation: 3s linear infinite | 周期越短流动越快 |
| 悬停填充 | 两组 background 互换 | 悬停时把渐变同时铺到 padding-box |
兼容性与性能
- 三种实现全部基于 background 多层渐变 + background-clip,兼容 Chrome / Firefox / Safari / Edge 全系现代浏览器,无需图片、无需 SVG
- 流动渐变边只动画 background-position,属于合成层属性,性能开销小;若卡片较多可改用
will-change: background-position提示浏览器 - 与 border-image 方案相比,双重背景法支持圆角、支持透明度背景,且可叠加 hover 过渡,是社区最推荐的渐变描边写法
- 全部零 JS 零依赖,直接复制到项目即可使用
常见问题
Q: 为什么按钮里看不到渐变? 检查是否漏写 border: 2px solid transparent,border-box 层的渐变要靠透明边框区才露出来;另外 background 的顺序不能反,padding-box 要在前面。
Q: 能做出带渐变描边的圆角胶囊按钮吗? 可以,把 border-radius 调大到按钮高度一半即可,双重背景法天然支持圆角,不会像 border-image 那样被拉伸变形。
Q: 渐变描边可以加 hover 变色吗? 可以,hover 时整体替换 background 的渐变颜色即可,配合 transition: background .3s 需要同时过渡两组渐变,建议直接改颜色变量实现平滑切换。
Q: 支持透明背景的渐变边框吗? 支持,把 padding-box 那层实色改成 rgba(0,0,0,0) 即可得到镂空渐变描边按钮。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。