纯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的rem属性制作响应式页面布局的要点解析
May 24 HTML / CSS
css3动画效果抖动解决方法
Sep 03 HTML / CSS
支持IE8的纯css3开发的响应式设计动画菜单教程
Nov 05 HTML / CSS
CSS3 animation实现简易幻灯片轮播特效
Sep 27 HTML / CSS
CSS3使用transition属性实现过渡效果
Apr 18 HTML / CSS
CSS3 @media的基本用法总结
Sep 10 HTML / CSS
html5中svg canvas和图片之间相互转化思路代码
Jan 24 HTML / CSS
一款html5 canvas实现的图片玻璃碎片特效
Sep 11 HTML / CSS
全面解析HTML5中的标准属性与自定义属性
Feb 18 HTML / CSS
Html5移动端适配IphoneX等机型的方法
Jun 25 HTML / CSS
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
May 14 HTML / CSS
CSS3 制作的书本翻页特效
Apr 13 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 分页原理详解
2009/08/21 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
JavaScript学习笔记之DOM基础 2.4
2015/08/14 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
2017/02/11 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
2018/07/03 jQuery
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
Python Queue模块详细介绍及实例
2016/12/27 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
python flask安装和命令详解
2019/04/02 Python
python实现随机漫步方法和原理
2019/06/10 Python
Python能做什么
2020/06/02 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
爱情寄语大全
2014/04/09 职场文书
国庆促销活动总结
2014/08/29 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书