❉Recipe
Typewriter Reveal
HyperFrames snippetReveal text character-by-character via an animated clip-path with steps() timing — pure CSS/GSAP, GPU-composited, no per-char DOM. The announcement-card text-in effect.
3 units use it
What it is
## What it is
A monospace typewriter reveal that wipes the text in left-to-right using `clip-path: inset(...)` animated with a `steps(N)` ease, where N = the character count. Because it animates one property with a stepped ease, it looks like discrete keystrokes without splitting the text into per-character spans, and it stays seek-deterministic in HyperFrames (validated in the Vercel-Ship-style composition, MEMORY: project_ship_style_template).
## When to use it
- Announcement / ship-note / terminal cards where each line should type in.
- Any place a per-char SplitText reveal would be overkill and you want a single cheap animated property.
## Knobs
- `steps(N)` where N = number of characters in the line (each step = one glyph).
- `duration` = total type time (≈ N * 0.04s reads as fast typing).
- A trailing caret is an optional `::after` block that blinks.
How to use it standalone
/* CSS: monospace line clipped from the right, revealed left-to-right. */
.tw { font-family: 'Courier New', monospace; white-space: nowrap; overflow: hidden; clip-path: inset(0 100% 0 0); }
// GSAP: step the clip from fully-hidden to fully-shown over N characters.
// chars = line.textContent.length
const chars = el.textContent.length;
tl.to(el, { clipPath: "inset(0 0% 0 0)", duration: chars * 0.04, ease: `steps(${chars})` }, startSec);| Param | Value |
|---|---|
| ease | steps(N) where N = char count |
| per_char_sec | 0.04 |
Live demo
Units that use this recipe
3 unitsEvery finished unit with Typewriter Reveal in its recipe. Open one to see the full ingredient list, or remix straight from a tile.