Skip to content

text-slide

text-slide-up and text-slide-down split the element into lines, mask each line, and slide the inner text into place. The mask clips the offscreen portion so adjacent lines stay clean during animation.

VariantLines slide in from
text-slide-upbelow the line
text-slide-downabove the line
AttributeDefaultNotes
aa-animate(required)text-slide-up or text-slide-down.
aa-splitlinesOverride split mode (chars, words, lines). Lines stay masked regardless — see descender padding.
aa-stagger0.1 (init)Seconds between lines. Falls back to init({ stagger: { lines } }) (default 0.1).
aa-duration(init)Seconds. Falls back to init({ duration }) (default 0.6).
aa-delay0Seconds.
aa-ease(init)Any GSAP ease. Falls back to init({ ease }) (default power4.out).
aa-scrub(off)true or seconds — bind progress to scroll.

Each line is clipped by a wrapper, so tight line-height values can shave descenders (g, j, p, q, y). Tune the descender padding via --aa-line-mask-pad if your typeface needs more room.

gsap, ScrollTrigger, SplitText (line splitting requires SplitText).

text-slide-up

A short hero line

A two-line subhead that wraps onto a second line to show per-line behaviour.

A three-line paragraph of body copy so we can see how the animation reads at a longer scale, with several lines of text wrapping naturally across the page width.

scrubbed (aa-scrub="1")

Tied to scroll.
Watch the easing.
Feel each beat.

text-slide-down

A short hero line

A two-line subhead that wraps onto a second line to show per-line behaviour.

A three-line paragraph of body copy so we can see how the animation reads at a longer scale, with several lines of text wrapping naturally across the page width.

scrubbed (aa-scrub="1")

Tied to scroll.
Watch the easing.
Feel each beat.