纯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实现质感细腻丝滑按钮
Mar 09 HTML / CSS
详解CSS3 弹性布局快速入门
Jun 06 HTML / CSS
基于CSS3实现立方体自转效果
Mar 01 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
CSS3制作彩色进度条样式的代码示例分享
Jun 23 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
使用HTML5做个画图板的方法介绍
May 03 HTML / CSS
HTML5和以前HTML4的区别整理
Oct 20 HTML / CSS
一款利用html5和css3动画排列人物头像的实例演示
Dec 05 HTML / CSS
小程序canvas中文字设置居中锚点
Apr 16 HTML / CSS
使用postMessage让 iframe自适应高度的方法示例
Oct 08 HTML / CSS
详解CSS伪元素的妙用单标签之美
May 25 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
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
PHP addcslashes()函数讲解
2019/02/03 PHP
PHP的curl函数的用法总结
2019/02/14 PHP
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
解决json日期格式问题的3种方法
2014/02/02 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
微信小程序开发(二)图片上传+服务端接收详解
2017/01/11 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
利用layer实现表单完美验证的方法
2019/09/26 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS