Color Picker & Palette Generator
Pick colors from HEX, RGB, HSL. Generate color palettes and harmonies. Create gradients. Free online color picker and palette maker for designers
A color picker that gives you `#RRGGBB` is a 1990s tool. The 2026 work happens in OKLCH — a perceptually uniform color space where changing the L value by 10% actually looks 10% lighter, where rotating the hue by 60° produces a usable color (not the muddy mess HSL gives you), and where palette generation can be mathematically clean. This studio offers HEX/RGB/HSL/LCH/OKLCH/P3 with live conversions, generates harmonious palettes (complementary, triadic, analogous), and shows the WCAG contrast for each color against common backgrounds.
Why OKLCH replaced HSL for color work
- HSL Lightness is wrong. HSL says `hsl(60deg, 100%, 50%)` (yellow) and `hsl(240deg, 100%, 50%)` (blue) are both "L=50". They look nothing alike — yellow is bright, blue is dark. HSL's lightness is the average of RGB, not actual perceived brightness.
- OKLCH lightness is right. `oklch(60% 0.2 60)` (yellow) and `oklch(60% 0.2 240)` (blue) look equally light. Generating a 5-step "light to dark" scale in OKLCH produces evenly spaced perceptual steps; in HSL you get bunching and gaps.
- OKLCH hue is rotation-invariant. Rotating hue by 90° in OKLCH gives a usable, similarly-saturated color. In HSL, rotating from blue 240° to teal 180° gives a color with very different perceived saturation despite identical "S" value.
- OKLCH chroma is real saturation. The C value is how far from gray. In HSL, a "saturation=100%" yellow looks more "saturated" than a "saturation=100%" blue because of the perceptual mismatch.
Working example: a 5-step gray scale
Input
Generate a perceptually-uniform 5-step gray scale from light to dark
Output
In OKLCH (correct): gray-100: oklch(95% 0 0) /* almost white */ gray-300: oklch(80% 0 0) gray-500: oklch(60% 0 0) /* mid-tone */ gray-700: oklch(40% 0 0) gray-900: oklch(20% 0 0) /* almost black */ Each step is 15% darker than the previous, perceptually. In HSL (broken): gray-100: hsl(0, 0%, 95%) gray-300: hsl(0, 0%, 80%) gray-500: hsl(0, 0%, 60%) gray-700: hsl(0, 0%, 40%) gray-900: hsl(0, 0%, 20%) HSL L percentages are identical to the OKLCH percentages here BUT this only works because gray has no hue. For colored scales (a blue ramp, a green ramp), HSL lightness diverges from perception and you get inconsistent contrast across hues.
For grayscales specifically, HSL and OKLCH happen to agree. For ANY colored scale, OKLCH produces perceptually-uniform steps while HSL produces visually-uneven ones. The "all my dark variants look fine but my dark blue is too dark" problem is HSL's fault.
Color harmonies and what they encode
- Complementary — base + hue rotated 180°. Maximum contrast. Used for accents, call-to-action buttons against neutral backgrounds.
- Analogous — base + two neighboring hues (±30°). Low contrast, harmonious. Used for gradients, calm backgrounds.
- Triadic — three hues equally spaced (120° apart). Vibrant, balanced. Used for illustrative palettes.
- Split-complementary — base + two hues flanking the complement (180° ± 30°). Softer than full complementary; vibrant but less harsh.
- Tetradic / square — four hues equally spaced (90°). Maximum variety; hard to balance — usually one hue dominates and the others are accents.
- Monochromatic — one hue, different lightness/chroma. Safe choice; can be visually flat without careful contrast steps.
Display-P3 and wide-gamut color
sRGB (1996) is the historical standard color space — all modern monitors support it. Display P3 (Apple, 2015) covers ~25% more of the visible color gamut, supported by most iPhones, MacBooks, and modern non-budget displays. CSS `color(display-p3 r g b)` lets you specify a P3 color that gracefully clamps to sRGB on older displays.
When to use P3: for vivid reds and greens that look "muted" in sRGB. For brand colors that look fine in sRGB: stay with sRGB. The differences are subtle and easy to over-engineer.
When to reach for this tool
- You are building a design system and need a perceptually-uniform color scale (50, 100, 200, ... 900) for each brand and neutral color.
- You inherited a palette in HEX and want to see OKLCH equivalents to spot the perceptual problems in the scale.
- You are picking accent colors for a new feature and want to compare options against your existing brand palette for harmony.
- You are checking that a color combination meets WCAG AA contrast for text — see the contrast value alongside the colors.
What this tool will not do
- It will not pick "the right brand colors" for you. Color choice is a brand and aesthetic decision. The tool helps you execute and verify; it does not decide the direction.
- It will not simulate every display calibration. Two monitors show the same OKLCH(60% 0.2 240) slightly differently. For color-critical work (print, photography), calibrate your monitor and proof on the target medium.
- It will not match Pantone or other print color systems exactly. RGB-to-CMYK conversion is involved and printer-specific; print designers use dedicated tools (Adobe, Pantone Connect).
Frequently asked questions
Should I use HEX, RGB, HSL, or OKLCH in my CSS?
OKLCH for color generation and dark-mode pairs. HEX or RGB for fixed brand colors that designers hand you. HSL is acceptable but has the perceptual problems noted above. CSS supports all four; mix freely in the same stylesheet. New CSS color modules (CSS Color 4 and beyond) make OKLCH first-class.
What is the difference between LCH and OKLCH?
Both are perceptually-uniform color spaces with L (lightness), C (chroma), H (hue). LCH is based on CIE LAB (1976); OKLCH (Björn Ottosson, 2020) is based on the newer OKLab which fixes hue-shift artifacts in LAB. For practical CSS use, OKLCH is preferred; LCH is acceptable.
Why does my OKLCH color render as a different color in Chrome vs Safari?
CSS Color 4 OKLCH support shipped in Chrome 111 (March 2023) and Safari 16.4 (March 2023). Both should produce identical results when the device gamut allows. If they differ, you may be hitting display-gamut clamping — a vivid OKLCH that exceeds sRGB shows differently on a P3 display vs an sRGB display.
How do I generate a dark-mode variant of my color palette?
In OKLCH: invert the lightness (95% ��� 5%, 80% → 20%, etc.) and keep chroma/hue. The resulting palette looks "the same color, in dark form" — much better than HSL where invert-L gives inconsistent saturation. Some tweaking is still needed because dark themes typically reduce chroma slightly for visual comfort.
Is HEX going away?
No. HEX is the most compact representation of an sRGB color and almost universally supported (every tool, every printer, every email client). OKLCH is the new computational format; HEX is the storage and exchange format. They coexist.
How do I pick accessible colors?
Step 1: choose hue and chroma based on brand. Step 2: pick lightness values that produce ≥4.5:1 contrast against backgrounds you will use. OKLCH makes this iteration easy — for fixed hue and chroma, the contrast curve as L varies is predictable. See the WCAG contrast analyzer for the specific numbers.
Related tools
Check WCAG color contrast accessibility compliance. Extract colors from images. Analyze color palettes for web accessibility. Free color checker
Simulate how images appear to people with color blindness. Test designs for protanopia, deuteranopia, tritanopia. Free color vision deficiency checker
Create beautiful linear, radial, conic CSS gradients visually. Copy CSS code instantly. Free online gradient maker with multiple color stops
Create CSS box shadows visually with multiple layers. Adjust blur, spread, offset, color. Free online box-shadow CSS code generator
Generate favicons in all sizes (16x16, 32x32, 180x180) from any image. Create ICO and PNG favicons. Free online favicon maker for websites
Preview and compare Google Fonts with custom text. Find font pairings for web design. Free online font tester and typography playground
Last updated · E-Utils editorial team