用 background-image 实现标准 CSS 渐变按钮需显式使用 linear-gradient(),配合 background-size 和 background-position 实现平滑悬停过渡;注意兼容性前缀、移动端 touch-action 设置及 :active 反馈。
background-image 实现标准 CSS 渐变按钮纯 CSS 渐变按钮不依赖图片,核心就是 background-image 配合 linear-gradient()。浏览器支持早已稳定(Chrome 10+、Firefox 16+、Safari 5.1+),连 IE10 都能勉强跑起来。
常见错误是直接写 background: linear-gradient(...) —— 这其实等价于 background-image: linear-gradient(...),但显式写全更利于后续覆盖或调试。
background-image: linear-gradient(to right, #4facfe, #00f2fe);
background-image: linear-gradient(135deg, #6a11cb, #2575fc);
#ff6b6b 0%, #4ecdc4 100% 比只写两色更可控background-color 作降级:老浏览器会忽略渐变,只显示单色底渐变本身不能被 transition 直接监听——background-image 不是可动画属性。真正能过渡的是 background-position 或用伪元素遮罩位移。
最实用的方案是「双层渐变 + 位移」:用 background-size 设大范围渐变,再靠 background-position 移动它。
立即学习“前端免费学习笔记(深入)”;
background-image: linear-gradient(45deg, #ff9a9e, #fad0c4, #a1c4fd, #c2e9fb); background-size: 400% 400%;
transition: background-position 0.5s ease; background-position: 50% 50%;
background-size 和 background-position,否则位移无效background-image,靠 JS 切 class 更可靠touch-action: manipulation
iOS Safari 和部分安卓浏览器在按钮上默认禁用快速点击反馈,导致渐变按钮点下去像没反应。这不是渐变的问题,是交互层缺失。
style="touch-action: manipulation;",或写进 CSS:button { touch-action: manipulation; }
:active 伪类做视觉反馈:button:active { opacity: 0.8; }(注意不要用 transform: scale(),某些安卓 WebView 里会触发重绘卡顿)onclick 绑定来模拟点击态——原生 :active 更及时,且兼容微信内嵌浏览器pointer-events: none 在某层遮罩上,记得检查是否意外拦截了触摸事件linear-gradient 怎么办IE11 支持带 -ms- 前缀的 linear-gradient,但语法和现代标准不一致:角度单位是“度数顺时针”,而标准是“to top/right 等关键词”。混写容易出错。
background-image: -ms-linear-gradient(top, #4facfe, #00f2fe); background-image: linear-gradient(to bottom, #4facfe, #00f2fe);
-ms- 必须写在标准语法前面,否则会被覆盖filter: progid:DXImageTransform.Microsoft.gradient(...),但已基本淘汰,不建议投入时间适配background-size 和 background-position 的过渡是否生效——它对这些属性的支持很有限background-position 配合大 background-size 实现悬停效果,这个组合容易漏掉任一环节就完全不动。