What is OKLCH?
OKLCH is a way to describe colors that matches how humans actually perceive them. Unlike traditional color systems, when you change one value, you get predictable visual results.Copy
+-----------------------------------------------------------------------------+
| HOW OKLCH WORKS |
+-----------------------------------------------------------------------------+
| |
| Think of color as a 3D space: |
| |
| LIGHTNESS (L) |
| ^ |
| | 100% White |
| | . |
| | /|\ |
| | / | \ |
| | / | \ |
| | / | \ |
| | / -- + -- \ <-- HUE (H) goes around |
| | / | \ the circle (0-360) |
| | | |
| | . |
| | 0% Black |
| | |
| CHROMA (C) = Distance from center |
| (0 = gray, 0.4 = vivid) |
| |
+-----------------------------------------------------------------------------+
The Three Components
Copy
+-----------------------------------------------------------------------------+
| |
| L = LIGHTNESS |
| +------------------------------------------------------------------+ |
| | 0% 50% 100% | |
| | [========================================================] | |
| | Black -----------------> Gray -----------------> White | |
| | | |
| | Key insight: L = 50% looks equally "medium" for ALL colors | |
| +------------------------------------------------------------------+ |
| |
| C = CHROMA (Color Intensity) |
| +------------------------------------------------------------------+ |
| | 0 0.15 0.4 | |
| | [========================================================] | |
| | Gray -----------------> Subtle -----------------> Vivid | |
| | | |
| | Monolex uses 0.12-0.15 for professional, readable colors | |
| +------------------------------------------------------------------+ |
| |
| H = HUE (Color Wheel Position) |
| +------------------------------------------------------------------+ |
| | | |
| | 0 (Red) | |
| | | | |
| | 300 -------.------- 60 | |
| | (Magenta) | (Yellow) | |
| | | | |
| | 240 -------.------- 120 | |
| | (Blue) | (Green) | |
| | | | |
| | 180 (Cyan) | |
| | | |
| +------------------------------------------------------------------+ |
| |
+-----------------------------------------------------------------------------+
Why OKLCH Matters
Traditional color systems like HSL have a problem: the same “lightness” value produces different perceived brightness for different colors.Copy
+-----------------------------------------------------------------------------+
| THE HSL PROBLEM |
+-----------------------------------------------------------------------------+
| |
| Using HSL with L=50% for both colors: |
| |
| Yellow (H=60): [XXXXXXXXXXXXXXXXXXXXXXXX] <-- Appears BRIGHT |
| Blue (H=240): [........................] <-- Appears DARK |
| |
| Same L=50%, but completely different perceived brightness! |
| |
+-----------------------------------------------------------------------------+
| THE OKLCH SOLUTION |
+-----------------------------------------------------------------------------+
| |
| Using OKLCH with L=55% for both colors: |
| |
| Yellow (H=85): [XXXXXXXXXXXXXXXXXXXX] <-- Equal perceived brightness |
| Blue (H=230): [XXXXXXXXXXXXXXXXXXXX] <-- Equal perceived brightness |
| |
| L=55% means the SAME perceived brightness for ALL hues. |
| |
+-----------------------------------------------------------------------------+
Color Conversion Flow
Copy
+-----------------------------------------------------------------------------+
| FROM SCREEN TO PERCEPTION |
+-----------------------------------------------------------------------------+
| |
| RGB Oklab OKLCH |
| (Screen Pixels) (Perceptual Space) (Human-Friendly) |
| |
| +----------+ +----------+ +----------+ |
| | R: 35 | | L: 0.55 | | L: 55% | |
| | G: 128 | ---> | a: -0.02| ---> | C: 0.15 | |
| | B: 199 | | b: -0.10| | H: 230 | |
| +----------+ +----------+ +----------+ |
| |
| What hardware Math space What designers |
| understands (accurate) work with |
| |
+-----------------------------------------------------------------------------+
Safe Ranges for UI
Copy
+-----------------------------------------------------------------------------+
| PRACTICAL OKLCH VALUES |
+-----------------------------------------------------------------------------+
| |
| LIGHTNESS (L): |
| +------------------------------------------------------------------+ |
| | | |
| | Dark Theme Text: L = 70% (readable on dark backgrounds) | |
| | Light Theme Text: L = 40% (readable on light backgrounds) | |
| | Semantic Colors: L = 55% (balanced for both themes) | |
| | | |
| +------------------------------------------------------------------+ |
| |
| CHROMA (C): |
| +------------------------------------------------------------------+ |
| | | |
| | UI Elements: C = 0.12 (subtle, professional) | |
| | Semantic Colors: C = 0.15 (noticeable but not loud) | |
| | Maximum Safe: C = 0.18 (danger/error only) | |
| | | |
| | Above 0.18 risks "clipping" - colors may not display correctly | |
| +------------------------------------------------------------------+ |
| |
+-----------------------------------------------------------------------------+
Key Takeaways
Copy
+-----------------------------------------------------------------------------+
| |
| 1. OKLCH uses three values: Lightness, Chroma, Hue |
| |
| 2. Unlike HSL, equal L values = equal perceived brightness |
| |
| 3. Chroma controls vividness (0 = gray, higher = more colorful) |
| |
| 4. Hue is position on color wheel (0-360 degrees) |
| |
| 5. Monolex uses L=55%, C=0.12-0.15 for consistent UI colors |
| |
+-----------------------------------------------------------------------------+
Golden Angle Distribution
Learn how colors are distributed for maximum distinction