WHAT
若在网页总实现打字/输入效果,可使用纯CSS的方式实现,不多说,动图效果如下:
适用场景:页面中希望被注意的文字,标题、引文、博客标语等;HTML5 中炫酷的打字效果实现 ~
HOW
参考文章: 小tips: 纯CSS实现打字动画效果 By 张鑫旭
Talk is cheap. Show me the code. 不想看文章的直接 →_→ CodeSandBox Example
代码实现
示例中区分了纯中文 & 中英文混合两种,原因在于中英文(符号)的字符宽度不同,中英文混合的代码参考如下:
<p class="typing-e">中英文 Printer 效果,字符宽度 18.5</p>
.typing-e {
width: 18.5em;
height: 1.25em;
border-right: 1px solid transparent;
animation: typing-e 3.5s steps(37, end), blink-caret 0.75s step-end infinite;
font-family: Consolas, Monaco;
word-break: break-all;
overflow: hidden;
}
@keyframes typing-e {
from {
width: 0;
}
to {
width: 18.5em;
}
}
@keyframes blink-caret {
from,
to {
border-color: transparent;
}
50% {
border-color: currentColor;
}
}
可以看出实现还是相对简单的,纯 CSS 实现需要定下字符宽度(示例中为 18.5em)。
原理?通过改变容器宽度实现,border-right 实现光标样式,加之 CSS3 animation 的动画实现效果。
列出相关的技术点:
font-family: Consolas, Monaco;
等宽字体便于宽度计算- animation
<step-timing-function>
方式实现
<step-timing-function> = step-start | step-end | steps(<integer>[, <step-position>]?)
- @keyframes 关键帧 实现改变容器宽度 & 边框颜色渐变
扩展应用
上述仅仅是实现了单行定宽文字的效果,可考虑研究下多行的效果呈现(如古诗词、名人名言等 ✨)
配合 JS、Less 等可实现较为通用的方式/方法(不用确认宽度,自动计算)
如需更炫酷,可考虑加文字变大 or 色彩动画等(但觉得可能会过犹不及)