Skip to main content
← 🎨 CSS as a design systemΒ·Module B5 Β· Lesson 2
TaskBuild an OKLCH blue ramp on :root: --blue-100 oklch(0.90 0.06 252), --blue-400 oklch(0.66 0.18 252), --blue-700 oklch(0.40 0.15 252), --blue-900 oklch(0.25 0.10 252). Apply --blue-100 to body background, --blue-700 to h1, --blue-900 to p.

Building a color palette with OKLCH

100 XP8 min
Theory

A palette as math

:root {
  /* Blue ramp β€” same hue (252), same chroma (0.18), varying lightness */
  --blue-50:  oklch(0.95 0.04 252);
  --blue-100: oklch(0.90 0.06 252);
  --blue-200: oklch(0.82 0.10 252);
  --blue-400: oklch(0.66 0.18 252);
  --blue-500: oklch(0.55 0.18 252);
  --blue-700: oklch(0.40 0.15 252);
  --blue-900: oklch(0.25 0.10 252);
}

Pick a hue (252 = blue). Pick a chroma curve (high in the middle, lower at the extremes β€” pure light/dark colors should desaturate). Walk lightness 0.10-0.95 in steps.

The result: 7 blues that look like a real palette, not 7 random colors.

Why OKLCH wins for palettes

In HSL with constant saturation = 80%, the "yellow at L=50%" is dramatically brighter than "blue at L=50%." Your palette looks lumpy.

In OKLCH with constant lightness = 0.55, "yellow" and "blue" have the same perceived brightness. Your palette feels consistent.

Tailwind 4 uses OKLCH

Tailwind's 2024 colors are all defined in OKLCH internally. Their palette consistency comes from this exact technique.

Pick once, reuse forever

Define every color as a custom property at :root. NEVER write a raw color in a component:

/* DON'T */
.button { background: #3B82F6; }

/* DO */
.button { background: var(--blue-400); }

Now a redesign = swap the palette at :root. Every component updates.

πŸ”’

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.