纯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媒体查询Media Queries基础学习教程
Feb 29 HTML / CSS
CSS3中几个新增加的盒模型属性使用教程
Mar 01 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
Apr 07 HTML / CSS
html5之Canvas路径绘图、坐标变换应用实例
Dec 26 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
Nov 09 HTML / CSS
详解基于canvas的视频遮罩插件
Jan 04 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
Mar 02 HTML / CSS
html5开发三八女王节表白神器
Mar 07 HTML / CSS
HTML5如何使用SVG的方法示例
Jan 11 HTML / CSS
详解移动端h5页面根据屏幕适配的四种方案
Apr 15 HTML / CSS
CSS 新特性 contain控制页面的重绘与重排问题
Apr 30 HTML / CSS
CSS SandBox应用场景及常见问题
Jun 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
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
document.getElementById的简写方式(获取id对象的简略写法)
2010/09/10 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
angularjs表格分页功能详解
2016/01/21 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
关于Python正则表达式 findall函数问题详解
2018/03/22 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
Carolina工作鞋官网:Carolina Footwear
2019/03/14 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
党员一句话承诺大全
2014/03/28 职场文书
花坛标语大全
2014/06/30 职场文书
暑期培训班策划方案
2014/08/26 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
表扬稿格式范文
2015/01/16 职场文书