Developer Tools

Color Theory for Developers: HEX, RGB, HSL, and Why Your App Fails Accessibility Tests

11 min readBy KBC Grandcentral Research Team

Color seems like a design concern, but developers need to understand it deeply. WCAG contrast requirements are law for government sites and liability for commercial ones. HSL lets you build consistent theme systems that HEX makes nearly impossible. And choosing the wrong primary color can reduce conversion rates by measurable percentages.

Same Color, Different Formats#3b82f6rgb(59, 130, 246)hsl(217, 91%, 60%)oklch(60% 0.18 250°)Color Is Code — Know Your Models

Key Takeaways

  • HEX is storage — #3b82f6 is just shorthand for RGB values; not human-readable for design work
  • HSL is for design systems — hue, saturation, lightness maps to how humans think about color
  • WCAG AA requires 4.5:1 contrast for normal text; AAA requires 7:1 — many popular designs fail
  • oklch is the future — perceptually uniform, enables P3 wide-gamut colors on modern displays
  • 8% of men have color vision deficiency — never rely on color alone to convey information

Color Models: HEX, RGB, HSL, and When to Use Each

All four common web color formats represent the same underlying data — the intensity of red, green, and blue light. They differ in how they express that data and what's intuitive for different use cases.

#HEX

Best for: Copy-paste between tools, storing in databases, CSS values. Each pair of digits represents R, G, and B in base 16 (00–FF). #3b82f6 = R:59, G:130, B:246. The 3-character shorthand (#3BF) halves each channel: #3B becomes #3B3B.

RGB

Best for: When you need to manipulate individual channels mathematically or work with opacity (rgba()). RGB is the native format of digital displays. Not intuitive for humans — incrementing R by 10 doesn't predictably shift the perceived color.

HSL

Best for: Design systems, theme generation, and dark mode. Hue (0–360°), Saturation (0–100%), Lightness (0–100%). To lighten a button on hover: increase L by 10%. To create a muted variant: decrease S. This is how designers actually think.

oklch

Best for: Modern browsers (supported since 2023), wide-gamut displays, and perceptually uniform gradients. Unlike HSL, oklch adjusts perceptual brightness consistently across hues — a complaint with HSL is that yellow looks lighter than blue at the same L value. Supported in CSS natively: color: oklch(60% 0.18 250deg).

WCAG Contrast Ratios: Accessibility That's Also Law

Web Content Accessibility Guidelines (WCAG) define contrast ratio requirements for text legibility. Contrast ratio is calculated from the relative luminance of the foreground and background colors, using the formula: (L1 + 0.05) / (L2 + 0.05) where L1 is the lighter luminance.

WCAG AA (Minimum)

4.5:1

Normal text (under 18pt)

3:1 for large text (18pt+)

Required for most commercial sites

WCAG AAA (Enhanced)

7:1

Normal text (under 18pt)

4.5:1 for large text (18pt+)

Recommended for critical content

Pure Black on White

21:1

Maximum possible contrast

Often too harsh; soften slightly

#111 on white ≈ 19:1

Many popular design choices fail WCAG AA. Light gray text on white (#999 on #fff) has a ratio of 2.85:1 — well below the 4.5 threshold. The popular "placeholder text" style in input fields is notoriously non-compliant. The US Department of Justice has issued rulings that inaccessible websites violate the Americans with Disabilities Act.

Building a Color System with HSL

Tailwind CSS, shadcn/ui, and most modern design systems use HSL (or CSS custom properties with HSL values) as their foundation. Here's why: if your brand blue is hsl(217, 91%, 60%), you can generate a full shade scale by incrementally changing lightness: 10% for darkest, 95% for lightest background. Dark mode becomes: invert the lightness scale.

CSS Custom Properties with HSL:

:root {

--blue-h: 217;

--blue-s: 91%;

--blue-50: hsl(var(--blue-h), var(--blue-s), 95%);

--blue-500: hsl(var(--blue-h), var(--blue-s), 60%);

--blue-900: hsl(var(--blue-h), var(--blue-s), 15%);

}

Change --blue-h to 340 and your entire palette shifts to pink. No find-and-replace.

Pick and Convert Colors

Color Picker & Converter

Convert between HEX, RGB, HSL, and CMYK. Check WCAG contrast ratios, generate color palettes, and preview colors in real time.

Open Color Picker →