Skip to main content
← 🎨 CSS as a design systemΒ·Module B2 Β· Lesson 6
TaskBuild a hero block that vertically + horizontally centers its content. <div class='hero'><h1>Welcome</h1></div>. .hero has display: flex, align-items: center, justify-content: center, min-height: 300px, background: #1e1e2e, color: white.

align-items: cross-axis alignment

75 XP6 min
Theory

How items align across the cross axis

For a default flex row (main axis horizontal):

.container { display: flex; }
.container { align-items: stretch; }     /* default β€” items fill the cross-axis (match heights) */
.container { align-items: flex-start; }  /* all at the top */
.container { align-items: flex-end; }    /* all at the bottom */
.container { align-items: center; }      /* all vertically centered */
.container { align-items: baseline; }    /* text baselines aligned (typography) */

Vertical centering, finally solved

The pre-flexbox era required 5 different hacks to vertically center an element. Now:

.hero {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}

That centers content both horizontally AND vertically within a full-viewport hero. CSS hadn't been able to do this cleanly for 20 years.

baseline β€” typography pro move

When you have items of different font-sizes side-by-side and want the TEXT BASELINES to align (not the box tops), use align-items: baseline:

.price-row {
  display: flex;
  align-items: baseline;
  gap: 8px;
}
.price-row .big { font-size: 48px; }
.price-row .small { font-size: 16px; }

The big "$" and small "/mo" share a baseline. Aligned tops would look ugly.

πŸ”’

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.