用 CSS 实现打字机动效
打字机效果常被当成"需要写一堆 JS"的事,其实纯 CSS 就够了。核心是两个动画:一个负责逐字展开宽度,一个负责光标的闪烁。
.typewriter {
overflow: hidden;
white-space: nowrap;
border-right: 2px solid var(--accent);
width: 0;
animation:
typing 3s steps(24) forwards,
caret 0.8s step-end infinite;
}
@keyframes typing {
to { width: 24ch; }
}
@keyframes caret {
50% { border-color: transparent; }
}
要点:
steps(24)让宽度按字符数离散增长,看起来像在"敲字"而不是平滑拉伸。ch单位约等于一个字符宽,和steps的步数保持一致最自然。- 记得在
prefers-reduced-motion下关掉动画,直接显示完整文字。
就这么几行,一个克制的动态标题就活了。