纯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 2D图片转动样式可以扩充到Js当中
Apr 29 HTML / CSS
使用CSS Grid布局实现网格的流动
Dec 30 HTML / CSS
CSS3中几个新增加的盒模型属性使用教程
Mar 01 HTML / CSS
前端面试必备之html5的新特性
Sep 05 HTML / CSS
Html5移动端获奖无缝滚动动画实现示例
Jun 25 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
Jan 30 HTML / CSS
使用HTML5的File实现base64和图片的互转
Aug 01 HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
Aug 02 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
Dec 03 HTML / CSS
HTML5 LocalStorage 本地存储刷新值还在
Mar 10 HTML / CSS
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
Sep 19 HTML / CSS
css3 实现文字闪烁效果的三种方式示例代码
Apr 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存储过程调用实例代码
2013/02/03 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
动态表格Table类的实现
2009/08/26 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
详解JavaScript函数
2015/12/01 Javascript
ReactJs快速入门教程(精华版)
2016/11/28 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
javascript 正则表达式去空行方法
2017/01/24 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
vue组件name的作用小结
2018/05/23 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
小程序实现tab标签页
2020/11/16 Javascript
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
2020/03/30 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
应届生自我鉴定
2013/12/11 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
《去年的树》教学反思
2016/02/18 职场文书