纯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新特性应用之过渡与动画
Jan 10 HTML / CSS
使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE
Jan 23 HTML / CSS
CSS Grid布局教程之什么是网格布局
Dec 30 HTML / CSS
利用CSS3制作简单的3d半透明立方体图片展示
Mar 25 HTML / CSS
canvas学习笔记之绘制简单路径
Jan 28 HTML / CSS
X/HTML5 和 XHTML2
Oct 17 HTML / CSS
HTML5调用手机摄像头拍照的实现思路及代码
Jun 15 HTML / CSS
Html5+JS实现手机摇一摇功能
Apr 24 HTML / CSS
html5 初试 indexedDB(推荐)
Jul 21 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
Apr 29 HTML / CSS
html5拖拽应用记录及注意点
May 27 HTML / CSS
关于HTML5+ API plusready的兼容问题
Nov 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
完整删除ecshop中获取店铺信息的API
2014/12/24 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
js window对象属性和方法相关资料整理
2015/11/11 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python 文件读写操作实例详解
2014/03/12 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python读取二进制mnist实例详解
2017/05/31 Python
python读取文件名并改名字的实例
2019/01/07 Python
python实现一个函数版的名片管理系统过程解析
2019/08/27 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
用python批量下载apk
2020/12/29 Python
三严三实对照检查材料思想汇报
2014/09/28 职场文书
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学校捐书活动总结
2015/05/08 职场文书
主持稿开场白
2015/06/01 职场文书
JavaScript实现复选框全选功能
2021/04/11 Javascript
python的变量和简单数字类型详解
2021/09/15 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
对象析构函数__del__在Python中何时使用
2022/03/22 Python