Split text (per-character animation)

Text broken into letters, words, or lines so each piece can animate separately, usually as a staggered reveal.

animate each letter one after anotherwords reveal line by lineletters come in separatelyheading that reveals itself letter by lettermake the title arrive one word at a timeletters slide up from behind a lineword by word revealspilt text animation

See it

Live demo coming soon

What it is

Split text breaks one text node into addressable characters, words, or visual lines so each piece can move on its own. Stagger those pieces and a heading can rise letter by letter, a sentence can reveal word by word, or lines can slide out from behind a mask. GSAP SplitText is the familiar packaged tool for the job, and SplitType does the splitting alone if you want to animate the pieces with something else.

Choose the unit to match the rhythm: characters feel expressive, words stay readable, and lines suit editorial entrances. For a manual character split, Intl.Segmenter handles grapheme clusters that 'string.split("")' would tear apart. Wait for web fonts before measuring lines, because a font swap changes every wrap point.

Gotcha: dozens of wrapper spans are presentation, not document meaning. Keep the original phrase as the accessible name and hide the fragments from assistive technology so it is announced once, not character by character. Re-split line-based text after a responsive reflow, and do not split paragraphs whose main job is comfortable reading.

Ask AI for it

Split this heading into words and characters with GSAP SplitText, then animate each character from opacity 0 and translateY(0.8em) to its resting position over 500ms with a 25ms stagger and cubic-bezier(0.22, 1, 0.36, 1) easing. Preserve spaces, keep the original heading as its accessible name, and mark generated fragments 'aria-hidden'. Wait for 'document.fonts.ready' before splitting, rebuild line measurements with ResizeObserver when the container width changes, revert the split on cleanup, and show unsplit text under 'prefers-reduced-motion: reduce'.

You might have meant

staggerscroll triggered revealkeyframeseasing functionduration

Go deeper