Staggered Transition Delays for Sequential Animation

Use CSS transition-delay to create staggered, sequential animations across sibling elements. A common pattern for list reveals and menu animations.

Animation Patterns

Detailed Explanation

Staggered Animations with Transition Delay

The transition-delay property lets you offset when a transition starts. By applying incremental delays to sibling elements, you create a cascading, staggered animation effect.

CSS Code

.list-item {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.4s ease-out,
              transform 0.4s ease-out;
}

.list-item.visible {
  opacity: 1;
  transform: translateY(0);
}

.list-item:nth-child(1) { transition-delay: 0s; }
.list-item:nth-child(2) { transition-delay: 0.05s; }
.list-item:nth-child(3) { transition-delay: 0.1s; }
.list-item:nth-child(4) { transition-delay: 0.15s; }
.list-item:nth-child(5) { transition-delay: 0.2s; }

Using CSS Custom Properties for Dynamic Delays

Instead of hardcoding delays for each child, use CSS custom properties set via JavaScript or inline styles:

.list-item {
  transition-delay: calc(var(--index) * 0.05s);
}
<li class="list-item" style="--index: 0">First</li>
<li class="list-item" style="--index: 1">Second</li>
<li class="list-item" style="--index: 2">Third</li>

Choosing the Delay Increment

  • 0.03s–0.05s: Fast stagger — items appear almost simultaneously but with a visible wave
  • 0.08s–0.12s: Medium stagger — clearly sequential, natural rhythm
  • 0.15s–0.2s: Slow stagger — dramatic, each item has its moment

Reverse Delay for Exit

When removing items, reverse the delay order so the last item leaves first:

.list-item.leaving:nth-child(1) { transition-delay: 0.2s; }
.list-item.leaving:nth-child(2) { transition-delay: 0.15s; }
.list-item.leaving:nth-child(3) { transition-delay: 0.1s; }

Use Case

Staggered transitions are perfect for dropdown menus, sidebar navigation reveals, search result lists, notification feeds, and any list of items that should appear sequentially rather than all at once.

Try It — CSS Transition Generator

Open full tool