Skip to content

Hex naar OKLCH converter

Converteer HEX naar OKLCH voor Tailwind v4 design-tokens. Live perceptueel-uniforme uitvoer met Display P3 gamut-waarschuwingen. Gratis, alleen in je browser.

Geen tracking Draait in je browser Gratis
Alle kleurconversie gebeurt lokaal in je browser. Er gaat geen data naar een server.
Gamut: sRGB Display P3 Rec2020
Contrast vs:
AA AA-Lg AAA AAA-Lg · APCA Lc
Kleurenblindheid-simulatie (8 typen)
Protanopia (rood-blind)
Deuteranopia (groen-blind)
Tritanopia (blauw-blind)
Achromatopsia (totaal)
Protanomaly (rood-zwak)
Deuteranomaly (groen-zwak)
Tritanomaly (blauw-zwak)
Achromatomaly (gedeeltelijk)
Tints / Shades / Tones / Harmonies

Tints

Shades

Tones

Harmonies

Copy as code
Referentie van gangbare kleuren
Beoordeeld op CSS Color 4 §11.2 + §15.1-conformiteit, correctheid van de Ottosson 2020 OKLAB-matrix, pariteit met het Tailwind v4-palet, nauwkeurigheid van Display P3 / Rec2020 gamut-detectie, en round-trip-stabiliteit tussen HEX en OKLCH over de 0-1 Lightness-, 0-0,4 Chroma- en 0-360° Hue-bereiken. — Go Tools Engineering Team · May 27, 2026

Wat is een hex naar OKLCH converter?

Een hex naar OKLCH converter is een klein hulpmiddel dat een hex-kleurcode (`#3b82f6`) omzet in de perceptueel-uniforme Lightness / Chroma / Hue-triple die dezelfde kleur in OKLCH-ruimte codeert (`oklch(0.629 0.193 263.4)`). Hex-codes zijn de beknopte grondtal-16-strings die designers en developers plakken tussen Figma, Sketch, Photoshop, brand-guideline-PDF's en CSS-stylesheets — drie 8-bit channels gepakt in een 6-tekens `#RRGGBB`-vorm, verankerd aan de sRGB-kleurruimte gedefinieerd door IEC 61966-2-1 in 1996. OKLCH is de polaire vorm van OKLAB, Björn Ottossons perceptueel-uniforme kleurruimte uit 2020, toegevoegd aan CSS via de `oklch()`-syntax in CSS Color 4 (W3C Candidate Recommendation sinds 2022). Channels zijn Lightness (0-1, ook te schrijven als 0-100%), Chroma (0 tot ongeveer 0,4 voor de meest verzadigde sRGB-kleuren, naar boven onbegrensd voor wide-gamut-kleuren) en Hue (0-360°, dezelfde hoekige as die HSL gebruikt). Browserondersteuning landde over alle evergreens tussen maart 2022 (Safari 15.4) en mei 2023 (Firefox 113), met Chrome 111 ertussen (maart 2023) — gecombineerde caniuse-dekking ligt boven 94%. Voorbeeld: Tailwind blue-500 is `oklch(0.629 0.193 263.4)`.

**Perceptuele uniformiteit — waarom het ertoe doet.** In OKLCH (en zijn rechthoekige neef OKLAB) komt gelijke numerieke afstand in de L-channel overeen met gelijke waargenomen afstand in helderheid — over elke kleurtoon, elk chroma-niveau, elke regio van de kleurruimte. In HSL ogen gelijke L-waarden ongelijk helder over kleurtonen heen omdat HSL sRGB's gamma-eigenaardigheden erft: een groen op `hsl(120 100% 50%)` oogt zichtbaar helderder dan een blauw op `hsl(240 100% 50%)`, ook al rapporteren beide L=50%. De structurele oorzaak is dat HSL L geometrisch afleidt (gemiddelde van channel max en min in gamma-encoded sRGB), terwijl OKLCH L afleidt van een perceptueel-verankerd model dat eerst linealiseert en routeert via een LMS cone-response-fase. De praktische winst: L constant houden over kleurtonen in OKLCH produceert visueel-equivalente helderheid — een groen op `oklch(0.7 0.2 130)` en een blauw op `oklch(0.7 0.2 250)` ogen even helder op het scherm. Daarom migreerde Tailwind v4 zijn standaardpalet in 2025 naar OKLCH-gebaseerde ramps — elke schaduwstap (50, 100, 200, …, 900, 950) raakt hetzelfde waargenomen helderheidsverschil, zodat merkkleuren consistent voelen over kleurtonen heen zonder per-kleur handmatige afstemming.

**Tailwind v4 en de design-token-revolutie.** Tailwind v4 (uitgebracht in januari 2025) verving zijn HSL-gebaseerde kleurgeneratie door een OKLCH-gebaseerd systeem. shadcn/ui volgde kort daarna en adopteerde OKLCH voor zijn CSS-variabele-thema; Radix Colors v3 adopteerde het ook. Waarom nu: design systems hebben schaduwen nodig die gelijkmatig ogen over het hele palet, en ze hebben die eigenschap nodig die automatisch geldt naarmate het palet groeit. Met HSL moesten designers elke kleurstap handmatig corrigeren — L 5% extra ophogen aan de donkere kant van de blauwe ramp om die te matchen met de donkere kant van de groene ramp, en daarna opnieuw bijstellen als het merk evolueerde. Met OKLCH produceert één formule (verzet L met 0,1, houd C en H constant) automatisch consistente ramps. Echt voorbeeld: in Tailwind v3 hadden `red-500` en `blue-500` zichtbaar verschillende waargenomen gewichten ondanks identieke HSL L%; in v4 ogen `red-500` en `blue-500` gebalanceerd omdat ze allebei op dezelfde OKLCH L zitten. Dit doet ertoe voor toegankelijkheid (consistent contrast tegen gedeelde achtergronden betekent dat component-states uniform voelen over het palet), merkconsistentie (visuele hiërarchie houdt stand over paletten — een `primary`-knop en een `accent`-knop op dezelfde L voelen als hetzelfde hiërarchieniveau) en developer-ergonomie (één mentaal model in plaats van tientallen handmatig afgestemde uitzonderingen begraven in de design-token-spec).

**Wide-gamut-implicaties.** OKLCH is onbegrensd — hij kan kleuren buiten sRGB representeren, inclusief alles wat Display P3 en Rec2020 kunnen reproduceren. Dat maakt hem de natuurlijke keuze voor moderne wide-gamut-displays. De meeste Apple-apparaten sinds 2017 (iPhone 7 en later, MacBook Pro 2016 en later, elke iPad Pro) renderen Display P3 native, en veel moderne Android-apparaten en laptopschermen doen dat ook. De afweging: niet elke OKLCH-triple mapt op een geldige sRGB-kleur. De tool toont drie gamut-badges — sRGB, Display P3, Rec2020 — zodat je direct kunt zien of de huidige OKLCH correct zal weergeven op een gegeven doel. Wanneer de kleur alleen sRGB is, gebruikt de knop **Snap to sRGB** binaire chroma-reductie (per CSS Color 4 §13's informatieve gamut-mapping-algoritme) om de kleur in gamut te krimpen terwijl L en H bewaard blijven — wat een hex-fallback geeft die je via `@supports not (color: oklch(0 0 0))` naast de oorspronkelijke OKLCH-waarde kunt shippen voor de wider-gamut-clients.

**De HEX → OKLCH-conversiewiskunde.** De pipeline is goed gedefinieerd en gegrond in twee primaire bronnen: W3C CSS Color 4 voor de sRGB- en XYZ-fasen, Ottosson 2020 voor de OKLAB-fase. Stap één: parse `#RRGGBB` naar drie 8-bit integer sRGB-channels via `parseInt(hex.slice(1, 3), 16)` per channel. Stap twee: normaliseer elke channel naar 0-1 door door 255 te delen. Stap drie: gamma-decodeer naar linear-sRGB via de stukgewijze functie van CSS Color 4 §11.2 (`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`). Stap vier: vermenigvuldig met de §15.1 3×3-matrix om CIE XYZ D65-coördinaten te krijgen. Stap vijf: vermenigvuldig met Ottossons LMS-matrix (uit zijn 2020-referentie-implementatie) en neem de kubuswortel van elke channel. Stap zes: vermenigvuldig met Ottossons OKLAB-matrix om L / a / b te krijgen. Stap zeven: Cartesiaans-naar-polair — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, wrap H in 0-360°. De volledige pipeline draait in microseconden — elke toetsaanslag rendert de OKLCH-uitvoer direct opnieuw zonder debounce.

De HEX → OKLCH-workflow van deze tool is één richting van een 5-spoke-familie die allemaal dezelfde onderliggende unified color converter delen. De aparte unified color converter is de hub — hij toont alle 9 formaten tegelijk bewerkbaar en is de juiste tool wanneer je workflow meer dan alleen hex en OKLCH nodig heeft. De eenrichtings-spokes richten zich op specifieke Google-zoekintenties: de hex naar RGB converter voor de canvas-en-hardware-richting, de RGB naar hex converter voor de inverse, de hex naar HSL converter voor de legacy designer-cilindrische ruimte die nog in veel Tailwind v3-codebases wordt gebruikt, en de hex naar CMYK converter voor printvoorbereidings-benaderingen. Alle vijf spokes en de hub delen intern dezelfde OKLCH bron van waarheid en dezelfde Ottosson 2020-matrices, dus de resultaten zijn gegarandeerd identiek over de familie. Elke conversie draait lokaal in je browser — je hex-codes worden nooit geüpload, nooit gelogd, en nul netwerkverzoeken vuren terwijl je typt. Verifieer in DevTools. Voor een diepere duik in waarom OKLCH in 2024–2026 de standaard werd voor design systems, lees onze begeleidende gids: OKLCH-kleurruimte uitgelegd — waarom Tailwind v4 erop overstapte.

// sRGB hex → OKLCH per W3C CSS Color 4 + Ottosson 2020
// References: https://www.w3.org/TR/css-color-4/#color-conversion-code
//             https://bottosson.github.io/posts/oklab/
// Worked example: #3b82f6 (Tailwind blue-500) → oklch(0.629 0.193 263.4)
function hexToOklch(hex) {
  const h = hex.trim().replace(/^#/, '');
  const srgb = [0, 2, 4].map(i => parseInt(h.slice(i, i + 2), 16) / 255);
  // sRGB → linear-sRGB (CSS Color 4 §11.2 piecewise gamma)
  const lin = srgb.map(v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4));
  const [lr, lg, lb] = lin;
  // linear-sRGB → XYZ D65 (CSS Color 4 §15.1 matrix)
  const x = 0.4124564 * lr + 0.3575761 * lg + 0.1804375 * lb;
  const y = 0.2126729 * lr + 0.7151522 * lg + 0.0721750 * lb;
  const z = 0.0193339 * lr + 0.1191920 * lg + 0.9503041 * lb;
  // XYZ D65 → LMS (Ottosson 2020), cube-root, → OKLAB
  const l_ = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);
  const m_ = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);
  const s_ = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.6338517070 * z);
  const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;
  const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;
  const b = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;
  // OKLAB → OKLCH (Cartesian to polar)
  const C = Math.sqrt(a * a + b * b);
  const H = (Math.atan2(b, a) * 180 / Math.PI + 360) % 360;
  return `oklch(${L.toFixed(3)} ${C.toFixed(3)} ${H.toFixed(1)})`;
}
console.log(hexToOklch('#3b82f6')); // → oklch(0.629 0.193 263.4)

Kernfuncties

Perceptueel-uniforme uitvoer over alle kleurtonen

OKLCH's L-channel is verankerd aan het OKLAB-perceptuele model (Ottosson 2020), dus elke L-stap oogt als dezelfde helderheidswijziging over alle kleurtonen — een groen op `oklch(0.7 0.2 130)` en een blauw op `oklch(0.7 0.2 250)` lezen als even helder op het scherm. Dit is de structurele eigenschap die Tailwind v4 toelaat om automatisch visueel-gelijkmatige ramps te genereren zonder per-kleur handmatige afstemming, dezelfde eigenschap die de equivalente HSL-ramp niet kan garanderen omdat HSL sRGB's gamma-eigenaardigheden erft.

Klaar voor Tailwind v4 — drop in @theme-blokken

De OKLCH-uitvoer gebruikt de ruimte-gescheiden vorm van CSS Color 4 (`oklch(0.629 0.193 263.4)`) — de exacte syntax die Tailwind v4 verwacht binnen een `@theme`-blok als `--color-primary: oklch(0.629 0.193 263.4);`. De L-precisie matcht de gepubliceerde paletprecisie van Tailwind (drie decimalen op L en C, één decimaal graad op H), dus een paste-into-config-workflow produceert identieke tokens aan die welke Tailwind standaard ship. Combineer met de Tailwind v4-snippet in de sectie Copy as code voor de volledige token-regel.

Display P3 + Rec2020 gamut-badges

Drie live badges (sRGB, Display P3, Rec2020) markeren of de huidige OKLCH-triple binnen het reproduceerbare bereik van elke ruimte valt. Handig omdat OKLCH onbegrensd is — veel kleuren met hoge chroma overschrijden sRGB maar passen in P3, dat de meeste Apple-apparaten sinds 2017 native kunnen renderen. De badges worden rood bij buiten gamut, zodat je kunt beslissen of je de wider-gamut-waarde houdt voor moderne displays of naar sRGB snapt voor universele compatibiliteit. Channel-range-check draait bij elke toetsaanslag.

Snap to sRGB voor legacy-compatibiliteit

De knop Snap to sRGB draait binaire chroma-reductie (CSS Color 4 §13 informatief algoritme): houd L en H vast, zoek C omlaag tot de resulterende sRGB-conversie in gamut blijft. De zoekactie eindigt na ongeveer 30 iteraties op subpixelprecisie. L en H bewaren betekent dat de gesnapte kleur leest als dezelfde kleurtoonfamilie op dezelfde helderheid — hij verliest alleen verzadiging, wat het minst visueel-storende compromis is. De gesnapte hex koppelt met de oorspronkelijke OKLCH via `@supports not (color: oklch(0 0 0))` voor gelaagde fallback.

Directe conversie per toetsaanslag

Er is geen Converteren-knop. Typ één teken in het HEX-veld en het OKLCH-veld werkt bij in hetzelfde animatieframe. De interne canonieke representatie is de OKLCH-triple zelf, dus OKLCH direct bewerken is even snel — de cursor blijft waar je hem hebt gezet, alleen de andere formaatvelden renderen opnieuw. De conversiewiskunde (sRGB → linear → XYZ → LMS → OKLAB → polair) draait in microseconden; geen debounce, geen latency, geen zichtbare reflow.

Uitgewerkt voorbeeld via W3C + Ottosson 2020-pipeline

De code-voorbeeldsectie ship een werkende JavaScript-implementatie van de volledige HEX → OKLCH-pipeline met de exacte matrices en gammafunctie die zijn gepubliceerd in W3C CSS Color 4 (§11.2 stukgewijze gamma, §15.1 linear-sRGB → XYZ D65-matrix) en Björn Ottossons OKLAB-referentie-implementatie uit 2020. Plak in een Node REPL en verifieer dat `#3b82f6` `oklch(0.629 0.193 263.4)` oplevert. Elke matrixwaarde is gekopieerd uit de primaire bron — geen herafleidingen of afronding.

Bidirectioneel met HSL / RGB / HEX in de unified hub

Hoewel deze spoke specifiek HEX → OKLCH target, exposeert dezelfde pagina ook de andere acht formaatvelden — RGB voor hardware, HSL voor legacy CSS, OKLAB voor paletwiskunde, HSV/HWB voor picker-UI's, CMYK voor print, en de dichtstbijzijnde CSS named color. Doordat OKLCH intern de bron van waarheid is, blijft elk veld bit-stabiel over round-trips: HEX → OKLCH → HSL → HEX herstelt de oorspronkelijke hex. Klik in elk veld om het direct te bewerken en kijk hoe de andere bijwerken.

Samenvatting van browserondersteuning inline

De tool toont de canonieke browserondersteunings-data-punten waar relevant: Chrome en Edge 111 (maart 2023), Safari 15.4 (maart 2022 — de vroegste), Firefox 113 (mei 2023), gecombineerde caniuse-dekking boven 94%. Voor oudere clients wikkel je tokens in `@supports (color: oklch(0 0 0))` en lever je een hex-fallback in de alternatieve tak. De Snap to sRGB-uitvoer is precies die fallback, automatisch gegenereerd vanuit de huidige OKLCH-triple — geen handmatige chroma-afstemming nodig.

100% in-browser — geen upload, geen tracking

Alle hex-parsing, OKLCH-conversie, gamut-detectie, contrastscoring en paletgeneratie draait lokaal in je browser. Je hex-codes worden nooit verzonden, nooit gelogd op een server, nooit geanalyseerd. Nul netwerkverzoeken terwijl je typt — verifieer in DevTools. Veilig voor onaangekondigde merkpaletten, interne design tokens voor onuitgebrachte producten, concept-mockups onder NDA, en al het andere vertrouwelijke kleurwerk waar de waarde niet mag lekken.

Alternatieven voor de hex naar OKLCH converter

OKLCH.com

browsertool

Prachtig gebouwde OKLCH-gefocuste tool van Andrey Sitnik (auteur van de postcss-oklab-function-polyfill en Autoprefixer). Best-in-class voor pure OKLCH-exploratie met een wide-gamut-bewuste picker, P3-bewuste visualisatie en paletgeneratie. Dekt HEX/RGB/HSL/CMYK-conversie niet als primaire uitvoer — alleen op OKLCH gefocust. Pak OKLCH.com als je diep OKLCH-design-werk doet; pak deze tool als je ook cross-space-conversie en de gamut/contrast/CVD-features nodig hebt.

Tailwind v4 documentatiepalet

documentatiereferentie

De Tailwind v4-docs publiceren het volledige standaardpalet in OKLCH naast de hex-equivalenten. Best om een exacte Tailwind-schaduw op te zoeken (`blue-500` → `oklch(0.629 0.193 263.4)`) of aangepaste kleuren te matchen op het visuele gewicht van een Tailwind-schaduw. Niet interactief — geen conversie van willekeurige hex-codes. Deze tool dekt dezelfde OKLCH-precisie en werkt voor elke hex, niet alleen de 200+ Tailwind-defaults.

ColorJS.io Playground

browsertool

ColorJS.io is de gezaghebbende CSS-kleurbibliotheek van Lea Verou en Chris Lilley; de playground exposeert de volledige conversiegraaf (HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98). Diep correcte wiskunde, ideaal voor spec-niveau kleurwerk. UI is developer-gefocust (niet designer-gefocust) en mist de contrast-/CVD-/paletfeatures. Combineer met deze tool: gebruik ColorJS.io voor de wiskunde die je anders niet kunt verifiëren, gebruik deze tool voor actieve workflows.

shadcn/ui Themes Generator

browsertool

De shadcn-themagenerator van Vercel produceert plak-klare OKLCH CSS-variabele-thema's voor shadcn/ui-projecten. Best voor end-to-end themagenerate wanneer de deliverable een shadcn-configbestand is. Toont geen tussenliggende OKLCH-waarden voor willekeurige hex-codes — gefocust op de volledige themaworkflow. Gebruik de shadcn-generator als je een shadcn-thema bouwt; gebruik deze tool als je de OKLCH van elke individuele kleur nodig hebt.

ColorHexa

browsertool

Langlopende per-kleur SEO-pagina's met diepe metadata. Voegde recent OKLCH-ondersteuning toe naast HEX/RGB/HSL/CMYK. UI is gedateerd (begin jaren 2010), geen wide-gamut-detectie, geen APCA-contrast. Sterk voor SEO-vondsten van een specifieke hex via Google; zwakker voor actieve conversie-workflows waar de unified-field-UX en gamut/contrast-features ertoe doen. Deze tool wint op elke actieve-workflow-as.

Browser DevTools Color Picker

ingebouwde browserfeature

Chrome, Firefox en Safari DevTools shippen allemaal een color picker die tussen HEX, RGB, HSL, HWB en OKLCH inline schakelt wanneer je op een kleurstaal in het CSS-paneel klikt. Gratis, geen installatie, altijd beschikbaar. Mist de gamut-badges, contrastscoring, kleurenblindheid-simulatie en code-export voor niet-webplatforms (SwiftUI, Compose). Pak DevTools als je al CSS debugt; pak deze tool als je cross-platform-uitvoer of de diepere checks nodig hebt.

Culori CLI

command-line-bibliotheek

Culori is de meest grondige OKLCH-bewuste JavaScript-kleurbibliotheek; zijn CLI handelt HEX → OKLCH-conversie af als een one-liner (`culori convert '#3b82f6' --to oklch`). Uitstekend voor CI-scripts en batch-tokenmigratie. Geen visuele picker of gamut-badges. Gebruik Culori CLI voor automatisering; gebruik deze tool voor interactief single-kleur-werk en de directe visuele feedback.

Voorbeelden van hex naar OKLCH

Tailwind 3 HSL-palet migreren → v4 OKLCH-tokens

#3b82f6

OKLCH-uitvoer: `oklch(0.629 0.193 263.4)`. De canonieke Tailwind v4-migratieworkflow: definieer de merkkleur één keer in je `@theme`-blok als `--color-primary: oklch(0.629 0.193 263.4)`, bouw daarna lichte tinten op door L omhoog te verzetten (`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`) en donkere tinten door L omlaag te verzetten (`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`). De kleurtoon blijft vast op 263,4°, chroma verankert dicht bij 0,19, lightness is de enige as die meeschuift — een eendimensionale ramp die visueel gelijkmatig oogt over de hele schaal, wat de equivalente HSL-ramp niet kan garanderen.

Design-token-migratie met perceptueel-uniforme schaduwen

#FF5733

OKLCH-uitvoer: ruwweg `oklch(0.66 0.18 28)`. Om een 5-stappen donkere-tint-ramp te bouwen vanuit dit merkoranje houd je C = 0,18 en H = 28 constant en verzet je L door 0,3, 0,45, 0,6, 0,75, 0,9 — wat `oklch(0.3 0.18 28)` tot `oklch(0.9 0.18 28)` oplevert. Elk aangrenzend paar voelt als dezelfde visuele sprong in helderheid, omdat OKLCH's L verankerd is aan het OKLAB-perceptuele model (Ottosson 2020) in plaats van HSL's gamma-verstrengelde geometrische L. De chroma kan stilletjes naar sRGB klippen aan de extremen; de gamut-badges van de tool markeren precies welke stappen aandacht nodig hebben.

Wide-gamut OKLCH → sRGB-fallback voor Tailwind v3-sites

#FF1744

OKLCH-uitvoer: ongeveer `oklch(0.62 0.27 26)`. Een rood met hoge chroma als dit overschrijdt de sRGB-kubus — de **sRGB** gamut-badge licht rood op, de **Display P3**-badge bevestigt dat hij in P3 past en Rec2020 dekt 'm ook. Op een standaard 24-bit monitor rendert hij als gedesatureerde benadering; op een Display P3-scherm (de meeste Apple-apparaten sinds 2017) rendert hij verzadigd. Klik op **Snap to sRGB** om het binaire chroma-reductie-algoritme te draaien (CSS Color 4 §13 informatief) — L en H blijven vast terwijl C krimpt totdat de kleur past, wat een hex-fallback oplevert die geschikt is voor een Tailwind v3-codebase die nog steeds 8-bit hex-tokens gebruikt.

shadcn/ui-themamigratie

#0f172a

OKLCH-uitvoer: ongeveer `oklch(0.21 0.04 264.7)`. shadcn/ui migreerde zijn CSS-variabele-thema kort na de Tailwind v4-release naar OKLCH, en `#0f172a` (Tailwind slate-900) is de canonieke dark-mode-achtergrond. De tool reproduceert de gepubliceerde OKLCH-waarde van shadcn voor dezelfde hex, zodat je kunt verifiëren dat een community-thema-port matcht met de upstream-definitie. Combineer met de contrastrij om te bevestigen dat de dark-mode-voorgrond (wit of bijna-wit) nog steeds WCAG AA haalt tegen deze achtergrond — `oklch(0.21 ...)` tegen `oklch(1 0 0)` rapporteert een comfortabele 16:1-verhouding.

Een Tailwind v4 donker/licht-paar bouwen vanuit een merk-hex

#3b82f6

OKLCH-uitvoer: `oklch(0.629 0.193 263.4)`. Om een matchend donker/licht-paar voor een thema af te leiden draai je alleen de L-channel terwijl je C en H constant houdt: de light-mode-primary wordt `oklch(0.7 0.15 263)` (iets helderder, iets minder chromatisch om oogvermoeidheid op witte achtergronden te vermijden), de dark-mode-primary wordt `oklch(0.5 0.18 263)` (iets donkerder, iets meer chromatisch om saliency op donkere achtergronden te behouden). Beide varianten lezen als dezelfde merkidentiteit omdat de kleurtoon vast staat; de perceptuele L-verschuiving balanceert leesbaarheid over beide modi zonder handmatige per-channel RGB-afstemming.

Gangbare hex → OKLCH conversies (Tailwind v4)

Referentietabel van 10 populaire Tailwind v4-standaardpalet mid-schaduwen met hun HEX- en OKLCH-equivalenten. Waarden matchen de gepubliceerde paletprecisie van Tailwind v4 (drie decimalen op L en C, integer of één decimaal op H).

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

Tailwind CSS's standaard slate-500 — het neutrale koele grijs dat wordt gebruikt voor lopende tekst, secundaire oppervlakken en de-emphasized UI-elementen. Lage chroma (0,04) houdt het visueel neutraal.

#64748b oklch(0.55 0.04 257)

slate is de canonieke neutrale ramp voor dark-mode-vriendelijke thema's — elke slate-schaduw zit op heel lage chroma zodat ze lezen als grijs in plaats van blauw-getint.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

Tailwind CSS's standaard gray-500 — de echt-neutrale tegenhanger van slate. Iets lagere chroma dan slate (0,03 vs 0,04) voor een achromatischer uiterlijk.

#6b7280 oklch(0.55 0.03 258)

gray en slate zitten op vrijwel identieke L (0,55) — de waargenomen helderheid is gematcht, alleen het kleine chroma-verschil onderscheidt ze.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

Tailwind CSS's standaard red-500 — het canonieke destructieve-actie/fout-rood. Hoge chroma (0,21) houdt het salient tegen neutrale achtergronden.

#ef4444 oklch(0.64 0.21 25)

red-500 zit op L=0,64, matchend met blue-500's L=0,63 — de v4-ramps zijn perceptueel-gebalanceerd over kleurtonen, anders dan v3's HSL-gebaseerde palet.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

Tailwind CSS's standaard orange-500 — de warme-accent- en CTA-kleurtoon. Zit tussen rood en amber op de kleurtooncirkel (42°).

#f97316 oklch(0.71 0.19 42)

orange-500's hogere L (0,71) versus red-500's L (0,64) is opzettelijk — gelen en oranjes ogen helder op lagere perceptuele L dan roden.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

Tailwind CSS's standaard amber-500 — de waarschuwings-/caution-kleurtoon, tussen oranje en geel op het wiel.

#f59e0b oklch(0.76 0.16 70)

amber-500 raakt de hoogste L (0,76) van elke 500-level Tailwind-kleur — gelen hebben natuurlijk hogere L nodig om als 'mid-tone' visueel te ogen.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

Tailwind CSS's standaard green-500 — de succes-/bevestigings-kleurtoon. Zit op 149° op het kleurtoonwiel, in de cyaan-groene regio.

#22c55e oklch(0.72 0.19 149)

green-500 op L=0,72 is een tikje helderder dan red-500 op L=0,64 — dat matcht perceptuele realiteit (groenen ogen helder) en geeft het palet gebalanceerd visueel gewicht.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

Tailwind CSS's standaard teal-500 — de koele-accent-kleurtoon tussen groen en cyaan. Lagere chroma dan green-500 omdat hoge-chroma teals makkelijk voorbij sRGB pushen.

#14b8a6 oklch(0.7 0.13 184)

teal-500's H=184° zit net voorbij cyaan (180°) — puur cyaan in OKLCH is moeilijk uit te drukken in sRGB zonder chroma-klippen; teal is het praktische compromis.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

Tailwind CSS's standaard blue-500 — het canonieke 'webblauw' van de jaren 2020, de merk-anker-kleur voor het v4-palet en het standaardthema van shadcn/ui.

#3b82f6 oklch(0.63 0.19 263)

blue-500 is de referentiekleur die het vaakst wordt gebruikt als startpunt voor Tailwind v4 OKLCH-migratie — plak #3b82f6 hier om de conversie tegen de gepubliceerde waarde te verifiëren.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

Tailwind CSS's standaard indigo-500 — de koele-accent-tegenhanger van blauw, op 277° (richting paars). Hoge chroma (0,21) geeft het saliency.

#6366f1 oklch(0.59 0.21 277)

indigo-500 zit op lagere L dan blue-500 (0,59 vs 0,63) — de diepere kleurtoon absorbeert meer waargenomen helderheid, en de v4-ramp houdt daar perceptueel rekening mee.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

Tailwind CSS's standaard violet-500 — de paars-accent-kleurtoon op 295°. Hoogste chroma (0,24) van elke Tailwind 500-level kleur, vaak gebruikt voor AI- / creative-product-branding.

#8b5cf6 oklch(0.6 0.24 295)

violet-500's hoge C=0,24 brengt 'm dicht bij het sRGB gamut-plafond — push veel hoger en hij crosst in P3-alleen wide-gamut-gebied.

De volledige color picker nodig met RGB, HSL, CMYK, gamut-waarschuwingen en code-export? Probeer de unified color converter — elk formaat tegelijk bewerkbaar.

Zo gebruik je de hex naar OKLCH converter

  1. 1

    Plak een hexcode in het HEX-veld

    Drop elke hex-waarde in het HEX-invoerveld — met of zonder de leidende `#`, in 3-cijferige verkorte vorm (`#F73`), 6-cijferige volledige vorm (`#3b82f6`), 4-cijferige alpha-verkorte vorm (`#F738`) of 8-cijferige alpha-volledige vorm (`#FF573380`). De parser normaliseert alle vijf invoervormen naar dezelfde interne kleur voordat hij OKLCH afleidt. Hoofdletters maken niet uit (`#3b82f6` en `#3B82F6` parsen identiek). Ongeldige tekens of verkeerde cijferaantallen produceren een rustige inline foutmelding; geldige hex werkt elk ander formaatveld in realtime bij, inclusief OKLCH.

  2. 2

    Lees de OKLCH-triple af in het OKLCH-veld

    Het OKLCH-veld toont de waarde in de moderne vorm van CSS Color 4: `oklch(0.629 0.193 263.4)` voor een dekkende kleur, `oklch(0.629 0.193 263.4 / 0.5)` voor een kleur met alpha. L wordt afgerond op drie decimalen (matcht de gepubliceerde precisie van Tailwind v4), C op drie decimalen, H op één decimaal graad. Doordat OKLCH intern de bron van waarheid is, blijft de onderliggende float-precisie behouden over elk ander veld — round-trips terug naar hex blijven bit-stabiel, anders dan legacy converters die via HSL pivoteren en per round-trip een graad of twee drift oplopen.

  3. 3

    Klik op Kopiëren om de OKLCH-string te pakken

    Elke formaatkaart heeft een Kopiëren-knop aan de rechterkant. Eén klik en de waarde belandt op je klembord — het knoplabel springt kort op "Gekopieerd!" zodat je het weet. De gekopieerde string is de canonieke CSS Color 4-syntax (`oklch(0.629 0.193 263.4)`), klaar om in een Tailwind v4 `@theme`-blok te droppen of in een shadcn/ui CSS-variabeledefinitie. Voor platformspecifieke uitvoer (CSS custom property, Tailwind v4-token, SwiftUI, Compose, Flutter) gebruik je de sectie Copy as code onder de picker — die snippets emitten het formaat dat elk platform native verwacht.

  4. 4

    Bekijk de Display P3 / Rec2020 gamut-badges

    Drie gamut-badges (sRGB, Display P3, Rec2020) tonen of de huidige kleur binnen het reproduceerbare bereik van elke ruimte valt. Als de sRGB-badge rood wordt maar P3 groen, is de kleur een wide-gamut OKLCH die verzadigd rendert op Apple-hardware (iPhone, iPad, MacBook vanaf 2017+) maar gedesatureerd op een legacy 24-bit monitor. De knop **Snap to sRGB** gebruikt binaire chroma-reductie (CSS Color 4 §13 informatief algoritme) om de kleur in sRGB te krimpen terwijl L en H bewaard blijven, wat een hex-fallback oplevert die je via `@supports not (color: oklch(0 0 0))` kunt shippen.

  5. 5

    Ook zichtbaar: RGB, HSL, OKLAB, HSV, HWB, CMYK, named color

    Dezelfde hex die je plakt licht ook de andere acht formaatvelden op — RGB voor canvas-aanroepen en hardware, HSL voor legacy CSS-variabelen, OKLAB voor paletwiskunde en kleurenblindheid-matrices, HSV en HWB voor designer-color-picker-workflows, CMYK voor printschattingen, en de dichtstbijzijnde CSS named color voor documentatie-proza. Je zit nooit alleen vast aan hex → OKLCH. De picker (SL-vierkant + hue-slider + alpha-slider) drijft alle negen tegelijk, en op Chromium-browsers samplet de EyeDropper-knop elke pixel op het scherm, ook buiten de browser.

Veelgemaakte fouten bij hex / OKLCH

OKLCH Chroma lezen als HSL Saturation

OKLCH Chroma is onbegrensd (0 tot ~0,4 voor sRGB-passende kleuren, hoger voor wide-gamut) — het is GEEN 0-100% saturatiepercentage als HSL's S. Aannemen dat C=0,3 "30% verzadigd" betekent leest de schaal verkeerd: 0,3 is sterk chromatisch, dicht bij het sRGB-plafond voor sommige kleurtonen en ruim erover voor andere. De maximum C varieert per L en H — een groen op L=0,7 ondersteunt veel hogere C dan een blauw op L=0,3. Behandel C als een absolute afstand tot grijs, niet als een relatief percentage.

✗ Fout
Zet OKLCH C = 0,3 in de verwachting van "30% saturatie":
oklch(0.7 0.3 250) → kan voor blauwen de sRGB-gamut overschrijden
Wide-gamut-kleur rendert gedesatureerd op legacy-displays.
✓ Correct
Behandel C als absolute chroma, check gamut-badges:
oklch(0.7 0.15 250) → comfortabel binnen sRGB voor dit L+H-paar
Gebruik de badges om de max C te vinden die in het doel-gamut past.

OKLCH L hetzelfde behandelen als HSL L

Beide ruimtes rapporteren Lightness als een 0-1-as (of 0-100%), maar ze meten verschillende dingen. HSL L is geometrisch — afgeleid van het middelen van RGB max/min in gamma-encoded sRGB. OKLCH L is perceptueel — verankerd aan het OKLAB-model. Een HSL-gebaseerd palet porten als `oklch(L%, C, H)` en matchende helderheid verwachten produceert ongelijke resultaten omdat de L-relatie tussen de twee ruimtes niet-lineair is. Voor mid-tone kleuren is OKLCH L = 0,6 ruwweg HSL L = 50%, maar de curve drift aan de donkere en lichte uiteinden.

✗ Fout
Kopieer HSL L-percentages direct naar OKLCH:
hsl(220 50% 30%) geport als oklch(0.30 0.10 220)
De twee kleuren ogen merkbaar verschillend in helderheid.
✓ Correct
Herafleid OKLCH vanuit de oorspronkelijke hex, port geen HSL:
hex-bron → OKLCH-conversie → oklch(0.34 0.08 254)
De perceptuele L blijft correct; het palet voelt gelijkmatig.

Vergeten dat wide-gamut OKLCH niet weergeeft in sRGB

OKLCH is onbegrensd — je kunt `oklch(0.7 0.4 30)` schrijven en de syntax is geldig, maar de chroma overschrijdt wat sRGB's 256-per-channel byte-ruimte kan coderen. Op een sRGB-monitor klipt die kleur naar de dichtstbijzijnde in-gamut benadering (meestal een gedesatureerde versie). Op een Display P3-monitor rendert hij correct. Een wide-gamut OKLCH shippen zonder de gamut-badges te controleren produceert een kleur die er anders uitziet op verschillende displays — een subtiele maar reële cross-platform-consistentiebug.

✗ Fout
Ship oklch(0.7 0.4 30) zonder sRGB-gamut te checken:
P3-displays renderen verzadigd rood; sRGB-displays renderen gedesatureerd
Merkkleur oogt inconsistent over gebruikershardware.
✓ Correct
Check de sRGB gamut-badge, Snap to sRGB indien nodig, laag met @supports:
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
P3-hardware krijgt de wide-gamut-waarde; sRGB-hardware krijgt de gesnapte fallback.

Ontbrekende browserondersteuning voor oklch()

Native `oklch()`-parsing landde in Chrome en Edge 111 (maart 2023), Safari 15.4 (maart 2022) en Firefox 113 (mei 2023). Gecombineerde caniuse-dekking is 94%+, maar de resterende 6% omvat IE 11, oude Safari op iOS 15.3 of eerder, oude Android Chrome en embedded webviews. `oklch()` shippen zonder fallback aan die long tail rendert als de CSS-`inherit`-waarde of faalt volledig. Feature-detect altijd met `@supports` voor productiesites met breed publiek.

✗ Fout
Definieer merkkleur alleen in OKLCH:
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11 en oude iOS Safari renderen helemaal geen kleur.
✓ Correct
Laag met @supports voor nette fallback:
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
Moderne browsers krijgen OKLCH; legacy-browsers krijgen de hex-fallback.

OKLCH en LCH (CIE-LAB polaire vorm) verwarren

CSS Color 4 ship zowel `oklch()` als `lch()`. Ze ogen identiek in vorm (L / C / H) maar gebruiken verschillende onderliggende ruimtes: `lch()` is de polaire vorm van CIE-LAB (1976), `oklch()` is de polaire vorm van OKLAB (Ottosson 2020). De twee zijn NIET uitwisselbaar — `lch(60% 50 240)` en `oklch(0.6 0.15 240)` beschrijven verschillende kleuren. CIE-LAB's perceptuele uniformiteit loopt vast rond verzadigde blauwen, en daarom leidde Ottosson OKLAB opnieuw af. Geef voor nieuw design-system-werk de voorkeur aan `oklch()` boven `lch()`.

✗ Fout
Vervang lch() door oklch() in de verwachting van hetzelfde resultaat:
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — totaal verschillende kleuren
Gekopieerd-plakt over ruimtes is de waarde stilletjes verkeerd.
✓ Correct
Kies één ruimte en blijf erin:
oklch(0.629 0.193 263.4) voor moderne design systems
of lch(60% 50 240) — maar wissel niet van functienaam zonder opnieuw te converteren

Wie gebruikt hex naar OKLCH

Frontend-devs migreren naar Tailwind v4 OKLCH-tokens
Tailwind v4 standaardiseerde in januari 2025 op OKLCH voor zijn standaardpalet. Een v3-codebase met hex-gebaseerde merkkleuren migreren betekent elke hex naar OKLCH converteren en het resultaat in het nieuwe `@theme`-blok droppen. Plak elke hex hier, kopieer de `oklch()`-waarde, definieer `--color-primary: oklch(0.629 0.193 263.4)` en consorten. De live gamut-badges markeren kleuren die sRGB overschrijden, zodat je kunt beslissen of je de wide-gamut-waarde houdt voor Display P3-gebruikers of naar sRGB snapt.
shadcn/ui-thema-auteurs bouwen aangepaste paletten
Het CSS-variabele-thema van shadcn/ui gebruikt OKLCH voor elk token (`--background`, `--foreground`, `--primary`, enz.). Aangepaste thema's leiden vanuit een basis-merk-hex door naar OKLCH te converteren en daarna L te draaien voor de light/dark-varianten. Plak de merk-hex, lees de OKLCH-triple af, bouw de rest van het thema uit door L te verzetten terwijl je C en H vast houdt. Matcht de canonieke shadcn-workflow exact.
Design-system-auteurs genereren perceptueel-gelijkmatige ramps
Genereer een 50/100/200/.../900-ramp door de L-channel in gelijke OKLCH-stappen te verzetten terwijl je C en H vast houdt. De visuele afstand tussen aangrenzende stops oogt identiek over elke kleurtoon — wat een merkkleurpalet daadwerkelijk nodig heeft. Tailwind v4 gebruikt precies deze constructie voor zijn standaardpalet, en shadcn/ui spiegelt het. Plak elke merk-hex, lees de OKLCH af, genereer de ramp algoritmisch of via het Tints/Shades/Tones-paneel onder de picker.
Toegankelijkheidsengineers verifiëren contrast in OKLCH-ruimte
WCAG 2.1 en APCA-contrast rapporteren beide tegen de opgeloste sRGB-kleur, niet de OKLCH-triple — maar de OKLCH L van een merkkleur kennen maakt contrastafstemming voorspelbaar: verhoog L met 0,1 om AA tegen wit te halen, verlaag L met 0,1 om AA tegen zwart te halen. De gelijktijdige OKLCH + WCAG + APCA-weergave maakt de relatie zichtbaar. Plak de merk-hex, kijk naar de contrast-badges, stel L in OKLCH bij (voorspelbaarder dan HSL) totdat het paar beide metrieken haalt.
Web-devs bouwen wide-gamut-kleurentokens voor moderne displays
De meeste Apple-apparaten sinds 2017 (en veel moderne Android-apparaten) renderen Display P3 native. Merkaccentkleuren in OKLCH definiëren laat je P3-alleen verzadigde roden en groenen adresseren die geen enkele hexcode kan coderen. Plak een bestaande hex om de OKLCH af te lezen, push daarna de C-channel boven het sRGB-plafond om de extra P3-verzadiging te claimen. De gamut-badges bevestigen dat de nieuwe waarde in P3 past (en netjes terugvalt op sRGB-alleen schermen via browser-chroma-compressie).
Docenten leggen perceptuele-vs-geometrische lightness uit
De gelijktijdige OKLCH + HSL-weergave maakt het verschil tussen perceptuele en geometrische lightness overduidelijk. Plak een verzadigd groen en een verzadigd blauw op dezelfde HSL L=50%; de OKLCH L-waarden verschillen merkbaar omdat OKLCH werkelijk waargenomen helderheid meet. Sleep de HSL hue-slider en kijk hoe OKLCH L wiebelt terwijl je HSL L constant houdt — de curve is de gamma-eigenaardigheid gevisualiseerd. Een lesklaar demonstratie van waarom design systems naar OKLCH zijn gemigreerd.
Open-source-maintainers moderniseren tokendocumentatie
Oudere design-system-docs vermelden merkkleuren typisch alleen als hex-codes. Moderniseren naar OKLCH betekent dezelfde kleur in beide ruimtes tonen — de hex voor codeblock-compatibiliteit, de OKLCH voor de spec-tabel en de moderne tokendefinitie. Plak elke hex, kopieer de OKLCH-uitvoer, werk de docs bij. De deelbare URL-hash laat bijdragers ook linken naar de exacte kleur in een GitHub-issue zonder dubbelzinnigheid.

Wiskunde & pipeline van hex naar OKLCH

HEX → OKLCH is een 7-staps pipeline
De conversie routeert via vijf tussenrepresentaties: hex → integer sRGB → genormaliseerde sRGB (0-1) → linear-sRGB (gamma-gedecodeerd) → CIE XYZ D65 → OKLAB → OKLCH. Elke stap is een goed-gedefinieerde matrix of stukgewijze functie uit een primaire bron. De tool draait de volledige pipeline bij elke toetsaanslag; de wiskunde is snel genoeg (microseconden) dat geen debouncing nodig is. De tussenliggende RGB-tuple naast OKLCH tonen betekent dat je een onverwachte OKLCH-waarde kunt debuggen door de RGB-channels te inspecteren.
CSS Color 4 §11.2 gammafunctie
De sRGB → linear-sRGB-conversie gebruikt de stukgewijze functie van CSS Color 4 §11.2: `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. De stukgewijze vorm (met een klein lineair segment dicht bij nul) vermijdt de numerieke instabiliteit van de pure-exponent-vorm bij heel donkere kleuren. Dit is dezelfde functie die ICC-profielen gebruiken om sRGB te coderen en dezelfde functie die browsers intern gebruiken bij het renderen van hex-codes. De inverse voor OKLCH → hex past dezelfde functie omgekeerd toe: `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
CSS Color 4 §15.1-matrix: linear-sRGB ↔ XYZ D65
De matrix uit CSS Color 4 §15.1 converteert linear-sRGB naar CIE XYZ onder het D65-witpunt: `X = 0.4124564 R + 0.3575761 G + 0.1804375 B`, `Y = 0.2126729 R + 0.7151522 G + 0.0721750 B`, `Z = 0.0193339 R + 0.1191920 G + 0.9503041 B`. De Y-rij geeft de sRGB-luminantieformule. Het is dezelfde matrix die in elke kleurmanagement-bibliotheek wordt gebruikt, inclusief ICC, Adobe Color Engine en de open-source LCMS-pipeline. De inverse matrix voor OKLCH → hex past de §15.1-inverse toe.
Ottosson 2020 OKLAB-matrices en kubuswortelstap
De XYZ D65 → OKLAB-conversie gebruikt twee matrices en een kubuswortelstap gepubliceerd in Björn Ottossons OKLAB-paper uit 2020. De eerste matrix transformeert XYZ naar een LMS cone-response-ruimte (losjes gemodelleerd op menselijke L/M/S-cone-gevoeligheden). Neem de kubuswortel van elke channel om het dynamisch bereik niet-lineair te comprimeren (de stap die perceptuele uniformiteit corrigeert). De tweede matrix transformeert kubuswortel-LMS naar OKLAB's L/a/b-coördinaten. Alle drie de operaties gebruiken de exacte waarden uit de referentie-implementatie van het paper; geen herafleidingen of afronding. De inverse voor OKLCH → hex past deze matrices omgekeerd toe.
OKLAB ↔ OKLCH is Cartesiaans-naar-polair
OKLAB's `a`- en `b`-assen vormen een chroma-vlak loodrecht op de L-as. OKLCH polair-codeert dat vlak: `C = sqrt(a² + b²)` (Euclidische afstand tot grijs), `H = atan2(b, a) * 180 / π` (hoek in graden, wrapped naar 0-360°). De inverse: `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. De polaire vorm verdient de voorkeur boven OKLAB voor design-token-opslag omdat Hue een stabiele as is — Hue roteren cross-fadet niet per ongeluk door grijs, zoals het roteren van `a` of `b` in OKLAB wel kan.
Gamut-detectie via channel-range-check
Een kleur wordt als in-gamut beschouwd voor een doelruimte (sRGB, Display P3, Rec2020) als elke channel na conversie naar de primaria van die ruimte binnen `[-ε, 1 + ε]` valt, waar `ε = 1e-7` om float-precisie-ruis rond grenzen op te vangen. De gamut-badge voor elke ruimte wordt rood wanneer enige channel het bereik overschrijdt. OKLCH is gamut-onbegrensd — `oklch(0.7 0.4 30)` is een geldige coördinaat maar kan sRGB's 256-per-channel byte-ruimte overschrijden. De check draait bij elke toetsaanslag; gecombineerd met Snap to sRGB vangt dit de meest voorkomende adoptievalkuil op (wide-gamut OKLCH die niet correct weergeeft op legacy-schermen).
Snap-to-sRGB binaire chroma-reductie
Snap to sRGB matcht het informatieve gamut-mapping-algoritme in CSS Color 4 §13: houd L en H vast op de huidige waarden, binair-zoek C ∈ [0, currentC] voor de grootste C waarvan de sRGB-conversie in gamut blijft. De zoekactie draait maximaal 30 iteraties (precisie ~10⁻⁹), wat ruim genoeg is voor visuele nauwkeurigheid. L en H bewaren betekent dat de gesnapte kleur leest als dezelfde kleurtoonfamilie op dezelfde helderheid — hij verliest alleen verzadiging. We klippen RGB-channels niet direct omdat dat kleurtoon merkbaar vervormt (vooral in blauwen, die naar paars klippen).

Aanbevolen aanpak voor hex / OKLCH-workflows

Gebruik OKLCH als het canonieke tokenformaat in nieuwe code
Definieer voor elk design system dat in 2025 of later ship merkkleuren en paletramps in OKLCH. De L-as geeft automatisch perceptueel-gelijkmatige ramps; de Chroma-as kan wide-gamut-kleuren adresseren die hex niet kan coderen. Houd een hex-fallback voor oudere browsers via `@supports not (color: oklch(0 0 0))` of build-time PostCSS, maar maak OKLCH de bron van waarheid in je tokenstore. Tailwind v4 en shadcn/ui shippen beide op deze manier; nieuwe projecten kunnen hun voorbeeld volgen zonder wrijving.
Genereer ramps door L te verzetten en C en H constant te houden
De canonieke OKLCH-ramp-constructie: lock C en H, sweep L in gelijke stappen. Een 9-staps ramp `oklch(L 0.15 263)` voor L = 0,1, 0,2, …, 0,9 produceert visueel-gelijkmatige spacing over elke stap. Dit is precies wat Tailwind v4 intern doet. Sweep C niet naast L tenzij je de chromatische intensiteit van de ramp opzettelijk wilt laten variëren (zelden). Laat H niet driften over stappen — zelfs een 5°-drift maakt de ramp warrig.
Matche Tailwind v4's precisie: 3 decimalen L+C, 1 decimaal H
Het standaardpalet van Tailwind v4 publiceert OKLCH-waarden met drie decimalen op L en C en één decimaal op H — `oklch(0.629 0.193 263.4)` voor blue-500. Deze precisie matchen in je eigen tokens betekent dat paste-into-config-workflows identieke waarden produceren aan die welke Tailwind ship, en diff-tools markeren geen spurieuze verschillen. De standaardafronding van de tool volgt deze conventie; kopieer-plakken in een `@theme`-blok is bit-exact.
Draai wide-gamut OKLCH door de Display P3 gamut-check
Als je moderne Apple-hardware target (iPhone, iPad, MacBook vanaf 2017+) of HDR-aware content ship, laten de gamut-badges je C boven het sRGB-plafond duwen om de extra P3-verzadiging te claimen. Door browser toegepaste chroma-compressie voorkomt dat de kleur klippt op sRGB-alleen schermen. Pre-snap niet standaard naar sRGB tenzij je weet dat je hele publiek op legacy-displays zit — dat verliest 30%+ van de verzadiging die P3-hardware kan renderen.
Lever een hex-fallback via @supports voor pre-2023-browsers
Hoewel evergreen-browserondersteuning voor `oklch()` nu 94%+ is, heeft de long tail (IE 11, oude Android Chrome, embedded webviews) nog steeds een fallback nodig. Wikkel tokens in `@supports (color: oklch(0 0 0))` en lever een hex-variant in de alternatieve tak. De Snap to sRGB-uitvoer is precies die fallback — automatisch gegenereerd vanuit de huidige OKLCH-triple met L en H bewaard. Build-time PostCSS-plugins als `postcss-oklab-function` kunnen ook tijdens compilatie de sRGB-benadering inlinen.
Documenteer zowel de OKLCH als de bron-hex in je tokens
Wanneer je een CSS-variabele als `--color-primary: oklch(0.629 0.193 263.4)` ship, voeg een commentaar toe met de bron-hex: `/* source: #3b82f6 (Tailwind blue-500) */`. Zes maanden later, wanneer iemand een verwante schaduw moet afleiden of de waarde tegen een brand-guidelines-PDF moet checken, bewaart de bron-hex het volledige provenance-spoor. OKLCH alleen is betekenisvol maar moeilijker te herkennen op het zicht; de bron-hex is de identifier die de meeste teamgenoten als eerste zullen zoeken.
Gebruik de URL-hash om live kleurbeslissingen te delen
Elke kleurwijziging werkt automatisch de URL-hash bij als `#hex=3b82f6` of `#oklch=...`. Kopieer de URL in een Slack-thread of GitHub-issue en iedereen die hem opent landt op dezelfde kleur met dezelfde OKLCH-triple. Dit is betrouwbaarder dan een OKLCH-string in chat plakken — ontvangers typen soms de decimalen verkeerd of wikkelen de verkeerde precisie — en laat een design-review-thread verwijzen naar een exacte kleur in plaats van "het merkblauw dat we dinsdag bespraken". De hash wordt nooit naar de server verzonden.

Veelgestelde vragen

Wat is een OKLCH-kleur?
OKLCH is de polaire vorm van OKLAB, een perceptueel-uniforme kleurruimte die Björn Ottosson in 2020 publiceerde. Channels zijn Lightness (0-1, ook te schrijven als 0-100%), Chroma (0 tot ongeveer 0,4 afhankelijk van kleurtoon en L, naar boven onbegrensd) en Hue (0-360°, conceptueel identiek aan HSL's hue). Hij is afgeleid van CIE-LAB door te routeren via een LMS cone-response-fase met een kubuswortel-stap. CSS Color 4 voegde de `oklch()`-syntax in 2022 toe. Tailwind v4 standaardiseerde in 2025 op OKLCH voor zijn standaardpalet. Voorbeeld: `oklch(0.629 0.193 263.4)` is Tailwind blue-500.
Is OKLCH beter dan HSL?
Voor design systems, ja. HSL's L (lightness) is geometrisch — afgeleid door het middelen van RGB max en min — en erft sRGB's gammacurve, dus `hsl(60 100% 50%)` (geel) oogt zichtbaar helderder dan `hsl(240 100% 50%)` (blauw) hoewel beide L=50% rapporteren. OKLCH's L is perceptueel, verankerd aan het OKLAB-model uit Ottosson 2020. De praktische winst: een OKLCH-ramp bij uniforme L oogt visueel gelijkmatig over elke kleurtoon; een HSL-ramp heeft handmatig-afgestemde per-kleurtoon-correcties nodig om gelijkmatig te ogen. Daarom migreerde Tailwind v4 zijn standaardpalet van HSL-gebaseerde naar OKLCH-gebaseerde generatie.
Welke browsers ondersteunen oklch()?
Alle evergreen-browsers vanaf medio 2023: Chrome en Edge 111 (maart 2023), Safari 15.4 (maart 2022, de vroegste landing), Firefox 113 (mei 2023). Gecombineerde caniuse-dekking ligt boven 94%. Voor de long tail — IE 11, oude Safari, Android Chrome op legacy-hardware — wikkel je tokens in `@supports (color: oklch(0 0 0))` en lever je een hex- of `hsl()`-fallback in de alternatieve tak. Build-time-tools als PostCSS `postcss-oklab-function` kunnen ook tijdens compilatie een sRGB-benadering naast de OKLCH-waarde inlinen.
Waarom OKLCH gebruiken in Tailwind v4?
Tailwind v4 (uitgebracht in januari 2025) verplaatste zijn standaardpalet van HSL-gebaseerde naar OKLCH-gebaseerde generatie specifiek omdat OKLCH automatisch perceptueel-gelijkmatige ramps geeft. Onder het v3 HSL-systeem hadden `red-500` en `blue-500` zichtbaar verschillende waargenomen gewichten ondanks identieke HSL L%, wat designers dwong individuele stops handmatig bij te stellen; onder v4 ogen beide gebalanceerd omdat ze allebei op dezelfde OKLCH L zitten. OKLCH ontsluit ook Display P3 wide-gamut-kleuren die geen enkele hexcode kan coderen — een Tailwind v4-token als `oklch(0.65 0.25 30)` kan P3-roden adresseren die de sRGB-grenzen overschrijden. De build geeft nog steeds hex-fallbacks voor oudere browsers.
Is OKLCH perceptueel uniform?
Ja — dat is precies de ontwerpintentie. OKLCH erft perceptuele uniformiteit van OKLAB, Björn Ottossons kleurruimte uit 2020 die specifiek is ontworpen om de niet-uniformiteiten in CIE-LAB (de eerdere best-perceptueel-uniforme ruimte) op te lossen. Een vaste stap in de L-channel komt overeen met een vaste stap waargenomen helderheid. Een vaste stap in C komt overeen met een vaste stap waargenomen chroma. CIELAB-benaderingen lopen vast rond zeer verzadigde kleuren; OKLAB en zijn polaire vorm OKLCH blijven nauwkeurig over de hele gamut, en daarom standaardiseerde elke moderne design-system-tool (Tailwind v4, shadcn/ui, Radix Colors v3) erop.
Hoe lees je een OKLCH-waarde?
`oklch(L C H)` — drie getallen, optioneel met `/ A` voor alpha. L is Lightness van 0 (zwart) tot 1 (wit); de getalvorm en de procentvorm zijn equivalent (`0.6` en `60%`). C is Chroma van 0 (grijs) tot ongeveer 0,4 voor de meest verzadigde sRGB-kleuren; er is geen harde bovengrens, wide-gamut-kleuren kunnen dat overschrijden. H is Hue in graden van 0 tot 360, hetzelfde als HSL (0/360 = rood, 120 = groen, 240 = blauw). Voorbeeld: `oklch(0.629 0.193 263.4)` is Tailwind blue-500 — helder, sterk chromatisch, in de blauwe boog.
Wat is het verschil tussen OKLCH en LCH?
Beide zijn polaire vormen (Lightness / Chroma / Hue) van een kleurruimte uit de CIE-LAB-familie. LCH is de polaire vorm van CIE-LAB, de perceptueel-uniforme ruimte uit 1976. OKLCH is de polaire vorm van OKLAB, Ottossons update uit 2020. Het verschil: CIE-LAB's perceptuele uniformiteit loopt vast rond sterk-verzadigde blauwtinten en paarstinten (een gedocumenteerde zwakte in het model), dus een LCH-ramp door verzadigde kleuren oogt subtiel ongelijk. OKLAB lost dit op door de matrices opnieuw af te leiden vanuit een gecorrigeerde LMS cone-response-fase. Beide shippen in CSS Color 4 (`lch()`- en `oklch()`-syntax); geef voor nieuw design-system-werk in 2025 de voorkeur aan OKLCH.
Hoe converteer ik hex naar OKLCH?
De pipeline is: parse hex `#RRGGBB` naar integer sRGB-channels via `parseInt(hex, 16)`, normaliseer naar 0-1, gamma-decodeer naar linear-sRGB via de stukgewijze functie van CSS Color 4 §11.2, vermenigvuldig met de §15.1-matrix om CIE XYZ D65 te krijgen, vermenigvuldig met Ottossons LMS-matrix en neem de kubuswortel van elke channel, vermenigvuldig met Ottossons OKLAB-matrix om L/a/b te krijgen, en daarna Cartesiaans-naar-polair: `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. De volledige pipeline draait in microseconden. Deze tool draait hem live terwijl je typt — `#3b82f6` landt direct als `oklch(0.629 0.193 263.4)`.

Gerelateerde tools

Alle tools bekijken →