Skip to main content
GSAP Animation TutorialArticle 06

GSAP Stagger Animations: Animate Multiple Elements One After Another

Turn simultaneous group motion into clear visual rhythm by offsetting target start times.

GSAP Stagger Animations Tutorial - NavTechSolution

When HTML, CSS and JavaScript cards all begin together, the movement can feel flat. A stagger adds a small start-time gap while allowing the tweens to overlap:

A rhythmic card reveal
gsap.from(".skill-card", {
  y: 30,
  opacity: 0,
  duration: 0.8,
  stagger: 0.15,
  ease: "power2.out"
})
Without stagger123
With stagger123

1. What is GSAP stagger?

Stagger offsets animation start times across multiple targets. With stagger: 0.2, target two starts 0.2 seconds after target one, and target three another 0.2 seconds later. It does not need to wait for the previous tween to finish.

Time →
Box 1
Box 2
Box 3
0.0s    0.2s    0.4s

2. Why use stagger?

Use stagger to reinforce hierarchy and rhythm in navigation links, feature cards, galleries, lists, statistics, pricing cards, hero copy, social icons and dashboard items. It is most effective when the cascade supports the content rather than decorating everything.

3. Basic stagger syntax

targetsfrom valuesdurationstagger: 0.2
gsap.from(".card", {
  opacity: 0,
  y: 30,
  duration: 0.8,
  stagger: 0.2
})

duration belongs to every target tween; stagger spaces their start times.

4. Your first stagger animation

HTML
CSS
JavaScript

Cards are at their final state.

5. Stagger timing

Fast · 0.051234
Medium · 0.21234
Slow · 0.51234

Small intervals feel tightly connected; larger intervals make each target more distinct. There is no universal best value.

6. Stagger with gsap.to()

gsap.to() moves every card from its current state toward the same destination.

gsap.to(".to-card", { y: -20, rotation: 5, duration: 0.5, stagger: 0.15 })

7. Stagger with gsap.from()

gsap.from() is ideal for cascading entrance animations because the CSS remains the readable final state.

gsap.from(".from-card", { y: 40, opacity: 0, duration: 0.8, stagger: 0.15 })

8. Stagger with gsap.fromTo()

With gsap.fromTo(), stagger belongs in the destination object.

gsap.fromTo(".fromto-card",
  { y: 50, opacity: 0, scale: 0.9 },
  { y: 0, opacity: 1, scale: 1, duration: 0.8, stagger: 0.15 }
)

9. Negative stagger

Normal1 → 2 → 3 → 4
Negative4 → 3 → 2 → 1

A negative numeric interval reverses how start-time offsets are assigned. For explicit intent, from: "end" is often easier to read.

10. Advanced stagger object

stagger: {
  each: 0.15,
  from: "start"
}

The object form supports each, amount, from, grid and distribution ease.

11. each

each: 0.2 creates a 0.2-second gap between adjacent target starts.

Card 10.2s →Card 20.2s →Card 3

12. amount

each: 0.2

Fixed gap per target.

amount: 1

Distributes all offsets across a total one-second span.

13. from: "start"

The collection begins in natural order: 1 → 2 → 3 → 4 → 5.

14. from: "end"

The offset order begins at the end: 5 → 4 → 3 → 2 → 1.

15. from: "center"

Timing starts near the middle and spreads outward: 3 → 2/4 → 1/5.

16. from: "edges"

Timing begins at the outer targets and moves inward. This is supported by the GSAP 3 distribution utility used by this article.

GSAP stagger start end center and edges distribution diagram
Object-based stagger can distribute start times from the beginning, end, center or outer edges.

17. Stagger grid

A grid distribution can radiate timing through rows and columns.

123456789
stagger: { amount: 1, grid: "auto", from: "center" }

18. Stagger ease

In the object form, an ease can shape how offsets are distributed. The next article will explain easing in depth.

19. Interactive stagger playground

1
2
3
4
5
6
7
8
9

Choose a distribution.

20. Practical navigation reveal

This isolated demo never targets the real site navigation.

21. Practical service cards

Web Development

Focused digital solutions built for clear business goals.

AI Development

Focused digital solutions built for clear business goals.

SEO

Focused digital solutions built for clear business goals.

UI/UX

Focused digital solutions built for clear business goals.

22. Practical hero reveal

NavTechSolution

Build motion with rhythm

Guide attention without hiding information.

Try the challenge

23. Stagger vs delay

delay postpones a tween; stagger offsets the starts of targets inside that tween.

GSAP delay versus stagger overlapping start times diagram
Staggered tweens can overlap: the next target starts after the interval, not after the previous animation finishes.

24. Stagger vs timeline

Stagger

Distribute a similar animation across many targets.

Timeline

Sequence distinct animation steps with precise control.

25. Common stagger mistakes

  1. Targeting only one element.
  2. Using an interval so large that the sequence drags.
  3. Confusing duration with start-time spacing.
  4. Confusing delay with stagger.
  5. Using broad selectors or real site components.
  6. Creating sequences that are too long.
  7. Failing to reset before replay.
  8. Ignoring reduced motion and mobile overflow.
  9. Using advanced syntax without checking compatibility.

26. Performance

Prefer interface motion based on opacity, x, y, scale and rotation. Keep decorative target counts reasonable and avoid unnecessary layout-heavy animation.

27. Accessibility

When prefers-reduced-motion is enabled, these demos show final states immediately and skip cascading delays. Every fact remains readable without JavaScript.

28. Mini challenge

Reveal five skills from y: 40, opacity: 0 and scale: 0.9, using duration 0.7 and stagger 0.15.

Show solution
gsap.from(".challenge-skill", {
  y: 40, opacity: 0, scale: 0.9,
  duration: 0.7, stagger: 0.15,
  ease: "power2.out"
})

29. Quick reference

OptionPurposeExample
staggerBasic intervalstagger: 0.2
eachGap per targeteach: 0.15
amountTotal stagger spanamount: 1
fromDistribution originfrom: "center"
gridGrid distributiongrid: "auto"

30. Stagger mental model

Without stagger1234All begin together
With stagger1234Start times are offset

Coming next: easing

LinearConstant progression
PowerSmooth acceleration
BackControlled overshoot
BounceBounce-like finish

Frequently asked questions

What is stagger in GSAP?

Stagger offsets the start times of animations across a group of targets.

What does stagger: 0.2 mean?

Each target starts 0.2 seconds after the previous target in the distribution order.

What is the difference between duration and stagger?

Duration controls each tween length; stagger controls spacing between target start times.

What is the difference between delay and stagger?

Delay postpones the tween as a whole, while stagger offsets targets relative to one another.

Can I use stagger with gsap.from()?

Yes. It is especially useful for revealing groups from a temporary starting state.

Can I use stagger with gsap.fromTo()?

Yes. Put stagger in the destination or toVars object.

How do I reverse a stagger?

Use a negative numeric stagger or an object configuration such as from: "end".

Can GSAP stagger animate a grid?

Yes. Use a grid distribution and choose where its timing should begin.

Is stagger useful for card animations?

Yes, when the timing supports hierarchy and does not make the sequence unnecessarily long.

Can I use GSAP stagger on a PHP website?

Yes. PHP renders the markup and GSAP animates the resulting elements in the browser.

Give groups a clear rhythm

Stagger controls when each target begins. Revisit the GSAP introduction, targeting, to(), from(), or fromTo() as needed.