纯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和html制作泡沫对话框实现代码
Mar 21 HTML / CSS
CSS中几个与换行有关的属性简明总结
Apr 15 HTML / CSS
使用纯 CSS 创作一个脉动 loader效果的源码
Sep 28 HTML / CSS
css3实现背景模糊的三种方式(小结)
May 15 HTML / CSS
CSS3 实现穿梭星空动画
Nov 13 HTML / CSS
CSS3实现的渐变幻灯片效果
Dec 07 HTML / CSS
HTML5的自定义属性data-*详细介绍和JS操作实例
Apr 10 HTML / CSS
html5桌面通知(Web Notifications)实例解析
Jul 07 HTML / CSS
html5需遵循的6个设计原则
Apr 27 HTML / CSS
HTML5 canvas基本绘图之填充样式实现
Jun 27 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
HTML页面中使两个div并排显示的实现
May 15 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
Zend Framework入门教程之Zend_View组件用法示例
2016/12/09 PHP
基于jquery循环map功能的代码
2011/02/26 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
Python Web框架Tornado运行和部署
2020/10/19 Python
python安装scipy的方法步骤
2019/06/26 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
500行python代码实现飞机大战
2020/04/24 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
幼儿园英语教学反思
2014/01/30 职场文书
工程专业应届生求职信
2014/02/19 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
学习三严三实心得体会
2014/10/13 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android