纯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 特效范例整理
Aug 22 HTML / CSS
css3.0 图形构成实例练习二
Mar 19 HTML / CSS
一款基于css3的列表toggle特效实例教程
Jan 04 HTML / CSS
CSS3中currentColor关键字的妙用
Feb 27 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
Oct 21 HTML / CSS
CSS3 实现飘动的云朵动画
Dec 01 HTML / CSS
html5 canvas绘制放射性渐变色效果
Jan 04 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
Dec 13 HTML / CSS
突破canvas语法限制 让他支持链式语法
Dec 24 HTML / CSS
使用分层画布来优化HTML5渲染的教程
May 08 HTML / CSS
HTML5中的强制下载属性download使用实例解析
May 12 HTML / CSS
flex弹性布局详解
Mar 20 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调用C代码的实现方法
2014/03/11 PHP
php下获取http状态的实现代码
2014/05/09 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
AngularJS基础 ng-mouseover 指令简单示例
2016/08/02 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
Python搭建FTP服务器的方法示例
2018/01/19 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python3学生名片管理v2.0版
2018/11/29 Python
python反编译学习之字节码详解
2019/05/19 Python
对python 调用类属性的方法详解
2019/07/02 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
我的五年职业生涯规划
2014/01/23 职场文书
双语教学实施方案
2014/03/23 职场文书
法人代表证明书格式
2014/10/01 职场文书
群众路线查摆问题整改措施
2014/10/10 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书
mysql中between的边界,范围说明
2021/06/08 MySQL
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python