纯CSS打字动画的实现示例


Posted in HTML / CSS onAugust 05, 2022

在一些技术网站中,经常会看到这样一种展示效果:逐个显示一段文本中的字符,模拟出一种打字的效果。通过这种方式可以显著地提升网页设计感。

在大部分应用中,都是通过使用 JS 脚本实现该方案,虽然效果很好,但是对于使用 JS 来操作出表现层的展示,总感觉有点奇怪,所以尝试下只使用 CSS 来实现我们的打字动画~

通过CSS,无法实现像 JS 那样一个字一个字的绘制在页面上,那不如就换一个思路,让容器宽度成为动画的主体,让文字逐渐显示出来。具体来说,最开始容器的宽度是0,随着动画的推进,一个字一个字的扩张到它应用的宽度。(需要注意,该方案仅适用于单行文本)

按照我们预想的思路,很容易完成下述代码。

@keyframes typing {
    from {
        width: 0;
    }
}

h1 {
    width: 188px;
    animation: typing 8s;
    white-space: nowrap;
    overflow: hidden;
}

纯CSS打字动画的实现示例

但是从实现效果上看,并不是那么理想,我们需要的动画效果是逐字呈现而不是这样的平滑显示。

对于这个问题,很显然,我们会想到使用 steps() 来修复,但是具体需要分多少步又是摆在我们面前的另一个难题。

要解决这个问题,就需要说到 ch 这个 CSS 中基本用不到的长度单位,它代表元素所用字体中“0”这一字形的宽度,如果使用的是等宽字体的话,那么“0”字形的宽度和其他所有字形的宽度是一样的,所以很容易想到要解决上述问题,其实只要:

  • 将元素文字设置为等宽字体(实际上,应用打字动效的文字都场景大多是为展示代码的形式,大部分情况下也都是使用都等宽字体)
  • 元素的 width 设置为该元素中文字的个数
  • 同样,将 animationsteps() 也设置为元素的个数
@keyframes typing {
    from {
        width: 0;
    }
}

h1 {
    font-family: "Cascadia Code", Menlo, Monaco, "Courier New", monospace;
    width: 12ch;
    animation: typing 8s steps(12);
    white-space: nowrap;
    overflow: hidden;
}

纯CSS打字动画的实现示例

已经基本实现我们想要的效果了,最后只要加上一个闪烁的光标即可。可以通过使用伪元素生成光标,并通过 opacity 属性来实现闪烁效果:

@keyframes caret {
    50% {
        opacity: 0;
    }
}

h1::after {
    content: "";
    position: absolute;
    right: 0;
    width: 2px;
    top: 6px;
    bottom: 6px;
    background: #000;
    animation: caret 1s steps(1) infinite;
}

到此这篇关于纯CSS打字动画的实现示例的文章就介绍到这了,更多相关CSS打字动画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3弹性盒模型开发笔记(一)
Apr 26 HTML / CSS
css3中的calc函数浅析
Jul 10 HTML / CSS
用CSS3来实现社交分享按钮
Nov 11 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
你不知道的5个HTML5新功能
Jun 28 HTML / CSS
HTML5和以前HTML4的区别整理
Oct 20 HTML / CSS
HTML table 表格边框的实现思路
Oct 12 HTML / CSS
html5视频自动横过来自适应页面且点击播放功能的实现
Jun 03 HTML / CSS
AmazeUI 折叠面板的实现代码
Aug 17 HTML / CSS
CSS3 制作的书本翻页特效
Apr 13 HTML / CSS
HTML+CSS 实现顶部导航栏菜单制作
Jun 03 HTML / CSS
分享CSS盒子模型隐藏的几种方式
Feb 28 HTML / CSS
新的CSS 伪类函数 :is() 和 :where()示例详解
前端使用svg图片改色实现示例
Jul 23 #HTML / CSS
详解flex:1什么意思
Jul 23 #HTML / CSS
CSS子盒子水平和垂直居中的五种方法
Jul 23 #HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 #HTML / CSS
css让页脚保持在底部位置的四种方案
Jul 23 #HTML / CSS
浅谈为什么我的 z-index 又不生效了
Jul 15 #HTML / CSS
You might like
php使用function_exists判断函数可用的方法
2014/11/19 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
AngularJS ng-bind 指令简单实现
2016/07/30 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
Vue前后端不同端口的实现方法
2018/09/19 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
深入理解Python中各种方法的运作原理
2015/06/15 Python
Python中functools模块的常用函数解析
2016/06/30 Python
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
校三好学生主要事迹
2014/01/11 职场文书
小学生自我评价范文
2014/01/25 职场文书
网络技术专业求职信
2014/02/18 职场文书
导游个人求职信
2014/04/25 职场文书
股东出资证明书范例
2014/10/04 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
2014年新教师工作总结
2014/11/08 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js