The Color Models You Actually Need
Web designers work with three models: RGB for screens (additive, 0–255), HSL for human-readable CSS (Hue 0–360°, Saturation 0–100%, Lightness 0–100%), and HEX as a compact RGB encoding. HSL is the most useful for design decisions — it maps directly to how designers think about color.
HSL: The Designer's Color Model
HSL (Hue, Saturation, Lightness) makes palette building intuitive. Same hue + different lightness = tints and shades. Same hue + different saturation = muted vs vibrant.
/* HSL makes palette relationships visible in code */
:root {
/* Primary brand color with tints/shades */
--blue-50: hsl(220, 100%, 97%); /* near white */
--blue-100: hsl(220, 96%, 93%);
--blue-200: hsl(220, 94%, 87%);
--blue-300: hsl(220, 87%, 76%);
--blue-400: hsl(220, 80%, 64%);
--blue-500: hsl(220, 75%, 55%); /* base */
--blue-600: hsl(220, 72%, 46%);
--blue-700: hsl(220, 68%, 38%);
--blue-800: hsl(220, 64%, 28%);
--blue-900: hsl(220, 60%, 18%); /* near black */
}
/* Pattern: same hue, same saturation, vary lightness by ~9% steps */
/* Muted variant: reduce saturation */
--blue-muted: hsl(220, 30%, 55%);
/* Warm tint: shift hue slightly */
--blue-warm: hsl(215, 75%, 55%);
Color Harmonies
| Harmony | Definition | When to Use | Example Hues |
|---|---|---|---|
| Monochromatic | One hue, many tints/shades | Clean, cohesive brand palettes | All blues |
| Analogous | 3–4 adjacent hues (±30°) | Natural, calm, flowing | Blue, teal, green |
| Complementary | Opposite hues (180°) | High contrast, energetic | Blue + orange |
| Split-complementary | Hue + two colors ±150° | Vibrant but less jarring than complementary | Blue + red-orange + yellow-orange |
| Triadic | Three evenly spaced hues (120°) | Bold, playful | Red + yellow + blue |
| Tetradic | Four hues (90° apart) | Rich, complex — hard to balance | Red + yellow + green + blue |
Building a CSS Color System
/* 1. Define semantic tokens from base palette */
:root {
/* Brand palette */
--color-brand: hsl(252, 100%, 70%);
--color-brand-light: hsl(252, 100%, 85%);
--color-brand-dark: hsl(252, 80%, 55%);
/* Neutrals (warm gray — slight warm tint to complement purple brand) */
--color-surface-0: hsl(240, 10%, 4%); /* darkest */
--color-surface-1: hsl(240, 8%, 8%);
--color-surface-2: hsl(240, 6%, 12%);
--color-surface-3: hsl(240, 4%, 18%);
/* Text */
--color-text-primary: hsl(0, 0%, 98%);
--color-text-secondary: hsl(240, 5%, 65%);
--color-text-muted: hsl(240, 5%, 45%);
/* Semantic status colors */
--color-success: hsl(142, 70%, 50%);
--color-warning: hsl(38, 92%, 55%);
--color-error: hsl(0, 72%, 55%);
--color-info: hsl(200, 80%, 55%);
}
Color Psychology in Web Design
Blue: Trust, stability, professionalism. Dominant in finance (PayPal, Visa), tech (IBM, Twitter/X), and healthcare. Works in almost any context.
Green: Growth, health, success, environment. Used for CTAs (high conversion), sustainability brands, finance ("in the green"), and health tech.
Red: Urgency, passion, danger, energy. Used for sales/discounts, alerts, food brands (triggers appetite), and CTAs requiring immediate action.
Purple: Creativity, luxury, wisdom. Common in fintech, creative tools, premium products, and design-forward brands.
Orange: Friendly, warm, affordable, accessible. Lower barrier to entry than red; often used for CTAs that should feel approachable.
Important caveat: Color associations are highly cultural. Red means luck in China but danger in Western contexts. Always research your target audience's cultural context.
Common Color Mistakes in Web Design
- Using pure black (#000000) for text — pure black on white is too harsh. Use dark grays (hsl(0,0%,10%)) or dark cool tones for softer, more professional text.
- Using pure white (#ffffff) for backgrounds — pure white causes eye strain in long-form reading. Off-white (hsl(0,0%,98%) or warm whites) are more comfortable.
- Ignoring contrast ratios — light gray text on white looks elegant but fails WCAG. Every color choice needs a contrast check.
- Too many saturated colors — high saturation should be reserved for key UI elements (primary CTA, active states). Too many vibrant colors create visual noise.
- Not testing dark mode separately — a color system designed for light mode rarely works for dark mode without significant adjustment. Design both simultaneously.
Frequently Asked Questions
- What's the 60-30-10 color rule?
- A design composition rule: 60% dominant/neutral color (backgrounds), 30% secondary color (cards, sections), 10% accent color (buttons, links, highlights). It creates visual hierarchy without overwhelming the viewer.
- How do I choose an accent color?
- A complementary color (opposite your primary on the color wheel) creates the most contrast. For a blue primary, orange or amber makes an effective accent. Make sure the accent passes 3:1 contrast ratio against its background when used for interactive elements.
- What is the difference between tint, tone, and shade?
- Tint = hue + white (lighter). Shade = hue + black (darker). Tone = hue + gray (more muted). In CSS HSL: tint = increase lightness, shade = decrease lightness, tone = decrease saturation.
- How do I build a dark mode palette from a light palette?
- Flip the lightness scale: your lightest neutral becomes darkest surface, and vice versa. Reduce saturation of text colors slightly. Desaturate colored backgrounds by 10–20% (vibrant colors look garish on dark backgrounds). Keep the brand accent similar but slightly lighter to maintain contrast.