最简文字渐显用 css opacity + transition 实现:设初始 opacity: 0 并配 transition,通过类名切换(如 .show)触发;需注意 transition 必须写在初始类,且避免字体加载抖动、慎用 will-change。

用 CSS opacity + transition 实现最简文字渐显
纯 CSS 就能搞定,不需要 JS。核心是把文字初始设为 opacity: 0,再通过类名切换触发过渡动画。
常见错误是直接写 opacity: 0; transition: opacity 0.5s; 但没加触发机制——文字永远停在透明状态。必须靠类名增删、伪类(如 :hover)或页面加载时机来“启动”变化。
- 推荐写法:
.fade-in { opacity: 0; transition: opacity 0.4s ease-out; } .fade-in.show { opacity: 1; } - JS 触发示例(页面加载后 200ms 显示):
setTimeout(() => { document.querySelector('.fade-in').classList.add('show'); }, 200); - 注意:
transition必须写在初始状态(.fade-in),不能只写在.show里,否则反向隐藏时不会过渡
用 @keyframes + animation 控制更精细的淡入节奏
当需要延迟开始、循环、或配合其他动画(比如同时上移+淡入),CSS 动画比 transition 更可控。
容易踩的坑是忘记设置 animation-fill-mode: forwards,导致动画播完立刻回退到 opacity: 0,文字闪一下又消失。
- 基础定义:
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .text-animated { animation: fadeIn 0.6s ease-out 0.2s 1 forwards; } - 参数含义依次为:动画名、时长、缓动函数、延迟、播放次数、填充模式
- 兼容性提示:IE10+ 支持
@keyframes,但需加-webkit-前缀(仅 Safari 旧版和 Android 4.x 需要)
避免文字闪烁:确保父容器不触发重排或强制重绘
渐显过程中如果文字突然跳动、抖动,大概率是字体加载未完成或行高/尺寸不稳定引起的。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
关键不是动画本身,而是渲染上下文。比如用 font-display: swap 加载自定义字体时,文字会先以系统字体渲染再替换,造成两次 layout,淡入效果就被打断。
- 给文字容器预设最小尺寸:
min-height或line-height固定值,防止内容撑开时重排 - 慎用
visibility: hidden替代opacity: 0:前者不占空间且无法过渡,后者保留布局位置,更适合渐显 - 若用 Web Font,建议搭配
font-display: optional或提前加载,避免动画中途换字
移动端要注意 will-change 和性能损耗
在 iOS Safari 或低端安卓机上,大量文字同时渐显可能卡顿,尤其配合滚动监听时。
不是所有场景都需要优化,但一旦发现动画掉帧,优先检查是否误用了 transform: translateZ(0) 强制硬件加速——对纯 opacity 动画反而增加合成层开销。
- 轻量级优化:
will-change: opacity只在动画前一刻加,结束后立即移除(用 JS 控制),避免浏览器长期维护额外图层 - 批量处理建议:用
IntersectionObserver替代scroll事件监听,减少重计算 - 真机测试重点看:快速滚动中进入视口的文字是否延迟触发、是否出现白屏或跳帧
真正难的不是写出淡入效果,而是让几十个文字块在各种设备、各种网络条件下都稳定地、不抢资源地、不干扰阅读地渐显出来。细节都在容器控制、字体策略和触发时机里。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










