Skip to main content
← 🎨 CSS as a design systemΒ·Module B6 Β· Lesson 2
TaskBuild a card that responds to PARENT width, not viewport. .wrapper has container-type: inline-size + width: 280px. .card inside has padding 12px by default. @container (min-width: 250px) makes .card padding 24px + background: #efe.

@container: query the parent, not the viewport

100 XP8 min
Theory

The killer 2023+ feature

.card-container {
  container-type: inline-size;       /* opt this element in as a query container */
}

.card { padding: 12px; }

@container (min-width: 400px) {
  .card { padding: 24px; display: grid; grid-template-columns: 1fr 1fr; }
}

Now .card adapts to the SIZE OF ITS PARENT, not the viewport. Same component:

  • In a 320px sidebar β†’ compact single-column.
  • In a 800px main area β†’ 2-column with bigger padding.

Zero media queries.

container-type values

  • inline-size β€” query the parent's WIDTH. The 99% case.
  • size β€” query both width AND height. Use rarely.
  • normal (default) β€” opt OUT, this element is not a query container.

Named containers

.sidebar { container-name: sidebar; container-type: inline-size; }
.main    { container-name: main;    container-type: inline-size; }

@container sidebar (min-width: 200px) { ... }
@container main    (min-width: 600px) { ... }

Use names when a component might live inside MULTIPLE differently-named containers and you want explicit targeting.

Browser support 2026

All evergreen browsers shipped containers in 2022-23. Safe to use everywhere. Older browsers ignore the @container block β€” your CSS fallback applies (so make the default styles the "narrow" version, then enhance with @container for wider).

πŸ”’

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.