在一些技术网站中,经常会看到这样一种展示效果:逐个显示一段文本中的字符,模拟出一种打字的效果 。通过这种方式可以显著地提升网页设计感 。
在大部分应用中,都是通过使用 js 脚本实现该方案,虽然效果很好,但是对于使用 js 来操作出表现层的展示,总感觉有点奇怪,所以尝试下只使用 css 来实现我们的打字动画~
通过css,无法实现像 js 那样一个字一个字的绘制在页面上,那不如就换一个思路,让容器宽度成为动画的主体,让文字逐渐显示出来 。具体来说,最开始容器的宽度是0,随着动画的推进,一个字一个字的扩张到它应用的宽度 。(需要注意,该方案仅适用于单行文本)
按照我们预想的思路,很容易完成下述代码 。
@keyframes typing {from {width: 0;}}h1 {width: 188px;animation: typing 8s;white-space: nowrap;overflow: hidden;}
但是从实现效果上看,并不是那么理想,我们需要的动画效果是逐字呈现而不是这样的平滑显示 。
对于这个问题,很显然,我们会想到使用 steps()
来修复,但是具体需要分多少步又是摆在我们面前的另一个难题 。
要解决这个问题,就需要说到 ch
这个 css 中基本用不到的长度单位,它代表元素所用字体中“0”这一字形的宽度,如果使用的是等宽字体的话,那么“0”字形的宽度和其他所有字形的宽度是一样的,所以很容易想到要解决上述问题,其实只要:
- 将元素文字设置为等宽字体(实际上,应用打字动效的文字都场景大多是为展示代码的形式,大部分情况下也都是使用都等宽字体)
- 元素的
width
设置为该元素中文字的个数 - 同样,将
animation
的steps()
也设置为元素的个数
已经基本实现我们想要的效果了,最后只要加上一个闪烁的光标即可 。可以通过使用伪元素生成光标,并通过 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打字动画的实现示例的文章就介绍到这了,更多相关css打字动画内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章,希望大家以后多多支持www.887551.com!
-- 展开阅读全文 --
推荐阅读
- 新的CSS 伪类函数 :is 和 :where()示例详解
- el-form每行显示两列底部按钮居中效果的实现
- 使用CSS实现六边形的图片效果
- 手贱联系射手座前男友的下场
- 摩羯座男人的梦中情人
- 手贱联系摩羯座前男友的下场
- 手贱联系处女座前男友的下场
- 手贱联系白羊座前男友的下场
- 手贱联系天秤座前男友的下场