0

0

CSS怎样制作文字打字机效果?steps()动画函数详解

看不見的法師

看不見的法師

发布时间:2025-08-04 14:09:01

|

872人浏览过

|

来源于php中文网

原创

要制作css文字打字机效果,核心是使用steps()动画函数配合width或clip-path属性,并添加闪烁光标;1. 使用html结构包裹文字内容;2. 通过css的@keyframes定义typing动画,利用width从0到100%变化并配合steps(字符数, end)实现逐字显示;3. 使用border-right或伪元素创建光标,并通过blink-caret动画配合step-end实现瞬时闪烁;4. 推荐使用等宽字体(如monospace)以确保字符宽度一致,避免非等宽字体导致的显示错位;5. 若追求更高精度,可考虑clip-path结合javascript动态计算,但通常优先选择等宽字体以简化实现;该方法能有效模拟真实打字过程,最终效果完整且视觉自然。

CSS怎样制作文字打字机效果?steps()动画函数详解

CSS要制作文字打字机效果,说白了,核心就是利用

steps()
动画函数,配合
width
或者
clip-path
属性来模拟文字逐个出现的视觉效果。再加一个会闪烁的光标,那味儿就更足了。这玩意儿实现起来不算复杂,但细节上有些讲究,尤其是在处理不同字符宽度的时候。

解决方案

实现打字机效果,我们主要依赖HTML结构、CSS动画(

@keyframes
)和
steps()
定时函数。这里我直接给出代码,然后我们再聊聊里面的门道。

HTML结构:

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

你好,世界!这是一段打字机效果的文字。

CSS样式:

.typewriter-container {
    width: fit-content; /* 让容器宽度自适应文字内容,确保动画的终点是文字的实际宽度 */
    overflow: hidden;   /* 隐藏超出宽度的文字 */
    border-right: .15em solid orange; /* 光标效果,一个右边框 */
    font-family: 'MonoLisa', 'Fira Code', monospace; /* 选用等宽字体是关键,效果会更自然 */
    font-size: 2em;
    white-space: nowrap; /* 确保文字不换行,否则动画会很奇怪 */
    margin: 50px auto;
    animation: 
        typing 4s steps(20, end) forwards, /* typing动画,20步,每步结束时显示字符,动画结束后保持最终状态 */
        blink-caret .75s step-end infinite; /* 光标闪烁动画,每步结束时切换状态,无限循环 */
}

/* typing动画:控制文字宽度 */
@keyframes typing {
    from { width: 0; }
    to { width: 100%; }
}

/* blink-caret动画:控制光标闪烁 */
@keyframes blink-caret {
    from, to { border-color: transparent; } /* 初始和结束时透明 */
    50% { border-color: orange; } /* 中间时显示颜色 */
}

一点说明: 上面的代码中,

steps(20, end)
里的
20
是我根据示例文字“你好,世界!这是一段打字机效果的文字。”的字符数量大概估算的。实际使用时,这个数字应该等于或略大于你的文字字符数(包括标点和空格)。
forwards
让动画结束后保持最终状态,不然文字会缩回去。

steps()
函数在打字机效果中为何如此关键?

我觉得吧,

steps()
函数就是这个打字机效果的灵魂。它和我们平时用的
ease
linear
那种平滑过渡完全不一样。说白了,
steps()
让动画不再是连续的,而是变成了一系列离散的“跳跃”。

想象一下,你打字的时候,是不是每敲一个键,屏幕上才出现一个字?这个过程不是渐变的,而是瞬间完成的。

steps()
就完美模拟了这种“瞬间出现”的感觉。

比如,

steps(N, end)
,它会把你的动画时间分成N个等长的片段,然后在每个片段的末尾(
end
)瞬间跳到下一个状态。对于打字机效果来说,我们把文字容器的
width
从0动画到100%,如果用
linear
,文字会像墨水晕开一样逐渐显现,那根本不是打字。但用了
steps(字符数, end)
,每个“步”就对应了一个字符的宽度,动画每完成一步,就恰好显示出下一个字符,非常精确。

没有

steps()
,或者说没有这种阶梯式的动画控制,我们很难纯粹用CSS实现这种逐字显示的视觉效果。它是实现这种“机械感”和“真实感”的关键。

如何处理不同字体宽度对打字机效果的影响?

这确实是个挺实际的问题。我们知道,大多数非等宽字体(比如微软雅黑、宋体)中,字母'i'和'w'的宽度就差远了,汉字也比英文标点宽。如果你直接用

width
动画,在非等宽字体下,动画的步进可能就无法精确对应每个字符,导致有些字符提前显示,有些则被“挤”在一起,效果会有点怪。

我个人处理这个问题通常有几种方式:

GitHub Copilot
GitHub Copilot

GitHub AI编程工具,实时编程建议

下载
  1. 首选等宽字体(Monospace Font):这是最直接、最有效的方法。等宽字体顾名思义,每个字符的宽度都是一样的。这样,

    width
    动画的每一步就能精确地对应一个字符的宽度,打字机效果自然就完美了。像
    monospace
    这个通用字体族,或者
    Fira Code
    MonoLisa
    这类专门的编程字体,都是不错的选择。这也是我在解决方案里直接推荐
    font-family: monospace;
    的原因。

  2. 利用

    ch
    单位(字符单位)
    ch
    单位是CSS中一个比较有意思的单位,它大致等于字体中“0”这个字符的宽度。理论上,你可以用
    width: Nch;
    来设置宽度,N就是字符数。但这只是一个近似值,因为即使是等宽字体,
    ch
    也不一定完全精确对应所有字符的宽度,更何况非等宽字体。所以,我很少直接依赖
    ch
    来做打字机效果的精确控制,更多时候把它当做一个粗略的尺寸单位。

  3. 考虑

    clip-path
    (更复杂但精确):如果非要用非等宽字体,并且追求像素级的完美,那
    clip-path
    可能是一个选择。你可以通过
    clip-path: inset(0 100% 0 0)
    clip-path: inset(0 0 0 0)
    来动画,然后用
    steps()
    。但这种方式实现起来要复杂得多,你可能需要用JavaScript来计算每个字符的精确宽度和对应的
    clip-path
    值,然后动态生成CSS变量或Keyframes。对于纯CSS的打字机效果,这通常是过度设计了,除非有非常特殊的视觉要求。

总结来说,我的建议是:优先使用等宽字体。 这能省去很多麻烦,而且效果通常已经非常出色。

如何为打字机效果添加逼真的光标闪烁动画?

一个没有闪烁光标的打字机效果,就像喝咖啡没加糖,总觉得少了点什么。光标的闪烁是打字机效果的灵魂伴侣,它让整个动画看起来更生动,更有“正在输入”的感觉。

实现光标闪烁动画,通常有两种思路:

  1. 利用

    border-right
    属性:这是我上面代码里用的方法,也是最常用、最简洁的方式。我们给文字容器(或者一个包裹文字的伪元素)添加一个右边框,这个边框就充当了光标。然后,我们通过一个独立的
    @keyframes
    动画来控制这个边框的颜色或透明度,让它周期性地显示和隐藏。

    .typewriter-container {
        /* ... 其他样式 ... */
        border-right: .15em solid orange; /* 光标的颜色和粗细 */
        animation: 
            /* ... typing动画 ... */
            blink-caret .75s step-end infinite; /* 闪烁动画 */
    }
    
    @keyframes blink-caret {
        from, to { border-color: transparent; } /* 初始和结束时透明 */
        50% { border-color: orange; } /* 中间时显示颜色 */
    }

    这里

    step-end
    steps(1, end)
    效果类似,它确保了光标是瞬间出现和消失,而不是平滑渐隐渐显,这更符合我们对光标的认知。
    infinite
    则让它无限循环闪烁。

  2. 使用伪元素(

    ::after
    :如果你不想用边框,或者需要更复杂的光标样式(比如一个块状光标),可以使用伪元素。

    .typewriter-container {
        position: relative; /* 为伪元素定位提供参考 */
        /* ... 其他样式 ... */
    }
    
    .typewriter-container::after {
        content: '|'; /* 或者一个块状字符 */
        position: absolute;
        right: 0; /* 或者根据需要调整位置 */
        top: 0;
        bottom: 0;
        width: .15em; /* 光标宽度 */
        background-color: orange; /* 光标颜色 */
        animation: blink-caret-pseudo .75s step-end infinite;
    }
    
    @keyframes blink-caret-pseudo {
        from, to { opacity: 0; }
        50% { opacity: 1; }
    }

    这种方式更灵活,你可以把

    content
    设置成任何字符,或者干脆不设置
    content
    ,只通过
    width
    background-color
    来创建一个块状光标。

两种方法各有优劣,但核心都是通过

steps()
或者
step-end
来控制光标的“瞬时”闪烁效果。我个人更倾向于第一种,因为代码更简洁,对于大多数打字机效果来说已经足够了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
html边框设置教程
html边框设置教程

本教程将带你全面掌握HTML/CSS边框设置,从基础的border属性讲起,涵盖所有边框样式、圆角设置及高级技巧,帮助你快速上手实现各种边框效果。

35

2025.09.02

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

109

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

16

2026.01.26

苹果官方查询网站 苹果手机正品激活查询入口
苹果官方查询网站 苹果手机正品激活查询入口

苹果官方查询网站主要通过 checkcoverage.apple.com/cn/zh/ 进行,可用于查询序列号(SN)对应的保修状态、激活日期及技术支持服务。此外,查找丢失设备请使用 iCloud.com/find,购买信息与物流可访问 Apple (中国大陆) 订单状态页面。

131

2026.01.26

npd人格什么意思 npd人格有什么特征
npd人格什么意思 npd人格有什么特征

NPD(Narcissistic Personality Disorder)即自恋型人格障碍,是一种心理健康问题,特点是极度夸大自我重要性、需要过度赞美与关注,同时极度缺乏共情能力,背后常掩藏着低自尊和不安全感,影响人际关系、工作和生活,通常在青少年时期开始显现,需由专业人士诊断。

7

2026.01.26

windows安全中心怎么关闭 windows安全中心怎么执行操作
windows安全中心怎么关闭 windows安全中心怎么执行操作

关闭Windows安全中心(Windows Defender)可通过系统设置暂时关闭,或使用组策略/注册表永久关闭。最简单的方法是:进入设置 > 隐私和安全性 > Windows安全中心 > 病毒和威胁防护 > 管理设置,将实时保护等选项关闭。

6

2026.01.26

2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】
2026年春运抢票攻略大全 春运抢票攻略教你三招手【技巧】

铁路12306提供起售时间查询、起售提醒、购票预填、候补购票及误购限时免费退票五项服务,并强调官方渠道唯一性与信息安全。

117

2026.01.26

个人所得税税率表2026 个人所得税率最新税率表
个人所得税税率表2026 个人所得税率最新税率表

以工资薪金所得为例,应纳税额 = 应纳税所得额 × 税率 - 速算扣除数。应纳税所得额 = 月度收入 - 5000 元 - 专项扣除 - 专项附加扣除 - 依法确定的其他扣除。假设某员工月工资 10000 元,专项扣除 1000 元,专项附加扣除 2000 元,当月应纳税所得额为 10000 - 5000 - 1000 - 2000 = 2000 元,对应税率为 3%,速算扣除数为 0,则当月应纳税额为 2000×3% = 60 元。

35

2026.01.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.3万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号