
在浏览作品集网站或产品介绍页时,你或许见过这样的动态文本效果:文字像打字机一样逐个字母弹出,稍作停顿后又像被删除键清除,接着换成新的词汇重复这一过程。这种灵动的动画能让静态页面瞬间鲜活起来,但你可能不知道,实现它根本不需要 JavaScript —— 纯 CSS 就能搞定。

打字机动画的核心原理
这种动画的核心逻辑其实很简单,拆解后包含几个关键步骤:
- 从一段基础文本开始(比如 “我是小明,一名____设计师”);
- 在文本的空白位置(示例中 “____” 处),逐个字母 “输入” 第一个关键词(如 “UI”);
- 完整显示关键词后,暂停 1-2 秒;
- 按相反顺序 “删除” 这个词,回到空白状态;
- 对下一个关键词(如 “产品”)重复 “输入 – 暂停 – 删除” 的过程;
- 最后一个词不删除,保持显示状态。
同时,文本末尾会有一个闪烁的 “光标”(类似打字时的竖线),增强打字机的真实感。
第一步:用 CSS 实现闪烁光标
光标是打字机动画的 “灵魂细节”,它的实现堪称 CSS 动画的入门练习。我们可以用伪元素和关键帧动画轻松搞定。
1. 绘制光标
光标本质是一条竖线,我们可以通过 ::after 伪元素在文本末尾添加它:
1
2
3
4
5 .typewriter-text::after {
content: ""; /* 伪元素必须设置content才会显示 */
border-right: 2px solid #333; /* 2px粗的黑色竖线 */
margin-left: 3px; /* 与文本保持一点距离 */
}
2. 让光标 “闪烁” 起来
CSS 动画的核心是 “关键帧”—— 定义动画在不同时间点的状态。光标需要在 “显示” 和 “隐藏” 之间切换,opacity(透明度)属性是绝佳选择:
1
2
3
4
5
6
7
8
9
10
11 /* 定义闪烁关键帧 */
@keyframes blink {
0%, 100% { opacity: 1; } /* 开始和结束时完全显示 */
50% { opacity: 0; } /* 中间时刻完全隐藏 */
}
/* 应用动画到光标 */
.typewriter-text::after {
animation: blink 0.6s linear infinite;
/* 0.6s完成一次闪烁,匀速播放,无限循环 */
}
这样,一条每秒闪烁约 1.7 次的光标就完成了。
第二步:实现文本的 “输入 – 删除” 动画
文本动画的核心是通过::before伪元素动态改变content属性 —— 在不同时间点显示关键词的不同字母组合,模拟 “输入” 和 “删除” 的过程。
1. 基础 HTML 结构
先准备一段包含 “空白位置” 的文本,用<span>标记动画区域:
1
2
3 <div class="sentence">
我是小明,一名<span class="typewriter-text"></span>设计师。
</div>
2. 静态样式设置
给文本添加基础样式,让整体更协调:
1
2
3
4
5
6 .sentence {
font-size: 24px;
font-family: "Courier New", monospace; /* 等宽字体更像打字机效果 */
text-align: center;
margin: 50px auto;
}
3. 单个词的 “输入” 动画
以关键词 “UI”(2 个字母)为例,我们需要让它从空值逐步变成完整单词。关键帧的时间点需按字母数量拆分:
- 总动画时长设为 4 秒(可自定义);
- 2 个字母意味着分 3 个阶段(空→1 个字母→2 个字母);
- 每个阶段占比:100% ÷ 3 ≈ 33.3%。
关键帧代码如下:
1
2
3
4
5
6
7
8
9
10 @keyframes type-ui {
0% { content: ""; } /* 初始为空 */
33.3% { content: "U"; } /* 1/3时间点显示第一个字母 */
100% { content: "UI"; } /* 结束时显示完整单词 */
}
.typewriter-text::before {
content: "";
animation: type-ui 4s 1 forwards; /* 4秒完成,播放1次,停在最后一帧 */
}
此时,文本会从 “我是小明,一名设计师” 逐渐变成 “我是小明,一名 UI 设计师”。
4. 加入 “删除” 和 “暂停” 效果
要让单词在显示后被 “删除”,只需在关键帧中反向重复 “输入” 步骤,并在中间加入停顿。仍以 “UI” 为例,总时长设为 8 秒(输入 2 秒 + 暂停 2 秒 + 删除 2 秒 + 缓冲 2 秒):
1
2
3
4
5
6
7
8
9
10
11
12 @keyframes type-delete-ui {
0% { content: ""; }
12.5% { content: "U"; } /* 1秒时输入第一个字母 */
25% { content: "UI"; } /* 2秒时输入完成 */
50% { content: "UI"; } /* 2-4秒暂停(占25%时长) */
62.5% { content: "U"; } /* 5秒时开始删除第一个字母 */
75%, 100% { content: ""; } /* 6秒时删除完成,保持空白 */
}
.typewriter-text::before {
animation: type-delete-ui 8s 1 forwards;
}
5. 多单词循环动画
如果需要切换多个单词(如 “UI→产品→交互”),需按单词总长度和停顿时间计算关键帧占比。公式如下:
总步骤 =(前 n-1 个单词的字母数 ×2)+ 1 + 最后 1 个单词的字母数(×2 是因为每个词要 “输入 + 删除”,+1 是词间停顿);
总时长 = 总步骤 × 每个字母的动画时间 + 总停顿时间。
例如,3 个单词 “UI”(2 字母)、“产品”(2 汉字)、“交互”(2 汉字):
总步骤 =(2+2)×2 + 1 + 2 = 13;
若每个字母动画 0.5 秒,停顿 1 秒,总时长 = 13×0.5 + 2×1 = 8.5 秒。
按此计算关键帧时间点,即可实现多词循环。
为什么纯 CSS 比 JavaScript 更值得选?
或许你会疑惑:用 JS 不是更灵活吗?但纯 CSS 方案的优势很明显:
- 零依赖:无需编写 JS 代码或引入第三方库(如 Anime.js),减少页面加载负担;
- 兼容性更强:部分用户可能因浏览器设置、防火墙等禁用 JS,而 CSS 几乎不会被屏蔽;
- 更稳定:CSS 动画由浏览器原生渲染,性能优于 JS 模拟的动画,不易出现卡顿。
当然,它也有小缺点:添加或修改单词时,需要重新计算关键帧时间点(可通过工具自动生成解决)。
用纯 CSS 实现打字机动画,本质是通过伪元素动态改变内容,配合关键帧控制时间节奏。从闪烁的光标到单词的 “输入 – 删除”,每一步都能通过基础 CSS 语法完成。这种方案轻量、稳定,还能兼容更多场景 —— 下次想给网站加动态文本时,不妨试试这个纯 CSS 方案。
文章名称:《无需一行 JavaScript 用纯 CSS 打造流畅的打字机动画》
文章固定链接:https://www.dayanzai.me/typewriter-animation.html
本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
猜你喜欢
- 2024-12-07快速文件加密器 Fast File Encryptor 12.7 绿色中文版
- 2025-09-27桌面整理工具 StarDock Fences 6.2.0.1 x64 中文多语免费版
- 2023-05-31免费 CAD 电气设计软件 DesignSpark Electrical 2.0.1 x64 中文多语免费版
- 2014-09-09Win7 直角质感透明清新玻璃主题 又一款非常棒的直角玻璃主题
- 2023-04-12什么是高端显卡以及它们的成本是多少?
相关推荐
- 2022-11-15快速了解 RISC vs RISC-V 以及 ARM 有什么区别和不同?
- 2025-10-14安卓个性时钟 Alarm Clock Pro 11.1.0 重新定义你的每日唤醒体验
- 2023-02-23优秀播放器 GOM Player Plus 2.3.84.5351 x64 中文免费版
- 2022-11-07开源免费 3DS 模拟器 Citra Nightly 2312 中文多语免费版
- 2014-09-04faceblue Theme for Windows 7 蓝色简洁的Win7主题





