流光边框本质是CSS动画+渐变遮罩,用linear-gradient创建高亮色带并animating background-position实现滚动效果;需自定义Tailwind工具类或伪元素方案,注意background-clip、border配合及移动端兼容性。

流光边框的本质是 CSS 动画 + 渐变遮罩
所谓“流光”,不是真实光线移动,而是用 linear-gradient 创建高亮色带,再通过 background-position 动画让它横向(或斜向)滚动。Tailwind 本身不提供现成的“流光边框”工具类,必须手动扩展 @layer utilities 或直接写内联样式。关键点在于:不能直接 animating border,而要用 background-image 模拟边框视觉效果。
用 Tailwind 自定义 utility 实现可复用的流光边框
在 tailwind.config.js 的 theme.extend 下添加自定义背景动画,并在 @layer utilities 中定义类名:
@layer utilities {
.glow-border {
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.4), transparent);
background-size: 200% 2px;
background-position: -100% 0;
background-repeat: no-repeat;
background-origin: border-box;
background-clip: border-box;
animation: shine 3s infinite;
}
}
@keyframes shine {
0% { background-position: -100% 0; }
100% { background-position: 200% 0; }
}
然后在 HTML 中使用: 若元素已有背景图或渐变,直接改 这个方案要求父元素设 真正难的不是写对动画,而是让流光在深色/浅色背景下都清晰可见、在不同设备缩放下不拉伸错位、在快速交互中不触发重排。多试几个 border 和 border-color,否则 background-clip: border-box 无边界可裁剪。常见翻车点:动画卡顿、发光不贴边、响应式失效
background-clip: border-box 必须配合 border 属性存在,否则发光会铺满整个元素内容区background-size 百分比 + background-position 动画支持不稳定,建议改用固定像素值如 background-size: 120px 2px 并调小动画时长padding 或 border-radius,需确保 background-origin: border-box,否则圆角处发光会断裂glow-border 和 shadow,阴影会盖住流光;如需叠加,把 shadow 放在父容器上更轻量的方案:用伪元素避免污染主背景
background 会覆盖原有样式。此时用 ::before 伪元素更安全:.glow-border::before {
content: '';
position: absolute;
top: -2px; right: -2px; bottom: -2px; left: -2px;
background: linear-gradient(90deg, transparent, #fff, transparent);
background-size: 200% 2px;
background-position: -100% 0;
background-repeat: no-repeat;
z-index: -1;
animation: shine 2.5s infinite;
pointer-events: none;
}
position: relative,且伪元素尺寸略大于主体(靠负边距撑出边框空间),更适合卡片、按钮等需要保留原背景的场景。background-size 和 animation-duration 组合,比套模板重要得多。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











