Split text (per-character animation)
Text broken into letters, words, or lines so each piece can animate separately, usually as a staggered reveal.
See it
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'.