🍊十分钟学会打字动画

简介: 🍊十分钟学会打字动画

前言


背景知识:基本的CSS动画,逐帧动画,闪烁效果


有些时候,我们希望一段文本中的字符逐个显现,模拟出一种打字的效果。这个效果在技术类网站中尤为流行,用等宽字体可以营造出一种终端命令行的感觉。如果使用得当,它确实可以让整个网页的设计感提升一个档次。


这篇文章我们就用CSS来实现一下这个效果~✨


解决方案


核心思路就是让容器的宽度成为动画的主体:


把所有文本包裹在这个容器中,然后让它的宽度从0开始以步进动画的方式、一个字一个字地扩张到它应有的宽度。


你可能已经察觉到了,这个方法是有局限的:它并不适用于多行文本。


好的,我们开始写代码吧!假设我们需要把这个动画效果应用到h1标题上,并且已经它把设置为等宽字体了,结构代码如下所示


<h1>CSS is awesome!</h1>
复制代码


🧑1.0版本


我们很容易地给他加上动画,让他宽度从0变化完整的宽度


/*
*1.0版本
*/
@keyframes typing {
    0% { width: 0 }
}
h1 {
  background: lightgreen;
  font: bold 200% Consolas, Monaco, monospace;
  width: 8.25em;
  animation: typing 8s ;
}
复制代码


3cc39a77696f4419ac612dba2ed2cc40_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


我们可以看到产生的效果简直就是车祸现场😱,跟我们想要的的打字效果没有一点关系。


👦1.1版本


宝儿你可能已经猜到问题出在哪儿了,我们忘了用white-space:nowrap;来阻止文本折行,因此文本的行数会随着宽度的扩张不断变化。其次,我们忘了加上overflow: hidden;,所以超出宽度的文本没有被裁切掉。我们完善一下代码


/*
*1.1版本
*/
@keyframes typing {
    0% { width: 0 }
}
h1 {
  background: lightgreen;
  font: bold 200% Consolas, Monaco, monospace;
  width: 8.25em;
  white-space: nowrap;
  overflow: hidden;
  animation: typing 8s steps(15);
}
复制代码


9f98d2bbd78644a492da85825ded338c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


值得注意的是我们这里的逐帧动画是通过设置steps实现的,我们所需要的步进数量是由字符的数量来决定的,这显然是很难维护的,而且对于动态文字来说更是不可能维护的。不过,我们稍后将看到,可以用一小段JavaScript代码来把这件事情自动化。


🕵️‍♂️2.0版本


aa8a524983e34b638e4390f53fc8c0fd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


/*
*2.0版本
*/
@keyframes typing {
  0% { width: 0 }
}
@keyframes caret {
  50% { border-right-color: transparent; }
}
h1 {
  /*background: lightgreen;*/
  font: bold 200% Consolas, Monaco, monospace;
  /* width: 8.25em; */
  width: 15ch;
  white-space: nowrap;
  overflow: hidden;
  border-right: .05em solid;
  animation: typing 8s steps(15),
       caret 1s steps(1) infinite;
}
复制代码


2.0版本我们我们使用了ch单位,这个ch单位是由CSS值与单位(第三版规范引入的一个新单位,表示“0”字形的宽度。它应该是最不为人知的一个新单位,因为在绝大多数场景下,我们并不关心0这个字符显示出来到底有多宽。但对等宽字体来说,这是个例外。在等宽字体中,“0”字形的宽度和其他所有字形的宽度是一样的。因此,如果我们用ch单位来表达这个标题的宽度,那取值实际上就是字符的数量,在本例子中,也就是15。


同时我们添加了闪烁光标,我们用右边框来模拟光标效果,同时给光标设置闪烁的动画,将光标设置为透明即可,要注意的,光标的动画是无限循环的!


这个动画现在的表现相当完美了,不过还不是很易于维护:需要根据每个标题的字数来给它们分别指定不同的宽度样式,而且还需要在每次改变标题内容时同步更新这些宽度样式。显然,这种场景正是JavaScript的用武之地:


🕵️‍♀️2.1终极版本


aa8a524983e34b638e4390f53fc8c0fd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.gif


/*
*2.1终极版本
*/
@keyframes typing {
  0% { width: 0 }
}
@keyframes caret {
  50% { border-right-color: transparent; }
}
h1 {
  font: bold 200% Consolas, Monaco, monospace;
  white-space: nowrap;
  overflow: hidden;
  border-right: .05em solid;
  animation: typing 8s,
       caret 1s steps(1) infinite;
}
复制代码
const doc = document.querySelector('h1')
let len = doc.textContent.length, s = doc.style
s.width = len + 'ch'
s.animationTimingFunction = 'steps('+len+')'
复制代码


只需短短几行JavaScript代码,我们避免了手动计算字符数量和步进数量,取得两全其美的结果:不仅动画生动逼真,而且代码易于维护!


试一试


try it !


参考资料:《CSS揭秘》


最后


⚽本文带领大家实现了打字的动画效果,相信阅读完你一定有了不小的收获~

⚾如果你对这篇文章感兴趣欢迎点赞关注+收藏,更多精彩知识正在等你!😘

相关文章
|
6月前
|
弹性计算 人工智能 机器人
阿里云ECS/轻量服务器+本地全平台部署OpenClaw|集成QQ机器人+千问Qwen3.6-Plus+Coding Plan大模型配置保姆级教程
2026年,开源AI自动化框架OpenClaw(曾用名Clawdbot)已成为个人与团队效率提升的核心工具,凭借“行动式AI”能力,可将自然语言指令转化为文件管理、系统控制、数据处理、社交交互等实际任务执行。本文完整覆盖2026年阿里云轻量服务器部署及本地MacOS/Linux/Windows11部署OpenClaw(Clawdbot)步骤流程及阿里云千问Qwen3.6-Plus配置或市场上免费大模型Coding Plan API配置及常见问题解答,同步新增阿里云ECS云服务器专业部署、QQ机器人全流程集成方案,所有操作附可直接复制的代码命令、可视化指引与高频问题排查方案。
878 14
|
弹性计算
学生申请阿里云服务器流程,云工开物免费领取云服务器
学生可免费领取或低价购买阿里云服务器。通过“云工开物”计划,学生可申领300元无门槛代金券,用于购买指定云服务器产品。新用户可选38元/年的轻量应用服务器,老用户可选99元/年的ECS服务器,续费同价。具体优惠及操作流程可参考阿里云官方页面。
|
6月前
|
人工智能 架构师 自动驾驶
Qoder Together 武汉站来啦!从工具提效到组织升级,企业级 AI Coding 落地实践
4月28日14:30-17:00,武汉光谷万豪酒店举办Qoder AI编程实践沙龙。深度解析产品、全栈流程再造、中小研发团队落地实践,并有架构师现场带练。扫码或点击链接报名!
450 0
|
11月前
|
SQL 移动开发 Oracle
Oracle 数据库查询:单表查询
想知道Oracle是如何一步步处理你的查询请求吗?关键在于理解它背后“看不见的”执行顺序。它会先从FROM和WHERE锁定数据,再用GROUP BY分组,最后才排序。搞懂这个流程,再掌握用ROWNUM实现分页的技巧,就能更自如地从数据库里拿到你想要的数据了。
990 5
|
搜索推荐 API
【强烈推荐使用】免费在线使用 GPT-4 | Free GPT-4 Online
这是一个无需API密钥的在线GPT-4工具,用户可直接输入消息进行交互。特色功能包括:重试按钮、Prompt菜单、重新开始对话及设置选项(如随机性调整和历史消息数选择),提供个性化和高效交流体验。详情见个人主页简介。
1694 5
【强烈推荐使用】免费在线使用 GPT-4 | Free GPT-4 Online
|
机器学习/深度学习 人工智能 开发者
DeepSeek安装部署指南,基于阿里云PAI零代码,小白也能轻松搞定!
阿里云PAI平台支持零代码一键部署DeepSeek-V3和DeepSeek-R1大模型,用户可轻松实现从训练到部署再到推理的全流程。通过PAI Model Gallery,开发者只需简单几步即可完成模型部署,享受高效便捷的AI开发体验。具体步骤包括:开通PAI服务、进入控制台选择模型、一键部署并获取调用信息。整个过程简单快捷,极大降低了使用门槛。
2454 43
|
Java C++ 开发者
【技术贴】if-else VS switch:谁才是Java条件判断的王者?
【6月更文挑战第14天】本文探讨了Java中if-else与switch语句的选择问题。if-else基于布尔逻辑,适合处理复杂逻辑,而switch在处理多分支特别是枚举类型时更高效。if-else在条件动态变化或复杂逻辑时更合适,switch则因其跳转表机制在固定选项中表现优秀。性能上,switch在大量选项时占优,但现代JVM优化后两者差异不大。选择时应考虑场景、可读性和维护性,灵活运用。理解两者特点,才能写出优雅高效的代码。
1354 0
|
存储 监控 前端开发
如何开发项目管理系统中的合同管理板块?(附架构图+流程图+代码参考)
合同管理是项目管理系统中的核心模块,涵盖合同生命周期、审批流程、履行监控及变更处理。通过数字化、自动化手段,提升管理效率,降低风险,确保合规性。本文详解合同管理模块的设计与开发,包括功能实现、业务流程及技术应用,助力企业构建高效管理系统。
|
机器学习/深度学习 数据可视化 数据安全/隐私保护
抖音留痕脚本,快手小红书微博,自动留痕插件工具
就是用autojs写的一个自动化工具脚本,其实写了好几天,感觉有点价值就分享出来吧 核心代码实现