流光效果用纯CSS实现,通过linear-gradient背景、background-size设为200% 100%、background-position初始-100% 0及@keyframes动画位移模拟高光扫过;推荐伪元素::before叠加于按钮外层容器,仅用于加载态或悬停反馈。

流光效果用 CSS 动画实现,不是靠 JS 或图片
流光(shimmer)本质是背景色块沿按钮宽度方向平移的线性动画,模拟高光扫过表面的效果。纯 CSS 就能搞定,无需 JavaScript 或额外资源文件。关键在于用 background-image 配合 background-size 和 background-position 做位移控制,再用 @keyframes 驱动。
- 不要用
box-shadow模拟——它无法形成方向性扫光,且难以控制起止位置 - 避免对整个按钮加
opacity动画——那只是淡入淡出,不是流光 - 推荐用伪元素
::before实现,避免干扰按钮文字和点击区域
按钮 HTML 结构要预留伪元素容器
直接给 这样可以安全地把流光层叠在按钮上方,不影响可访问性和点击热区。 流光是否“顺滑”取决于渐变方向和移动距离。常见错误是写成 流光不是常驻装饰,滥用会分散用户注意力。真实场景中它只该出现在两种情况: 复杂点在于响应式按钮宽高变化时, 加流光容易遮字或错位,稳妥做法是套一层 <div class="add-to-cart-wrapper">
<button class="btn-add-to-cart">加入购物车</button>
</div>
background: linear-gradient 的角度和尺寸必须匹配按钮宽高比to right 却没调好 background-size,导致光斑太短、闪烁或卡顿。
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent) —— 90deg 是水平方向,适合横向按钮background-size 设为 200% 100%:确保光斑宽度是按钮两倍,动画才有足够位移空间background-position 初始设为 -100% 0,让光斑从左外侧开始,动画结束时刚好移到右外侧1.5s~2s,太快像闪屏,太慢失去动感触发时机别乱加——默认隐藏,只在加载态或悬停时显示
class="loading" 控制显隐0.3 以内background-size 和 background-position 的百分比基准会变,如果按钮尺寸不固定,得用 JS 监听 resize 重设,但绝大多数电商按钮宽度固定,CSS 方案已够用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











