Skip to main content
Frontend is a free bonus on CodeMentor AI β€” the main product is Python. Register to save your progress and unlock all 290 Frontend lessons + 1,000+ Python lessons.Sign up β€” free
← 🎨 CSS as a design systemΒ·Module B1 Β· Lesson 6
TaskTwo cards: .card-broken with width 300px, padding 20px, border 1px solid #ccc (uses default content-box, ends up 342px wide). .card-fixed has the same width/padding/border BUT add box-sizing: border-box so it stays 300px wide.

box-sizing: border-box (and why every project enables it)

100 XP8 minFREE
Theory

The default that everyone hates

.card {
  width: 300px;
  padding: 20px;
  border: 1px solid #ccc;
}

How wide is the rendered card? With the default box-sizing: content-box β€” width applies to the content area only:

  • Content: 300px
  • + padding: 20 left + 20 right = 40px
  • + border: 1 left + 1 right = 2px
  • Total: 342px

You said width: 300px but the box rendered at 342px. Every padding/border change breaks your layout math.

The fix

*, *::before, *::after {
  box-sizing: border-box;
}

Now width: 300px means the total box width is 300px, including padding and border. Content shrinks to fit.

content-box (default):    [content: 300] [padding: 40] [border: 2]  β†’ 342px total
border-box:               [        content: 258 + padding: 40 + border: 2        ] = 300px

Why every project enables it

width: 100% finally means "the same as the parent" β€” even when your child has padding. Grid + flexbox calculations don't break when you add padding. You can ship.

Modern projects ship this universal selector first thing. Tailwind ships it. Bootstrap ships it. Every reset stylesheet from the past 10 years includes it.

The mental model

  • content-box = width is the INNER size; box grows outward.
  • border-box = width is the OUTER size; content shrinks inward.

For UI work, you almost always want the outer size to be predictable. So you almost always want border-box.

2 tabs
Live preview
← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.