纯CSS打字动画的实现示例

在一些技术网站中,经常会看到这样一种展示效果:逐个显示一段文本中的字符,模拟出一种打字的效果 。通过这种方式可以显著地提升网页设计感 。
在大部分应用中,都是通过使用 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 设置为该元素中文字的个数
  • 同样,将 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;}
已经基本实现我们想要的效果了,最后只要加上一个闪烁的光标即可 。可以通过使用伪元素生成光标,并通过 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!
-- 展开阅读全文 --

    推荐阅读