letter-spacing负值动画易闪黑块,因大负值使多字重叠成高对比实心黑影;需配合opacity分阶段渐变、避免normal起始值、慎用visibility,并依字体大小与字符数动态设初始负值。

不能只靠 letter-spacing 从负值直接过渡到正值——开头几帧文字会完全叠成一块黑影,用户第一反应是“页面卡了”或“字体渲染崩了”。
为什么 letter-spacing 负值动画容易闪黑块
浏览器对重叠文字做抗锯齿时,像素叠加会让深色文字在深色背景上形成高对比度实心块;尤其当初始 letter-spacing 设得过小(比如 -200px),5个字挤在 1em 宽度里,视觉上就是一坨糊黑。这不是动效,是干扰。
-
opacity: 0必须和letter-spacing同步启动,但起始透明度要略晚于间距变化(例如 delay0.2s),否则看到的是“先糊成一团再淡入” - 别用
visibility: hidden替代opacity——它不触发重绘,动画中间状态直接跳帧 - 移动端 iOS Safari 对大负值
letter-spacing渲染极慢,建议加transform: translateZ(0)强制 GPU 加速
letter-spacing 初始值怎么设才不溢出也不糊
负值不是越小越好。设 -100px 在 font-size: 16px 下可能让文字向左冲出容器;设 -5px 又看不出聚拢感。得结合字体大小、字符数、容器宽度动态估算。
- 粗略起点公式:
letter-spacing ≈ -0.8 × font-size × 字符数(仅作参考,必须微调) - 例如
font-size: 80px、5 个汉字 → 建议从-320px开始试,再缩到-260px左右 - 英文含空格时,
letter-spacing也拉宽空格,易导致布局偏移;加white-space: nowrap锁定
如何用 @keyframes 控制汇聚节奏
全局 ease-in-out 不适用:人眼对间距变化和透明度变化的感知节奏完全不同,必须分阶段手动配。
- 推荐四段式关键帧,例如:
-
0%:letter-spacing: -240px,opacity: 0 -
30%:letter-spacing: -240px,opacity: 0.01(刚能辨认轮廓) -
60%:letter-spacing: -60px,opacity: 0.8(主体已可读) -
100%:letter-spacing: 0,opacity: 1
hover 触发汇聚动画要注意什么
如果想用鼠标悬停触发“从散开→汇聚”,核心陷阱是:初始值不能写 letter-spacing: normal,否则动画不触发。
- ✅ 正确写法:初始
letter-spacing: 0px,悬停letter-spacing: -120px,并显式声明transition: letter-spacing 0.4s cubic-bezier(0.3, 0.8, 0.5, 1) - ⚠️ 旧版 Safari(≤15.4)对
0px起步有延迟,建议改用0.1px起步 - 中英混排时,某些字体对非 ASCII 字符的
letter-spacing响应不一致,加font-variant-east-asian: full-width统一处理
真正容易被忽略的是字体本身——等宽字体(如 monospace)响应最稳,而可变字体(如 Inter Variable)可能因字重切换干扰间距动画节奏,上线前务必在目标字体下实测。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











