Skip to main content
← 🎨 CSS as a design systemΒ·Module B3 Β· Lesson 10
TaskBuild a card row where each card has title + body + footer, all aligned across cards via subgrid. .cards: display: grid, grid-template-columns: repeat(3, 1fr), grid-template-rows: auto auto auto, gap: 16px. Each .card: display: grid, grid-template-rows: subgrid, grid-row: span 3, gap: 8px, padding: 12px, background: #eef.

subgrid: child grids that align with parent

100 XP7 min
Theory

When a nested grid needs to align with its parent

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: auto auto auto;   /* title row, body row, footer row */
  gap: 16px;
}

.card {
  display: grid;
  grid-template-rows: subgrid;          /* INHERIT row tracks from parent */
  grid-row: span 3;                     /* this card spans all 3 parent rows */
  gap: 12px;
}

Without subgrid, each card has its OWN row sizes β€” title/body/footer in card 1 doesn't align with card 2. With subgrid, every card's title row lines up with every other card's title row. Same for body and footer.

What this fixes

Before subgrid (2022), the canonical solution was to put all titles in one grid row, all bodies in another, all footers in another β€” and use display: contents to flatten the DOM. Hacky.

grid-template-columns: subgrid works the same way for columns.

Browser support (2026)

  • Firefox: long-standing.
  • Safari: shipped 2023.
  • Chrome / Edge: shipped late 2023.

Treat as widely supported in 2026. No polyfill β€” older browsers fall back to non-subgrid layout.

When NOT to use subgrid

If your "alignment across cards" need can be solved by giving every card a fixed-height title or a flexbox spacer, do that. Subgrid is for cases where the content height varies but you want rows to align across siblings.

πŸ”’

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.