讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

剧云
剧云

中文短剧剧本制作平台

如何使用CSS制作逼真的打字机逐字输出动画?

风涛小哥_4220

风涛小哥_4220

发布时间:2026-11-12 08:35:20

|

742人浏览过

|

来源于php中文网

原创

纯CSS打字机效果需用ch单位+steps()实现逐字截取与光标独立闪烁,依赖data-text属性、overflow:hidden遮罩及等宽字体,避免JS插入以保障SEO和可访问性。

如何使用css制作逼真的打字机逐字输出动画?

用 @keyframes 模拟打字机光标闪烁和逐字显示

核心是控制 content 的截取长度 + 光标(::after)的显隐。不能靠 JS 插入字符,否则 SEO 不友好、无法选中、也不利于屏幕阅读器。纯 CSS 方案必须依赖 ch 单位和 steps() 时间函数。

常见错误是直接对 width 或 opacity 做线性动画,结果字符“滑入”或“淡入”,完全不像打字效果。真正的打字是离散的、逐字的、带停顿的。

  • 用 white-space: nowrap 防止换行打断节奏
  • 动画时长要匹配字符数:比如 20 字符,总时长设为 2s,则单字耗时 100ms,再加光标闪烁周期(通常 500ms 亮 / 500ms 灭)
  • 必须用 animation-timing-function: steps(20, end)(20 是字符数),否则会插值过渡,字就“糊”了

content 动态截取只能靠伪元素 + attr(data-text) 配合

CSS 本身不能计算字符串长度或截取子串,所以得把文本塞进 HTML 的 data-text 属性里,再用 content: attr(data-text) 读出来。但这样还是整段显示——关键在「遮罩」:用父容器 overflow: hidden,再让伪元素宽度从 0ch 动画到 20ch(假设最多 20 字),配合 steps() 实现逐字展开。

容易踩的坑是用了 em 或 px 作单位:等宽字体下 1ch == 1 字符宽度,非等宽字体(如 system-ui)会导致错位或跳动。务必确认字体是等宽的,或改用 monospace 回退。

立即学习“前端免费学习笔记(深入)”;

CSS
CSS

CSS 官方网站入口。访问 W3C 的 CSS 页面,查看 CSS 标准、学习资料与工作组动态;CSS 是 Web 标准,无需下载安装。

下载
  • HTML 写法:<div class="typewriter" data-text="Hello World"></div>
  • CSS 中伪元素 ::after 的 content 必须设为 attr(data-text),不能写死
  • 动画的 to 关键帧里 width 值必须严格等于最大字符数 × 1ch,多 0.1ch 都可能多闪一次光标

光标动画和文本动画必须解耦,否则节奏错乱

很多人把光标(竖线)和文字显示绑在同一个 @keyframes 里,结果光标随文字一起“抖”或者卡在中间不闪。正确做法是:文本动画用 steps() 控制宽度;光标单独用另一个 @keyframes,用 opacity 在 0 和 1 之间切换,时间函数用 step-start 或 ease-in-out 都可以,但周期要独立设置(比如 1s 一圈)。

兼容性注意点:ch 单位在 Safari 15.4 以下对某些字体支持不稳定;steps(N, end) 的 end 参数在旧版 Edge 会失效,建议补一个 steps(N) 回退。

  • 光标伪元素推荐用 border-left 而非 background,更轻量且抗锯齿好
  • 若需“打完暂停再消失”,可在文本动画结束后加一个 animation-delay 控制光标延迟隐藏
  • 移动端要注意 font-size 缩放后 ch 值不变,但视觉宽度变,必要时用 vw 微调光标高度

响应式场景下字符数不确定?用 JS 补充 CSS 变量更可靠

当文本来自 CMS 或用户输入,长度不可预知时,硬编码 steps(32) 和 width: 32ch 就会出问题。此时最稳的方式是:JS 读取文本长度,写入 CSS 自定义属性,CSS 动画再引用该变量。

别用 style.width 直接设内联样式——会覆盖动画;要用 element.style.setProperty('--char-count', len),然后在 CSS 里写 width: calc(var(--char-count) * 1ch) 和 animation-timing-function: steps(var(--char-count), end)。

  • CSS 变量不支持直接用于 steps() 参数(部分浏览器报错),稳妥写法是 JS 同时注入两个变量:--char-count 和 --steps-fn,后者拼成字符串 "steps(24, end)" 再用 animation-timing-function: var(--steps-fn)
  • 服务端渲染页面首次加载时,JS 可能滞后,建议加 transition: opacity .1s 防止闪白
  • 如果文本含空格或 emoji,注意 emoji 通常占 2ch,.length 会误判,需用 Array.from(text).length 计算真实可视字符数

实际做下来,最难的不是写动画,而是让光标在最后一字停驻时保持自然节奏,又不破坏可访问性。很多方案为了效果砍掉了 user-select: text,结果用户根本没法复制那行酷炫文字——这点很容易被忽略。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

5656

2023.06.15

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

1217

2023.07.27

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2098

2023.07.28

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

4266

2023.08.01

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

8945

2023.08.10

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

7571

2023.08.10

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2457

2023.08.21

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

3631

2023.08.22

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

80

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn