Skip to content

Staggered list

The items of a list enter one after the other. One Reveal holds the items, and stagger animates its children. Use it for feature grids, key figures, changelogs, steps and search results.

Why teams pick it

Fast

Runs on the Web Animations API.

Accessible

Follows reduced motion.

Small

No dependencies to install.

Your system reduces motion, so the preview does not animate. The code still follows your choices.

Effect
Stagger
Easing
Fine-tune
600ms
0ms
Features.jsx
import { Reveal } from "@awesome-reveal/react";
import { slide } from "@awesome-reveal/react/keyframes";
export function Features({ features }) {
return (
<Reveal className="features" keyframes={slide()} stagger={100}>
{features.map((feature) => (
<article key={feature.title} className="card">
<h3>{feature.title}</h3>
<p>{feature.text}</p>
</article>
))}
</Reveal>
);
}

One Reveal for the whole list creates one observer and keeps one copy of the options. A Reveal around each item creates an observer for each item, and the items reveal at different times as the user scrolls.

With stagger, the children reveal together as the list enters the viewport. If the list is long, the last items can start their animation below the fold. Split the list into groups, or give each group its own Reveal, as in Alternating sections.

  • stagger: 0 animates all the children together.
  • Choose stagger between 40 and 120 ms for lists. A larger value makes a long list slow to finish.
  • Use pop() for key figures. Each figure grows past its resting size, then settles back.
  • The library reads the children when the list is revealed. Items that you add before the reveal animate. Items that you add later do not.
  • stagger animates child elements only. Put text in an element, as in Text animation.
  • In React, always render the children. See useReveal for the rules with a hook.