Skip to main content
← 🎨 CSS as a design systemΒ·Module B3 Β· Lesson 11
TaskBuild a label + input grid. .form: display: grid, grid-template-columns: max-content 1fr, gap: 8px 16px. Inside: 3 pairs of <label> + <input>. Labels are 'Email', 'Password', 'Confirm password'.

Intrinsic sizing: min-content, max-content, auto

75 XP6 min
Theory

Sizes based on content, not pixels

CSS Grid offers three "intrinsic" track sizes:

grid-template-columns: min-content 1fr max-content;
  • `min-content` β€” the smallest size where the content doesn't overflow. For text: the width of the LONGEST WORD.
  • `max-content` β€” the size where the content uses no line breaks. For text: the width of the FULL UN-WRAPPED line.
  • `auto` β€” the browser picks something reasonable based on content + available space.

When each is useful

/* Label column sized to its widest label, value column gets the rest */
.form-grid { grid-template-columns: max-content 1fr; }

/* "As narrow as possible" sidebar */
.nav { grid-template-columns: min-content 1fr; }

For form-style layouts, max-content 1fr is the perfect "label + input" recipe.

fit-content() β€” clamp intrinsic sizing

grid-template-columns: fit-content(200px) 1fr;

The first column is sized to its content, but capped at 200px. Above 200px it wraps. Useful for "as wide as content, but not absurd."

πŸ”’

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.