Skip to main content
← 🎨 CSS as a design systemΒ·Module B3 Β· Lesson 8
TaskBuild a responsive card grid. .cards: display: grid, grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)), gap: 16px. Six .card divs, each padding: 16px, background: #f5f5f5, border-radius: 8px.

auto-fit + minmax: responsive grids, zero media queries

125 XP9 min
Theory

The most important Grid feature

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px;
}

That's a fully responsive card grid. NO media queries. Read the recipe:

  • repeat(auto-fit, …) β€” fit AS MANY tracks as possible into the container.
  • minmax(280px, 1fr) β€” each track is at LEAST 280px, otherwise grow to fill.

Container is 1200px wide β†’ 4 tracks of 300px each. Resize to 900px β†’ 3 tracks of 300px. Resize to 600px β†’ 2 tracks of 300px. Resize to 400px β†’ 1 track of 400px.

The grid REFLOWS automatically. One line of CSS replaces several media queries.

auto-fit vs auto-fill

grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  • auto-fit β€” when there's extra space, expand tracks to fill it (no empty columns).
  • auto-fill β€” when there's extra space, create empty tracks (preserve column count).

Most of the time you want auto-fit. auto-fill is useful when you want consistent column widths across pages with different item counts.

What this replaces

Pre-grid responsive card grids needed:

.cards { display: flex; flex-wrap: wrap; gap: 16px; }
.card { flex: 1 1 280px; }
@media (max-width: 600px) { .card { flex: 1 1 100%; } }

The grid version is shorter AND handles the edge cases (vertical alignment across rows) that flex-wrap doesn't.

πŸ”’

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.