Skip to main content
← 🎨 CSS as a design systemΒ·Module B7 Β· Lesson 5
TaskBuild a hero entrance. @keyframes appear { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }. .hero { padding: 40px; text-align: center; }. .hero h1 animation 0.5s appear ease-out both. .hero p animation 0.5s appear ease-out 0.15s both. .hero .cta animation 0.5s appear ease-out 0.30s both, padding 10px 20px, background #3B82F6, color white, border-radius 8px, border none.

Page entrance animations: fade + slide

75 XP6 min
Theory

The "appear smoothly on page load" pattern

@keyframes appear {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}

.hero h1 { animation: appear 0.6s ease-out forwards; }
.hero p  { animation: appear 0.6s ease-out 0.15s forwards; }   /* 150ms delay */
.hero .cta { animation: appear 0.6s ease-out 0.30s forwards; } /* 300ms delay */

Stagger the delays

Children of the hero each get a slightly LATER animation-delay. The cascade creates a "drift" effect β€” your eye follows from h1 β†’ p β†’ CTA.

50-200ms between each is the sweet spot. Less feels simultaneous; more feels disconnected.

Backwards fill-mode

.hero h1 { animation: appear 0.6s ease-out backwards; }

Without backwards, the element FLASHES into the "to" state for a frame before the animation runs (because the from state hasn't applied yet). backwards makes the browser apply the from state immediately, fixing the flash.

forwards keeps the FINAL state after the animation. backwards applies the INITIAL state before the animation. both does both β€” common combo.

reduced-motion alternative

For users who opted out, show the element instantly with NO motion but in the final visual state:

@media (prefers-reduced-motion: reduce) {
  .hero h1, .hero p, .hero .cta { animation: none; opacity: 1; }
}
πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.