Skip to main content
← 🎨 CSS as a design systemΒ·Module B2 Β· Lesson 9
TaskBuild a sidebar+main layout. .layout is display: flex. .sidebar has flex: 0 0 240px (fixed 240px). .main has flex: 1 (fills the rest). Both have padding 16px and a background (sidebar #f5f5f5, main white).

flex-grow, flex-shrink, flex-basis (on children)

100 XP8 min
Theory

Tell flex children how to consume space

Three properties on children:

.item {
  flex-grow: 1;       /* how much of EXTRA space this gets (proportionally) */
  flex-shrink: 1;     /* how much it SHRINKS when over-budget (proportionally) */
  flex-basis: auto;   /* starting size before grow/shrink kicks in */
}

The shorthand: flex

.item { flex: 1; }              /* = flex: 1 1 0       β€” equal share of space */
.item { flex: 1 1 auto; }       /* equal share, but start from content size */
.item { flex: 0 0 200px; }      /* exactly 200px, never grow, never shrink */
.item { flex: none; }           /* shorthand for 0 0 auto */

Common patterns

.sidebar { flex: 0 0 240px; }   /* fixed-width sidebar */
.main { flex: 1; }              /* fill remaining space */

Sidebar stays exactly 240px wide. Main takes whatever's left.

Proportional grow

.col-a { flex-grow: 1; }
.col-b { flex-grow: 2; }
.col-c { flex-grow: 1; }

Extra space splits 1:2:1 β€” col-b gets twice as much as the others.

The 5-minute rule

If you're stuck wrapping your head around grow/shrink/basis, here's the rule of thumb:

  • flex: 1 on every flex child β†’ they share space EQUALLY.
  • flex: 0 0 Npx β†’ fixed-width that doesn't flex.
  • Combine: one fixed sidebar + flex: 1 main.
πŸ”’

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.