Skip to main content
← 🎨 CSS as a design systemΒ·Module B4 Β· Lesson 3
TaskSet h1 to clamp(1.75rem, 4vw + 1rem, 3.5rem). Set body padding to clamp(1rem, 4vw, 3rem).

clamp(): fluid type without breakpoints

100 XP7 min
Theory

A 2020 CSS function that killed media-query font-size

h1 { font-size: clamp(2rem, 4vw, 4rem); }

Read as: "min 2rem, max 4rem, preferred 4vw."

  • Mobile (small viewport) β€” 4vw might be 1.6rem β†’ clamps UP to 2rem.
  • Desktop (large viewport) β€” 4vw might be 5rem β†’ clamps DOWN to 4rem.
  • In between β€” 4vw scales linearly with viewport width.

One declaration replaces:

h1 { font-size: 2rem; }
@media (min-width: 768px) { h1 { font-size: 3rem; } }
@media (min-width: 1280px) { h1 { font-size: 4rem; } }

How to pick the values

For a heading that should be 2-4rem:

clamp(2rem, 5vw + 1rem, 4rem)

The middle is a calc-like expression that crosses 2rem around 320px and 4rem around 1280px. Practical recipe:

min = your mobile size
max = your desktop size
preferred = (mobile + (desktop - mobile) * vw scale)

There are online calculators ("Fluid Type Scale Calculator") that compute these for you.

clamp() works for any length

Not just font-size:

.hero { padding: clamp(2rem, 8vw, 6rem); }
.container { width: clamp(320px, 90%, 1200px); }

Container that's at least 320px, at most 1200px, otherwise 90% of viewport. Replaces dozens of media queries.

πŸ”’

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.