纯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常用功能的写法
Jun 05 HTML / CSS
css3旋转木马_动力节点Java学院整理
Jul 12 HTML / CSS
HTML5边玩边学(3)像素和颜色
Sep 21 HTML / CSS
20佳惊艳的HTML5应用程序示例分享
May 03 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
Dec 13 HTML / CSS
HTML5学习心得总结(推荐)
Jul 08 HTML / CSS
HTML5 Canvas 实现K线图的示例代码
Dec 23 HTML / CSS
使用SVG实现提示框功能的示例代码
Jun 05 HTML / CSS
Canvas获取视频第一帧缩略图的实现
Nov 11 HTML / CSS
Html5移动端div固定到底部实现底部导航条的几种方式
Mar 09 HTML / CSS
CSS3常见动画的实现方式
Apr 14 HTML / CSS
CSS中使用grid布局实现一套模板多种布局
Jul 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生成图形(Libchart)实例
2013/11/06 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php微信公众平台开发类实例
2015/04/01 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
python实现外卖信息管理系统
2018/01/11 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
python super用法及原理详解
2020/01/20 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
Python爬虫入门教程01之爬取豆瓣Top电影
2021/01/24 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
《三峡》教学反思
2014/03/01 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
教代会闭幕词
2015/01/28 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
解决python存数据库速度太慢的问题
2021/04/23 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python