故障毛刺文字特效(RGB 分离 + clip-path 切片 CSS 源码)
故障毛刺文字特效源码:伪元素 RGB 分离、clip-path 切片错位、自动播放与悬停触发两种模式,纯 CSS 实现,适合赛博朋克风格标题。
效果演示(真实可交互)
下方第一行文字自动循环播放故障效果,第二行需要把鼠标放上去才触发毛刺,适合不想干扰阅读的场景。
粤喵组件站
悬停触发毛刺
完整代码
HTML 结构:.glitch 元素通过 data-text 属性提供伪元素的复制文本:
<h2 class="glitch auto" data-text="粤喵组件站">粤喵组件站</h2>
<h2 class="glitch hover-only" data-text="悬停触发毛刺">悬停触发毛刺</h2>
核心 CSS:用两个伪元素各复制一份文字,分别着红绿两色并切片错位:
.glitch { position: relative; color: #e8e8e8; }
.glitch::before,
.glitch::after {
content: attr(data-text); /* 复制文字 */
position: absolute; top: 0; left: 0;
width: 100%;
overflow: hidden;
pointer-events: none;
}
.glitch::before { color: #ff3b6b; animation: sliceA 1.8s steps(1, end) infinite, shiftA 1.8s linear infinite alternate; }
.glitch::after { color: #38f9d7; animation: sliceB 2.6s steps(1, end) infinite, shiftB 2.6s linear infinite alternate; }
/* 随机切片:clip-path 每次瞬间跳到不同高度区间 */
@keyframes sliceA {
0% { clip-path: inset(10% 0 62% 0); }
20% { clip-path: inset(55% 0 12% 0); }
40% { clip-path: inset(28% 0 48% 0); }
60% { clip-path: inset(70% 0 6% 0); }
80% { clip-path: inset(42% 0 35% 0); }
100% { clip-path: inset(8% 0 78% 0); }
}
/* 错位漂移 */
@keyframes shiftA { from { transform: translate(-4px, 2px); } to { transform: translate(4px, -2px); } }
悬停触发模式:默认隐藏伪元素,hover 时才播放:
.hover-only::before, .hover-only::after { opacity: 0; }
.hover-only:hover::before { opacity: 1; animation: sliceA 1.2s steps(1, end) infinite, shiftA .6s linear infinite alternate; }
.hover-only:hover::after { opacity: 1; animation: sliceB 1.5s steps(1, end) infinite, shiftB .8s linear infinite alternate; }
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| 切片高度 | inset(10% 0 62% 0) | 控制故障条纹的位置与厚度 |
steps(1, end) | — | 让切片瞬间跳变,产生断裂感 |
| 漂移距离 | ±4px | RGB 分离错位幅度 |
| 动画时长 | 1.8s / 2.6s | 两个伪元素用不同时长避免同步 |
| 悬停模式 | hover-only | 是否仅在 hover 时触发 |
兼容性与性能
clip-path: inset()与attr()在现代浏览器均支持,无需前缀- 动画是 GPU 合成层的 transform + clip-path,开销可控,但伪元素复制了整段文字,长标题会占用额外内存
- 建议故障文字只用于短标题(10 字以内),长文会产生多层重影影响可读性
- 动画使用
steps跳变而非平滑过渡,这正是”信号故障”质感的关键
常见问题
Q: 伪元素复制文字是中文会乱码吗? 不会,attr(data-text) 直接取属性值,中文、英文、符号都能正确显示,注意属性值和元素文本保持一致。
Q: 想调故障频率? 改动画时长,如 1.8s 改成 0.8s 会更急促;想偶尔故障一次,可以把 animation-iteration-count 设为固定次数并用延迟。
Q: 文字太多导致卡顿? 缩短标题字数,或把 overflow: hidden 范围缩小;也可以考虑只在 hover 时触发。
Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。