blaze-motion
← All components

Stagger

Stagger

Linear stagger — children rise into view in sequence with a tunable per-child step.

First to rise.
Then this one.
Last, a beat later.

Installation

One command drops the source into your repo — editable, with the provider and motion pulled in automatically.

npx shadcn add https://motion.asmitsah.dev/r/stagger.json

Usage

Basic

Wrap a list with Stagger and each direct StaggerItem rises in sequence, once, on scroll into view.

import { Stagger, StaggerItem } from "@/components/motion/stagger";

<Stagger className="flex flex-col gap-3">
  <StaggerItem>First</StaggerItem>
  <StaggerItem>Second</StaggerItem>
  <StaggerItem>Third</StaggerItem>
</Stagger>

Grid

Works over any layout — className passes through, so a grid staggers just as well as a stack.

<Stagger className="grid grid-cols-3 gap-4">
  <StaggerItem>Card A</StaggerItem>
  <StaggerItem>Card B</StaggerItem>
  <StaggerItem>Card C</StaggerItem>
</Stagger>

Custom cadence

Slow the step and add a lead delay to make a longer list read more deliberately.

<Stagger staggerChildren={0.12} delayChildren={0.2} className="flex flex-col gap-3">
  <StaggerItem>Slower</StaggerItem>
  <StaggerItem>Cadence</StaggerItem>
  <StaggerItem>Between items</StaggerItem>
</Stagger>

Props

PropTypeDefaultDescription
childrenReactNodeStaggerItem children — each rises in sequence.
classNamestringPassed straight through — Stagger becomes your list/grid container.
styleCSSPropertiesInline style passthrough.
staggerChildrennumberfeel.stagger (0.08)Seconds between each child's animation start.
delayChildrennumberfeel.staggerDelay (0.05)Seconds before the first child animates.

StaggerItem

PropTypeDefaultDescription
childrenReactNodeContent for this one item.
classNamestringPassed straight through to the item element.
styleCSSPropertiesInline style passthrough.