Staggered Split-Text Animations in Webflow (GSAP)

Intermediate 40:04 webflowgsapstaggersplit-textanimation

Reveal headings word by word or letter by letter in Webflow with the native GSAP panel — master stagger, the From origin, Split Text, masks, and easing.

Key takeaways

  • Stagger does nothing with a single target — it spreads an animation across multiple elements, so a lone H1 stays still until you Split Text it into words or letters and each piece becomes its own target.
  • Offset time is a fixed delay between each element's start; total time is one budget the whole stagger must fit inside, divided across the intervals (which always equal the number of pieces minus one).
  • The From origin (start, center, end, edges, random, element) only changes the order pieces animate in — the spacing math between them stays exactly the same.
  • Use the From type (not To or From-To) so letters rise from opacity 0 and Y 100% to their designer values, and turn on the Split Text mask to clip each piece for a clean slide-out reveal.
  • There are two easings doing two jobs: the action ease shapes how each individual letter moves; the stagger ease shapes the distribution of the delays — 'in' packs them tight then spreads, 'out' spreads then tightens.

Video chapters

  1. 00:00 Intro
  2. 02:12 The interaction panel, timeline, interactions, actions, and animations
  3. 08:03 Animated properties and Type settings: To, From-To, and From
  4. 11:49 Build a basic slide-and-fade-in animation
  5. 12:43 Repeat, infinite loops, and back-and-forth
  6. 14:41 The Stagger option: total time and offset time
  7. 22:28 The From option: start, center, end, edges, random, element
  8. 28:33 Split Text: split by, and masks
  9. 30:31 Setting up the Split Text animation
  10. 33:42 Split Text ease property, explained with examples
  11. 38:17 Outro

You can make a heading reveal itself word by word, or letter by letter, entirely inside Webflow — no code — using the new GSAP-powered animation panel and its Stagger and Split Text options. This lesson is about staggered text animations: how to break a heading apart, time each piece, and make the whole reveal feel intentional instead of accidental.

The panel is powerful but honestly one of the trickiest things Webflow has shipped. Most people click through Stagger and Split Text hoping something nice falls out. The goal here is the opposite — to understand exactly what stagger, offset, split text, and stagger easing each do, so every delay is placed on purpose and nothing is left to guesswork.

Get the mental model and the settings stop being a lottery. You’ll be able to build reveals that are elegant, precisely timed, and easy to tweak when a client asks for “a little faster at the end.”

How it works

The panel model. Since Webflow’s GSAP-powered system, the interactions panel is built from a few nested pieces. A trigger (like page load) holds one or more actions. An action is just a group of property transformations — a way to move certain values from a start point to an end point — applied to one or more targets. Each animated property has a Type that decides how the values are calculated: To animates from whatever the element currently has in the designer toward a final value; From-To lets you set both ends explicitly; From sets only a starting value and animates back to the designer value. For a page-load reveal, From is the one you want — you define where letters start (invisible, pushed down) and they land on their real, designed state.

Stagger — the core idea. Stagger means the animation is applied to multiple targets one after another instead of all at once. The catch that trips everyone up: with a single target there is nothing to stagger, so turning it on changes nothing. It only comes alive once you have several targets — which is exactly why Split Text matters. There are two ways to time it. Offset time is a fixed delay between each element’s start: 0.5s means every piece begins half a second after the one before, so adding elements makes the sequence longer. Total time is a fixed budget for the whole stagger, divided evenly across the intervals — and the number of intervals is always the number of pieces minus one. So with 13 letters and a total time of 0.5s, each gap is roughly 0.5 ÷ 12 ≈ 0.04s, tight and smooth. Same idea, opposite direction: offset grows with the count, total time shrinks each gap as the count grows.

The From origin, and Split Text with masks. The stagger’s own From setting (start, center, end, edges, random, element) decides where the sequence begins — center animates the middle piece first then works outward, edges fires the outer pieces first and moves in, and so on. It changes the order only; the spacing logic between pieces stays identical. Split Text is what gives stagger something to chew on: it breaks one text element into words, lines, or characters, and each becomes a target. The mask option wraps every piece in its own clipping container, so it stays hidden until it moves into view — combined with an upward motion, each word or letter looks like it slides out from behind a hidden edge, far cleaner than a bare fade.

Two easings, two jobs. There are two ease settings and they are not the same thing even though they share a name. The ease in the action group shapes how each individual piece travels from its start value to its end value. The ease inside the stagger settings shapes the distribution of the delays between pieces. Leave it at none and the gaps are even. Choose a curve ending in in and the gaps start tight then spread — the reveal feels like it’s slowing down. Choose one ending in out and the gaps start wide then tighten — it feels like it’s speeding up. Exotic curves (back, bounce, elastic) produce deliberately chaotic, playful spacing; fun to try, rarely what you want for a clean heading.

How to use it

  1. Switch to the GSAP system. If your interactions panel still shows the old interface, open the dropdown at the bottom that says classic interactions and choose interactions with GSAP. A lightning-bolt icon appears on the left for the new panel.

  2. Add a page-load trigger. Use the trigger menu on the right, pick page load, and choose Custom to build freely. Rename the interaction something clear like home page load (a page name in parentheses keeps things tidy across a project).

  3. Target the heading. Webflow adds a default class-based target, but an H1 usually has no class, so switch the target to a custom selector and type H1. With correct SEO there’s only one H1 per page, so all matching elements is fine.

  4. Set the animation. Under the action, set a duration and (optionally) a start delay, and pick an ease you like — expo out reads nicely. Keep only the properties you need: opacity and move Y. Set the Type to From, uncheck the To box, then set opacity to start at 0% and Y to start at 100% so the text rises up as it fades in.

  5. Enable Split Text. Turn on Split Text and choose word or letter (line behaves like word when each word is on its own line). Set mask to match the split type so each piece is clipped for a clean slide-out reveal.

  6. Choose your stagger. Set Stagger to offset time for a fixed gap between pieces, or total time to fit the whole reveal inside one duration. Pick a From origin (start is the classic left-to-right; try center or edges for variety).

  7. Shape the pacing (optional). Add a stagger ease to bias the delays — in to decelerate the reveal, out to accelerate it. Exaggerate the total time briefly while tuning so you can actually see what each curve does, then dial it back.

Everything here lives in native Webflow settings, so there’s nothing to paste — clone the project, open the page-load interaction, and change the values to feel how each one behaves.

Resources

Frequently asked questions

Why is my stagger not doing anything in Webflow?
Stagger spreads an animation across several targets, so with a single element there is nothing to spread and it looks the same as no stagger at all. Either add more targets, or enable Split Text on a text element so it breaks into words or letters that stagger can space out.
What's the difference between offset time and total time in Webflow's stagger?
Offset time is the fixed gap between each element starting — set it to 0.5s and every piece begins half a second after the previous one, so the sequence grows longer as you add elements. Total time is a fixed budget for the entire stagger, split evenly across the intervals, so more elements just means smaller gaps.
What does the Split Text mask option do?
The mask wraps each split piece — word or letter — in its own clipping container, so the piece is hidden until it moves into view. Paired with an upward motion it makes each word or letter look like it slides out from behind a hidden edge, a much cleaner reveal than a plain fade.
How do I animate a heading letter by letter on page load in Webflow?
Add a page load interaction targeting the heading, enable Split Text set to letter, and animate opacity and vertical position with the From type so each letter rises into place. Then set Stagger to offset or total time to space the letters out one after another.
What are the two ease settings in a Webflow stagger, and how are they different?
The ease in the action group controls how each individual piece moves from its start value to its end value. The ease inside the stagger settings is different: it controls the distribution of the delays between pieces, so an 'in' curve makes the reveal feel like it slows down and an 'out' curve makes it feel like it speeds up.

← Back to the course

Also part of these courses