HomeBlogHow to Build a 5-Step Color Scale
🎨 Design Systems

How to Build a 5-Step Color Scale for Your Design System

By Color Picker Web · Updated July 2026 · 12 min read

Ever inherited a codebase with lightblue, lightblue2, lightblueNew, and lightblue-actually-final all slightly different, all supposedly the same brand blue? That's what happens without a color scale. One base color, picked once, becomes five inconsistent near-misses within a month.

A color scale fixes this permanently: one brand color generates a predictable family of tints and shades, so every hover state, background tint, and text color comes from the same system instead of being invented on the spot. This guide walks through building a practical 5-step scale — light enough for most projects, structured enough to scale later — with a live generator to try it on your own brand color right now.

🧪 Try It: Live 5-Step Color Scale Generator

Pick a base color and instantly generate a 5-step scale — two lighter tints, your base color, and two darker shades — each with its HEX code and a contrast-safety indicator for black and white text. Click any swatch to copy its value.
🧪 Interactive Tool

This becomes step 500 — the middle of your scale.

Treat the generated values as a strong starting point — Refactoring UI's advice holds true here: trust your eyes over the math for final polish, especially on the lightest and darkest steps.

Read Next: Color Psychology in UI: How Choices Drive Behavior
Read Next: Understanding WCAG 2.2 Color Contrast Guidelines

✦ Why Color Scales Beat One-Off Colors

A defined color scale ensures there's always a correct, pre-approved option for every need — instead of five slightly different grays scattered across a codebase, you have one consistent scale used everywhere. This also future-proofs the system for dark mode and interactive states without reworking the palette later.

Once a scale exists, hover states stop being a design decision and become a simple increment: base color too flat on hover? Just step one darker. Need a subtle background tint for an alert? Step way lighter. No new colors, no inconsistency, no Slack thread about "which blue."

📝 How to Build a 5-Step Scale: Step-by-Step

To build a 5-step color scale: pick a base color for the middle step, generate two progressively lighter tints by increasing HSL lightness and reducing saturation, generate two progressively darker shades by decreasing lightness, check contrast at each step, then name and store the scale as reusable design tokens.
1

Pick Your Base Color

Choose the color that sits in the middle of the scale — a good rule of thumb is picking a shade that would work well as a default button background. There's no strict formula here; trust your eye.

2

Generate Two Lighter Tints

Increase lightness in HSL while keeping hue constant, and reduce saturation somewhat to avoid a washed-out pastel look. These become your lightest two steps.

3

Generate Two Darker Shades

Decrease lightness for the two darkest steps, adjusting saturation only slightly. Shades typically need less saturation correction than tints.

4

Check Contrast at Each Step

Test each of the 5 colors against both black and white text. This tells you which steps are safe for text and which belong in backgrounds and borders only.

5

Name and Document the Scale

Apply a consistent naming convention — numeric (100–900) is the most scalable — and store the values as CSS custom properties or design tokens so the whole team pulls from the same source.

🎨 Tints, Shades & Tones — What's the Difference?

A tint is created by increasing lightness (adding white) while keeping hue constant. A shade is created by decreasing lightness (adding black). A tone is created by reducing saturation at a roughly fixed lightness (adding gray). All three preserve the original hue, which is what makes a scale feel like one coherent color family rather than unrelated colors.
OperationHSL ChangeEffect
TintIncrease lightness, often reduce saturationLighter, softer version — moves toward white
ShadeDecrease lightnessDarker, richer version — moves toward black
ToneReduce saturation, lightness roughly fixedMuted, grayed-down version — same brightness

A 5-step scale typically only needs tints and shades — tones become more relevant once you're building a larger, more nuanced palette beyond the basics.

⚓ Anchoring Your Base Color (Don't Force It to 500)

Don't force your brand color into the exact middle step just because that's the convention. Identify your base color's natural lightness position and anchor the scale there — even if that places it at step 400 or 600 instead of 500. The step number is a label, not a constraint.

This is one of the most common mistakes teams make: bending a color's actual lightness to fit a round number, which distorts every tint and shade generated from it. Let the math follow the color, not the other way around.

⚠️ The Saturation Trap (Why Pure Lightness Shifts Look Wrong)

Adjusting only lightness in HSL and leaving saturation untouched often makes the lightest tints look washed-out and pastel rather than like a true lighter version of the brand color. A common fix is reducing saturation by roughly 30-70% in the lightest steps and only 15-25% in the darkest shades, though the exact amount depends on the base hue's starting saturation.

Vivid hues like electric blue or bright orange need the most saturation correction in their tints. Muted, earthy hues like sage or terracotta already start low on saturation and need minimal adjustment to stay in character across the whole scale.

🎨 Generate Full Palettes Free

Explore tints, shades, and harmonious combinations from any HEX code — free, no signup, right in your browser.

Open the Free Color Picker →

🔢 Naming Your Color Scale

A numeric naming convention like 100-300-500-700-900 (extendable to 50-900 for larger scales) is the most widely used and scalable approach, popularized by Google Material and used by frameworks like Tailwind CSS. It's more future-proof than descriptive names like "light blue" or "dark blue," which break down the moment you need a value in between.

The numbering convention is borrowed from CSS font-weight, where 400 means "normal" and 700 means "bold" — a familiar mental model many developers already carry over. The real advantage shows up months later: adding a new in-between step (like 150) never requires renaming anything else in the scale.

♿ Contrast Across the Scale

In a typical 5-step scale, the lightest step usually passes WCAG AA contrast (4.5:1) with black text, and the darkest step usually passes with white text. The base and near-base steps often fall into a midrange where neither black nor white text reaches 4.5:1 — reserve those steps for backgrounds, borders, and non-text UI elements instead.

This is exactly why the generator above flags contrast per step — guessing which step is "dark enough" for readable text wastes real design time. Always verify the final pair with a dedicated checker; see our WCAG 2.2 contrast guide for the exact thresholds.

💾 Storing a Color Scale in Code

CSS custom properties are the most universal way to store a color scale, such as --color-primary-500: #2563EB. Design tokens in JSON format work as a format-agnostic source of truth that can be transformed into CSS, Sass variables, or platform-specific formats for larger, cross-platform design systems.
:root {
  --color-primary-100: #DBEAFE;
  --color-primary-300: #93C5FD;
  --color-primary-500: #2563EB; /* base */
  --color-primary-700: #1D4ED8;
  --color-primary-900: #1E3A8A;
}
.button-primary {
  background: var(--color-primary-500);
}
.button-primary:hover {
  background: var(--color-primary-700);
}

📏 Beyond 5 Steps: When to Expand

A 5-step scale covers most interface needs efficiently, but larger design systems benefit from 9-11 steps (like Tailwind's 50-950 range) for more granular control over hover states, disabled states, borders, and dark mode surfaces. Start with 5 steps and expand only when you hit a real, recurring gap — not preemptively.

Fewer than 5 steps tends to feel limiting once dark mode or complex interactive states enter the picture. More than 10-15 steps per hue starts to reduce meaningful contrast between adjacent values and adds decision fatigue without real benefit. Five is a genuinely solid default — expand deliberately, not by default.

🚫 Common Color Scale Mistakes

  1. Forcing the base color to step 500. Anchor the scale to the color's real lightness instead.
  2. Only adjusting lightness, ignoring saturation. This produces washed-out, pastel-looking tints.
  3. Using descriptive names instead of numeric ones. "Light blue" and "lighter blue" don't scale — numbers do.
  4. Assuming every step works for text. Always verify contrast per step rather than assuming.
  5. Skipping documentation. An undocumented scale gets reinvented by the next designer who joins the project.
  6. Building scales for every accent color at once. Start with your core brand and neutral scales; expand to accents as real needs appear.

🏁 Conclusion

A 5-step color scale turns one brand color into a small, predictable system: two tints, the base, and two shades — enough to handle backgrounds, text, borders, and hover states without inventing a new color every time a new component ships. Anchor the base color honestly, adjust saturation alongside lightness, verify contrast at every step, and store the result as named, documented tokens.

Use the generator above on your actual brand color, check which steps pass contrast for text, and drop the values straight into CSS custom properties. That's a complete, production-ready color scale — and the foundation the rest of your design system can build on.

❓ Frequently Asked Questions

What is a color scale in a design system?

A color scale is a set of tints and shades generated from a single base color, used consistently for backgrounds, borders, text, and interactive states instead of creating one-off colors for each use case.

How many steps should a color scale have?

A 5-step scale (two tints, the base color, and two shades) covers most interface needs efficiently. Larger design systems like Tailwind or Material use 9-11 steps for more granular control over backgrounds, borders, and text.

What naming convention should I use for a color scale?

A numeric scale like 100-300-500-700-900 is the most common and scalable convention, popularized by Google Material and used by Tailwind CSS. It allows new steps to be inserted later without renaming existing values.

Should my base brand color always be step 500?

No. Identify your base color's natural lightness position and anchor the scale there, even if that places it at 400 or 600 instead of 500. The step number is a label, not a strict rule.

How do I create a tint versus a shade?

A tint is created by increasing lightness (and typically reducing saturation) in HSL while keeping the hue constant. A shade is created by decreasing lightness. Both preserve the original hue so the scale reads as one coherent color family.

Which steps in a color scale are safe for text?

In a typical scale, the lightest steps usually pass WCAG AA contrast with black text, and the darkest steps usually pass with white text. Middle steps often fall short of 4.5:1 for either and should be reserved for backgrounds or borders, not text.

Should I adjust saturation across a color scale, or only lightness?

Adjusting only lightness in HSL often makes light tints look washed out. Reducing saturation by roughly 30-70% in the lightest steps and slightly in the darkest steps typically produces a more natural, cohesive-looking scale.

How do I store a color scale in code?

CSS custom properties are the most universal option, such as --color-primary-500. Design tokens in JSON format are also common as a source of truth that can be transformed into CSS, Sass, or platform-specific formats.

Do I need a separate color scale for dark mode?

Not necessarily a separate scale — many systems reuse the same steps but flip which end of the scale is used for backgrounds versus text, since a full tint-to-shade range already covers both light and dark surfaces.

How many color scales does a design system need?

Most systems need a scale for each core brand color plus at least one neutral (gray) scale and scales for semantic colors like success, warning, and error — typically 4 to 8 total scales for a well-rounded system.

← Previous Article WCAG 2.2 Color Contrast: AA vs AAA Explained with Real Examples Next Article → How to Extract Colors from Any Image Using Color Picker Web