Skip to content

Convertisseur HEX vers OKLCH

Convertissez HEX en OKLCH pour les tokens de design Tailwind v4. Sortie perceptuellement uniforme en direct avec alertes de gamut chromatique Display P3. Gratuit, dans le navigateur.

Sans pistage Fonctionne dans le navigateur Gratuit
Toute la conversion de couleurs se fait localement dans votre navigateur. Aucune donnée n'est envoyée à un serveur.
Gamut chromatique: sRGB Display P3 Rec2020
Contraste contre:
AA AA-Lg AAA AAA-Lg · APCA Lc
Simulation de daltonisme (8 types)
Protanopie (aveugle au rouge)
Deutéranopie (aveugle au vert)
Tritanopie (aveugle au bleu)
Achromatopsie (totale)
Protanomalie (faible au rouge)
Deutéranomalie (faible au vert)
Tritanomalie (faible au bleu)
Achromatomalie (partielle)
Teintes claires / Teintes foncées / Tons / Harmonies

Teintes claires

Teintes foncées

Tons

Harmonies

Copier comme code
Référence des couleurs courantes
Revu pour la conformité CSS Color 4 §11.2 + §15.1, la correction des matrices OKLAB Ottosson 2020, la parité de palette Tailwind v4, l'exactitude de la détection de gamut chromatique Display P3 / Rec2020, et la stabilité des allers-retours entre HEX et OKLCH sur les plages de clarté perceptuelle 0-1, chroma 0-0,4 et teinte 0-360°. — Équipe d'ingénierie Go Tools · 27 mai 2026

Qu'est-ce qu'un convertisseur HEX vers OKLCH ?

Un convertisseur hex vers OKLCH est un petit utilitaire qui transforme un code couleur hex (`#3b82f6`) en triplet clarté perceptuelle / chroma / teinte qui encode la même couleur dans l'espace colorimétrique OKLCH (`oklch(0.629 0.193 263.4)`). Les codes hex sont les chaînes laconiques en base 16 que designers et développeurs collent entre Figma, Sketch, Photoshop, les PDF de chartes de marque et les feuilles de style CSS — trois canaux 8 bits empaquetés dans une forme `#RRGGBB` à 6 caractères, ancrée à l'espace colorimétrique sRGB défini par IEC 61966-2-1 en 1996. OKLCH est la forme polaire d'OKLAB, l'espace colorimétrique perceptuellement uniforme de Björn Ottosson de 2020, ajouté au CSS via la syntaxe `oklch()` dans CSS Color 4 (Candidate Recommendation du W3C depuis 2022). Les canaux sont la clarté perceptuelle (0-1, également exprimable en 0-100 %), le chroma (0 jusqu'à environ 0,4 pour les couleurs sRGB les plus saturées, non borné supérieurement pour les couleurs gamut chromatique large) et la teinte (0-360°, le même axe angulaire qu'utilise HSL). La prise en charge dans les navigateurs est arrivée chez tous les evergreens entre mars 2022 (Safari 15.4) et mai 2023 (Firefox 113), avec Chrome 111 au milieu (mars 2023) — la couverture caniuse cumulée dépasse 94 %. Exemple : le blue-500 de Tailwind est `oklch(0.629 0.193 263.4)`.

**Uniformité perceptuelle — pourquoi c'est important.** En OKLCH (et son cousin rectangulaire OKLAB), une distance numérique égale sur le canal L correspond à une distance perçue égale en luminosité — sur chaque teinte, chaque niveau de chroma, chaque région de l'espace colorimétrique. En HSL, des valeurs L égales paraissent inégalement lumineuses sur les teintes parce que HSL hérite des particularités gamma de sRGB : un vert à `hsl(120 100% 50%)` paraît visiblement plus lumineux qu'un bleu à `hsl(240 100% 50%)`, bien que les deux indiquent L=50 %. La cause structurelle est que HSL dérive L géométriquement (moyenne du max et du min de canal dans le sRGB gamma-encodé), tandis qu'OKLCH dérive L d'un modèle perceptuellement ancré qui linéarise d'abord et passe par une étape de réponse cône LMS. La conséquence pratique : maintenir L constant entre les teintes en OKLCH produit une luminosité visuellement équivalente — un vert à `oklch(0.7 0.2 130)` et un bleu à `oklch(0.7 0.2 250)` paraissent également lumineux à l'écran. C'est pourquoi Tailwind v4 a migré sa palette par défaut vers des rampes basées sur OKLCH en 2025 — chaque palier de teinte foncée (50, 100, 200, …, 900, 950) atteint la même différence de clarté perceptuelle perçue, donc les couleurs de marque paraissent cohérentes entre les teintes sans réglage à la main par couleur.

**Tailwind v4 et la révolution des tokens de design.** Tailwind v4 (sorti en janvier 2025) a remplacé sa génération de couleurs basée sur HSL par un système basé sur OKLCH. shadcn/ui a suivi peu après, adoptant OKLCH pour son thème à variables CSS ; Radix Colors v3 l'a également adopté. Pourquoi maintenant : les systèmes de design ont besoin de teintes foncées qui paraissent régulièrement espacées sur toute la palette, et ils ont besoin que cette propriété tienne automatiquement à mesure que la palette grandit. Avec HSL, les designers devaient corriger manuellement chaque palier de couleur — augmenter L de 5 % supplémentaires côté foncé de la rampe bleue pour correspondre au côté foncé de la rampe verte, puis re-corriger quand la marque évoluait. Avec OKLCH, une seule formule (faire varier L de 0,1, maintenir C et H constants) produit automatiquement des rampes cohérentes. Exemple concret : dans Tailwind v3, `red-500` et `blue-500` avaient des poids perçus visiblement différents bien que leur L% HSL soit identique ; dans v4, `red-500` et `blue-500` paraissent équilibrés parce que les deux se trouvent à la même clarté perceptuelle OKLCH. C'est important pour l'accessibilité (un contraste cohérent contre des arrière-plans partagés signifie que les états de composant paraissent uniformes sur la palette), la cohérence de marque (la hiérarchie visuelle tient sur les palettes — un bouton `primary` et un bouton `accent` à la même L paraissent au même niveau hiérarchique) et l'ergonomie développeur (un modèle mental au lieu de dizaines d'exceptions ajustées à la main enfouies dans la spec des tokens de design).

**Implications gamut chromatique large.** OKLCH est non borné — il peut représenter des couleurs hors de sRGB, y compris tout ce que Display P3 et Rec2020 peuvent reproduire. Cela en fait le choix naturel pour les écrans modernes gamut chromatique large. La plupart des appareils Apple depuis 2017 (iPhone 7 et suivants, MacBook Pro 2016 et suivants, chaque iPad Pro) restituent Display P3 nativement, et de nombreux appareils Android modernes et écrans de portables le font aussi. Le compromis : tout triplet OKLCH ne correspond pas à une couleur sRGB valide. L'outil montre trois badges de gamut chromatique — sRGB, Display P3, Rec2020 — donc vous pouvez voir immédiatement si l'OKLCH actuel s'affichera correctement sur une cible donnée. Quand la couleur est sRGB uniquement, le bouton **Snap to sRGB** utilise la réduction binaire du chroma (selon l'algorithme informatif de cartographie de gamut chromatique de CSS Color 4 §13) pour ramener la couleur dans le gamut chromatique tout en préservant L et H — vous donnant un repli hex que vous pouvez livrer via `@supports not (color: oklch(0 0 0))` aux côtés de la valeur OKLCH originale pour les clients gamut chromatique plus large.

**Les mathématiques de la conversion HEX → OKLCH.** Le pipeline est bien défini et ancré sur deux sources primaires : W3C CSS Color 4 pour les étapes sRGB et XYZ, Ottosson 2020 pour l'étape OKLAB. Étape un : analyser `#RRGGBB` en trois canaux sRGB entiers 8 bits via `parseInt(hex.slice(1, 3), 16)` par canal. Étape deux : normaliser chaque canal à 0-1 en divisant par 255. Étape trois : décoder le gamma vers linear-sRGB via la fonction par morceaux CSS Color 4 §11.2 (`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`). Étape quatre : multiplier par la matrice 3×3 §15.1 pour obtenir les coordonnées CIE XYZ D65. Étape cinq : multiplier par la matrice LMS d'Ottosson (depuis son implémentation de référence de 2020) et prendre la racine cubique de chaque canal. Étape six : multiplier par la matrice OKLAB d'Ottosson pour obtenir L / a / b. Étape sept : cartésien-vers-polaire — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, enrouler H dans 0-360°. Le pipeline complet s'exécute en microsecondes — chaque frappe re-rend la sortie OKLCH instantanément sans débounce.

Le flux HEX → OKLCH de cet outil est une direction d'une famille de 5 branches qui partagent toutes le même convertisseur de couleurs unifié sous-jacent. Le convertisseur de couleurs unifié dédié est le hub — il affiche les 9 formats simultanément modifiables et c'est le bon outil quand votre flux a besoin de plus que hex et OKLCH. Les branches à sens unique ciblent des intentions de recherche Google spécifiques : le convertisseur hex vers RGB pour la direction canvas-et-matériel, le convertisseur RGB vers hex pour l'inverse, le convertisseur hex vers HSL pour l'espace designer-cylindrique hérité encore utilisé dans de nombreuses bases de code Tailwind v3, et le convertisseur hex vers CMYK pour les approximations de préparation à l'impression. Les cinq branches et le hub partagent la même source de vérité OKLCH en interne et les mêmes matrices Ottosson 2020, donc les résultats sont garantis identiques sur toute la famille. Chaque conversion s'exécute localement dans votre navigateur — vos codes hex ne sont jamais téléversés, jamais journalisés, et zéro requête réseau ne se déclenche pendant que vous saisissez. Vérifiez dans DevTools. Pour aller plus loin sur les raisons pour lesquelles OKLCH est devenu le standard des systèmes de design en 2024–2026, consultez notre guide compagnon : L'espace colorimétrique OKLCH expliqué — pourquoi Tailwind v4 l'a adopté.

// 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)

Fonctionnalités clés

Sortie perceptuellement uniforme sur toutes les teintes

Le canal L d'OKLCH est ancré au modèle perceptuel OKLAB (Ottosson 2020), donc chaque pas de L paraît être le même changement de luminosité sur toutes les teintes — un vert à `oklch(0.7 0.2 130)` et un bleu à `oklch(0.7 0.2 250)` se lisent comme également lumineux à l'écran. C'est la propriété structurelle qui permet à Tailwind v4 de générer automatiquement des rampes visuellement régulières sans réglage à la main par couleur, la même propriété que la rampe HSL équivalente ne peut garantir parce que HSL hérite des particularités gamma de sRGB.

Prêt pour Tailwind v4 — déposez dans les blocs @theme

La sortie OKLCH utilise la forme séparée par espaces de CSS Color 4 (`oklch(0.629 0.193 263.4)`) — la syntaxe exacte que Tailwind v4 attend dans un bloc `@theme` sous la forme `--color-primary: oklch(0.629 0.193 263.4);`. La précision de L correspond à la précision de palette publiée par Tailwind (trois décimales sur L et C, une décimale en degrés sur H), donc un flux coller-dans-config produit des tokens identiques à ceux que Tailwind livre par défaut. Associez avec l'extrait Tailwind v4 de la section Copier comme code pour la ligne de token complète.

Badges de gamut chromatique Display P3 + Rec2020

Trois badges en direct (sRGB, Display P3, Rec2020) signalent si le triplet OKLCH actuel tient dans la plage reproductible de chaque espace. Utile parce qu'OKLCH est non borné — de nombreuses couleurs à chroma élevé dépassent sRGB mais tiennent dans P3, que la plupart des appareils Apple depuis 2017 peuvent restituer nativement. Les badges deviennent rouges en cas de hors gamut, donc vous pouvez décider de garder la valeur gamut chromatique large pour les écrans modernes ou de ramener vers sRGB pour une compatibilité universelle. La vérification de plage de canal s'exécute à chaque frappe.

Snap to sRGB pour la compatibilité héritée

Le bouton Snap to sRGB exécute la réduction binaire du chroma (algorithme informatif CSS Color 4 §13) : maintenez L et H fixes, cherchez C vers le bas jusqu'à ce que la conversion sRGB résultante reste dans le gamut chromatique. La recherche se termine en ~30 itérations à une précision sous-pixel. Préserver L et H signifie que la couleur ramenée se lit comme la même famille de teinte à la même luminosité — elle perd juste en saturation, ce qui est le compromis le moins jarrant visuellement. Le hex ramené s'associe à l'OKLCH original via `@supports not (color: oklch(0 0 0))` pour un repli en couches.

Conversion instantanée par frappe

Il n'y a pas de bouton Convertir. Tapez un seul caractère dans le champ HEX et le champ OKLCH se met à jour dans la même image d'animation. La représentation canonique interne est le triplet OKLCH lui-même, donc éditer OKLCH directement est tout aussi rapide — le curseur reste là où vous l'avez placé, seuls les autres champs de format sont re-rendus. Les mathématiques de conversion (sRGB → linear → XYZ → LMS → OKLAB → polaire) s'exécutent en microsecondes ; pas de débounce, pas de latence, pas de reflow visible.

Exemple chiffré via le pipeline W3C + Ottosson 2020

La section d'exemple de code livre une implémentation JavaScript fonctionnelle du pipeline HEX → OKLCH complet utilisant les matrices et la fonction gamma exactes publiées dans W3C CSS Color 4 (§11.2 gamma par morceaux, §15.1 matrice linear-sRGB → XYZ D65) et l'implémentation de référence OKLAB de Björn Ottosson de 2020. Collez dans un REPL Node et vérifiez que `#3b82f6` produit `oklch(0.629 0.193 263.4)`. Chaque valeur de matrice est copiée-collée depuis sa source primaire — aucune redérivation ni arrondi.

Bidirectionnel avec HSL / RGB / HEX dans le hub unifié

Bien que cette branche cible HEX → OKLCH spécifiquement, la même page expose aussi les huit autres champs de format — RGB pour le matériel, HSL pour le CSS hérité, OKLAB pour les mathématiques de palette, HSV/HWB pour les UI de sélecteur, CMYK pour l'impression et la couleur CSS nommée la plus proche. La source de vérité OKLCH interne signifie que chaque champ est stable au bit près sur les allers-retours : HEX → OKLCH → HSL → HEX récupère le hex original. Cliquez dans n'importe quel champ pour l'éditer directement et regardez les autres se mettre à jour.

Résumé de la prise en charge navigateur intégré

L'outil expose les points de données canoniques de prise en charge navigateur là où c'est pertinent : Chrome et Edge 111 (mars 2023), Safari 15.4 (mars 2022 — le plus précoce), Firefox 113 (mai 2023), couverture caniuse cumulée supérieure à 94 %. Pour les clients plus anciens, enveloppez les tokens dans `@supports (color: oklch(0 0 0))` et fournissez un repli hex dans la branche alternative. La sortie de Snap to sRGB est exactement ce repli, généré automatiquement depuis le triplet OKLCH actuel — aucun réglage manuel de chroma nécessaire.

100 % dans le navigateur — pas de téléversement, pas de pistage

Tout le parsing hex, la conversion OKLCH, la détection de gamut chromatique, le scoring de contraste et la génération de palette s'exécutent localement dans votre navigateur. Vos codes hex ne sont jamais transmis, jamais journalisés sur un serveur, jamais analysés. Zéro requête réseau pendant que vous saisissez — vérifiez dans DevTools. Sûr pour les palettes de marque non annoncées, les tokens de design internes pour des produits non sortis, les maquettes en brouillon sous NDA et tout autre travail de couleur confidentiel où la valeur ne peut pas fuiter.

Alternatives au convertisseur HEX vers OKLCH

OKLCH.com

outil navigateur

Outil dédié OKLCH magnifiquement construit par Andrey Sitnik (auteur du polyfill postcss-oklab-function et d'Autoprefixer). Meilleur de sa catégorie pour l'exploration OKLCH pure avec un sélecteur conscient du gamut chromatique large, une visualisation consciente de P3 et la génération de palette. Ne couvre pas la conversion HEX/RGB/HSL/CMYK comme sorties primaires — focalisé sur OKLCH seul. Tournez-vous vers OKLCH.com quand vous faites du design OKLCH approfondi ; tournez-vous vers cet outil quand vous avez aussi besoin de conversion inter-espace et des fonctionnalités gamut chromatique / contraste / CVD.

Documentation de la palette Tailwind v4

référence documentation

La doc Tailwind v4 publie la palette par défaut complète en OKLCH aux côtés des équivalents hex. Idéale pour chercher une teinte Tailwind exacte (`blue-500` → `oklch(0.629 0.193 263.4)`) ou faire correspondre des couleurs personnalisées au poids visuel d'une teinte Tailwind. Non interactif — pas de conversion de codes hex arbitraires. Cet outil couvre la même précision OKLCH et fonctionne pour n'importe quel hex, pas seulement les 200+ valeurs par défaut Tailwind.

ColorJS.io Playground

outil navigateur

ColorJS.io est la bibliothèque de couleurs CSS faisant autorité de Lea Verou et Chris Lilley ; le playground expose le graphe de conversion complet (HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98). Mathématiques profondément correctes, idéal pour le travail de couleur au niveau spec. L'UI est tournée développeur (pas designer) et manque les fonctionnalités contraste / CVD / palette. Associez avec cet outil : utilisez ColorJS.io pour les mathématiques que vous ne pouvez vérifier autrement, utilisez cet outil pour les flux actifs.

Générateur de thèmes shadcn/ui

outil navigateur

Le générateur de thèmes shadcn de Vercel produit des thèmes à variables CSS OKLCH prêts à coller pour les projets shadcn/ui. Idéal pour la génération de thème de bout en bout quand le livrable est un fichier de config shadcn. N'expose pas les valeurs OKLCH intermédiaires pour des codes hex arbitraires — focalisé sur le flux de thème complet. Utilisez le générateur shadcn quand vous construisez un thème shadcn ; utilisez cet outil quand vous avez besoin de l'OKLCH de n'importe quelle couleur individuelle.

ColorHexa

outil navigateur

Pages SEO par couleur de longue date avec métadonnées approfondies. A récemment ajouté la prise en charge OKLCH aux côtés de HEX/RGB/HSL/CMYK. UI datée (début des années 2010), pas de détection gamut chromatique large, pas de contraste APCA. Forte pour la découverte SEO d'un hex spécifique via Google ; plus faible pour les flux de conversion actifs où l'UX à champs unifiés et les fonctionnalités gamut chromatique / contraste comptent. Cet outil l'emporte sur chaque axe de flux actif.

Sélecteur de couleur DevTools du navigateur

fonctionnalité navigateur intégrée

Les DevTools de Chrome, Firefox et Safari livrent tous un sélecteur de couleur qui bascule entre HEX, RGB, HSL, HWB et OKLCH en ligne quand vous cliquez sur un échantillon de couleur dans le panneau CSS. Gratuit, sans installation, toujours disponible. Manque les badges de gamut chromatique, le scoring de contraste, la simulation de daltonisme et l'export de code pour les plateformes non web (SwiftUI, Compose). Tournez-vous vers les DevTools quand vous déboguez déjà du CSS ; tournez-vous vers cet outil quand vous avez besoin d'une sortie inter-plateforme ou des vérifications approfondies.

CLI Culori

bibliothèque en ligne de commande

Culori est la bibliothèque de couleurs JavaScript la plus complète consciente d'OKLCH ; son CLI gère la conversion HEX → OKLCH en une ligne (`culori convert '#3b82f6' --to oklch`). Excellent pour les scripts CI et la migration de tokens en lot. Pas de sélecteur visuel ni de badges de gamut chromatique. Utilisez le CLI Culori pour l'automatisation ; utilisez cet outil pour le travail interactif sur une couleur unique et le retour visuel immédiat.

Exemples HEX vers OKLCH

Migrer une palette HSL Tailwind 3 → tokens OKLCH v4

#3b82f6

Sortie OKLCH : `oklch(0.629 0.193 263.4)`. Le flux canonique de migration vers Tailwind v4 : définissez la couleur de marque une seule fois dans votre bloc `@theme` sous la forme `--color-primary: oklch(0.629 0.193 263.4)`, puis composez les teintes claires en montant L (`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`) et les teintes foncées en descendant L (`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`). La teinte reste verrouillée à 263,4°, le chroma s'ancre près de 0,19, la clarté perceptuelle est le seul axe qui balaie — une rampe à une dimension qui se lit comme visuellement régulière sur toute l'échelle, ce que la rampe HSL équivalente ne peut garantir.

Migration de tokens de design avec teintes foncées perceptuellement uniformes

#FF5733

Sortie OKLCH : environ `oklch(0.66 0.18 28)`. Pour construire une rampe de 5 teintes foncées à partir de cet orange de marque, maintenez C = 0,18 et H = 28 constants et faites varier L sur 0,3, 0,45, 0,6, 0,75, 0,9 — produisant `oklch(0.3 0.18 28)` jusqu'à `oklch(0.9 0.18 28)`. Chaque paire adjacente paraît être le même saut visuel de luminosité, parce que le L d'OKLCH est ancré au modèle perceptuel OKLAB (Ottosson 2020) plutôt qu'au L géométrique de HSL enchevêtré par le gamma. Le chroma peut tranquillement écrêter vers sRGB aux extrêmes ; les badges de gamut chromatique de l'outil signalent exactement quels paliers nécessitent attention.

OKLCH gamut chromatique large → repli sRGB pour les sites Tailwind v3

#FF1744

Sortie OKLCH : environ `oklch(0.62 0.27 26)`. Un rouge à chroma élevé comme celui-ci dépasse le cube sRGB — le badge gamut chromatique **sRGB** s'allume en rouge, le badge **Display P3** confirme qu'il tient dans P3, et Rec2020 le couvre également. Sur un moniteur standard 24 bits, il rend comme une approximation désaturée ; sur un écran Display P3 (la plupart des appareils Apple depuis 2017), il rend saturé. Cliquez sur **Snap to sRGB** pour exécuter l'algorithme de réduction binaire du chroma (CSS Color 4 §13 informatif) — L et H restent verrouillés pendant que C diminue jusqu'à ce que la couleur tienne, produisant un repli hex adapté à une base de code Tailwind v3 qui utilise encore des tokens hex 8 bits.

Migration de thème shadcn/ui

#0f172a

Sortie OKLCH : environ `oklch(0.21 0.04 264.7)`. shadcn/ui a migré son thème à variables CSS vers OKLCH peu après l'arrivée de Tailwind v4, et `#0f172a` (le slate-900 de Tailwind) est l'arrière-plan canonique du mode sombre. L'outil reproduit la valeur OKLCH publiée par shadcn pour le même hex, donc vous pouvez vérifier qu'un portage de thème communautaire correspond à la définition amont. Associez avec la ligne de contraste pour confirmer que le premier plan du mode sombre (blanc ou quasi-blanc) passe encore WCAG AA contre cet arrière-plan — `oklch(0.21 ...)` contre `oklch(1 0 0)` affiche un ratio confortable de 16:1.

Construire une paire clair/sombre Tailwind v4 depuis un hex de marque

#3b82f6

Sortie OKLCH : `oklch(0.629 0.193 263.4)`. Pour dériver une paire clair/sombre coordonnée pour un thème, pivotez uniquement le canal L tout en maintenant C et H constants : la primaire en mode clair devient `oklch(0.7 0.15 263)` (légèrement plus lumineuse, légèrement moins chromatique pour éviter la fatigue oculaire sur les fonds blancs), la primaire en mode sombre devient `oklch(0.5 0.18 263)` (légèrement plus foncée, légèrement plus chromatique pour conserver la saillance sur les fonds sombres). Les deux variantes se lisent comme la même identité de marque parce que la teinte est verrouillée ; le décalage perceptuel de L équilibre la lisibilité dans les deux modes sans réglage manuel par canal RGB.

Conversions HEX → OKLCH courantes (Tailwind v4)

Table de référence de 10 teintes médianes populaires de la palette par défaut Tailwind v4 avec leurs équivalents HEX et OKLCH. Les valeurs correspondent à la précision de palette publiée par Tailwind v4 (trois décimales sur L et C, entier ou une décimale sur H).

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

Le slate-500 par défaut de Tailwind CSS — le gris froid neutre utilisé pour le texte courant, les surfaces secondaires et les éléments d'UI désaccentués. Un chroma bas (0,04) le maintient visuellement neutre.

#64748b oklch(0.55 0.04 257)

slate est la rampe neutre canonique pour les thèmes adaptés au mode sombre — chaque teinte slate se trouve à un chroma très bas pour qu'elles se lisent comme du gris plutôt que teinté de bleu.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

Le gray-500 par défaut de Tailwind CSS — le contrepoint vraiment neutre de slate. Chroma légèrement plus bas que slate (0,03 contre 0,04) pour une apparence plus achromatique.

#6b7280 oklch(0.55 0.03 258)

gray et slate se trouvent à un L presque identique (0,55) — la clarté perceptuelle est appariée, seule la petite différence de chroma les distingue.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

Le red-500 par défaut de Tailwind CSS — le rouge canonique d'action destructive / erreur. Un chroma élevé (0,21) le maintient saillant contre les arrière-plans neutres.

#ef4444 oklch(0.64 0.21 25)

red-500 se trouve à L=0,64, correspondant au L=0,63 de blue-500 — les rampes v4 sont perceptuellement équilibrées sur les teintes, contrairement à la palette basée sur HSL de la v3.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

L'orange-500 par défaut de Tailwind CSS — la teinte accent chaude et CTA. Se trouve entre rouge et ambre sur le cercle des teintes (42°).

#f97316 oklch(0.71 0.19 42)

Le L plus élevé d'orange-500 (0,71) contre L (0,64) de red-500 est intentionnel — les jaunes et oranges paraissent lumineux à une clarté perceptuelle plus basse que les rouges.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

L'amber-500 par défaut de Tailwind CSS — la teinte avertissement / attention, entre orange et jaune sur la roue.

#f59e0b oklch(0.76 0.16 70)

amber-500 atteint le L le plus élevé (0,76) de n'importe quelle couleur Tailwind de niveau 500 — les jaunes ont naturellement besoin d'un L plus élevé pour apparaître visuellement comme « mi-ton ».

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

Le green-500 par défaut de Tailwind CSS — la teinte succès / confirmation. Se trouve à 149° sur la roue des teintes, dans la région cyan-vert.

#22c55e oklch(0.72 0.19 149)

green-500 à L=0,72 est légèrement plus lumineux que red-500 à L=0,64 — cela correspond à la réalité perceptuelle (les verts paraissent lumineux) et donne à la palette un poids visuel équilibré.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

Le teal-500 par défaut de Tailwind CSS — la teinte accent froide entre vert et cyan. Chroma plus bas que green-500 parce que les teals à chroma élevé dépassent facilement sRGB.

#14b8a6 oklch(0.7 0.13 184)

Le H=184° de teal-500 se trouve juste après le cyan (180°) — le cyan pur en OKLCH est difficile à exprimer en sRGB sans écrêtage de chroma ; teal est le compromis pratique.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

Le blue-500 par défaut de Tailwind CSS — le « bleu web » canonique des années 2020, la couleur d'ancrage de marque pour la palette v4 et le thème par défaut de shadcn/ui.

#3b82f6 oklch(0.63 0.19 263)

blue-500 est la couleur de référence la plus souvent utilisée comme point de départ de migration OKLCH Tailwind v4 — collez #3b82f6 ici pour vérifier la conversion contre la valeur publiée.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

L'indigo-500 par défaut de Tailwind CSS — le compagnon accent froid de blue, se trouvant à 277° (vers le violet). Un chroma élevé (0,21) lui donne de la saillance.

#6366f1 oklch(0.59 0.21 277)

indigo-500 se trouve à un L plus bas que blue-500 (0,59 contre 0,63) — la teinte plus profonde absorbe plus de luminosité apparente, et la rampe v4 en tient compte perceptuellement.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

Le violet-500 par défaut de Tailwind CSS — la teinte accent violet à 295°. Le chroma le plus élevé (0,24) de n'importe quelle couleur Tailwind de niveau 500, souvent utilisée pour le branding de produits IA / créatifs.

#8b5cf6 oklch(0.6 0.24 295)

Le C=0,24 élevé de violet-500 le place près du plafond du gamut sRGB — poussez beaucoup plus haut et il bascule dans le territoire gamut chromatique large P3 uniquement.

Besoin du sélecteur de couleur complet avec RGB, HSL, CMYK, alertes de gamut chromatique et export de code ? Essayez le convertisseur de couleurs unifié — chaque format simultanément modifiable.

Comment utiliser le convertisseur HEX vers OKLCH

  1. 1

    Collez un code hex dans le champ HEX

    Déposez n'importe quelle valeur hex dans l'entrée HEX — avec ou sans `#` initial, en raccourci à 3 chiffres (`#F73`), en forme pleine à 6 chiffres (`#3b82f6`), en raccourci alpha à 4 chiffres (`#F738`) ou en forme pleine alpha à 8 chiffres (`#FF573380`). Le parseur normalise les cinq formes d'entrée vers la même couleur interne avant de dériver OKLCH. La casse n'a pas d'importance (`#3b82f6` et `#3B82F6` s'analysent à l'identique). Des caractères invalides ou un nombre de chiffres incorrect produisent une discrète erreur en ligne ; un hex valide met à jour chaque autre champ de format en temps réel, y compris OKLCH.

  2. 2

    Lisez le triplet OKLCH dans le champ OKLCH

    Le champ OKLCH affiche la valeur dans la forme moderne de CSS Color 4 : `oklch(0.629 0.193 263.4)` pour une couleur opaque, `oklch(0.629 0.193 263.4 / 0.5)` pour une couleur portant de l'alpha. L est arrondi à trois décimales (correspond à la précision publiée par Tailwind v4), C à trois décimales, H à une décimale en degrés. La source de vérité OKLCH interne signifie que la précision flottante sous-jacente est préservée sur chaque autre champ — les allers-retours vers hex restent stables au bit près, contrairement aux convertisseurs hérités qui pivotent par HSL et dérivent d'un ou deux degrés par aller-retour.

  3. 3

    Cliquez sur Copier pour saisir la chaîne OKLCH

    Chaque carte de format possède un bouton Copier à droite. Un clic et la valeur arrive dans votre presse-papiers — le label du bouton bascule brièvement sur « Copié ! » pour vous le signaler. La chaîne copiée est la syntaxe canonique CSS Color 4 (`oklch(0.629 0.193 263.4)`), prête à déposer dans un bloc `@theme` de Tailwind v4 ou une définition de variable CSS shadcn/ui. Pour une sortie spécifique à une plateforme (propriété personnalisée CSS, token Tailwind v4, SwiftUI, Compose, Flutter), utilisez la section Copier comme code sous le sélecteur — ces extraits émettent le format que chaque plateforme attend nativement.

  4. 4

    Vérifiez les badges de gamut chromatique Display P3 / Rec2020

    Trois badges de gamut chromatique (sRGB, Display P3, Rec2020) indiquent si la couleur actuelle tient dans la plage reproductible de chaque espace. Si le badge sRGB devient rouge mais que P3 est vert, la couleur est un OKLCH gamut chromatique large qui rendra saturé sur du matériel Apple (iPhone, iPad, MacBook depuis 2017+) mais se désaturera sur un moniteur 24 bits hérité. Le bouton **Snap to sRGB** utilise la réduction binaire du chroma (algorithme informatif CSS Color 4 §13) pour ramener la couleur dans sRGB tout en préservant L et H, produisant un repli hex que vous pouvez livrer via `@supports not (color: oklch(0 0 0))`.

  5. 5

    Aussi visibles : RGB, HSL, OKLAB, HSV, HWB, CMYK, couleur nommée

    Le même hex que vous collez illumine également les huit autres champs de format — RGB pour les appels canvas et le matériel, HSL pour les variables CSS héritées, OKLAB pour les mathématiques de palette et les matrices de daltonisme, HSV et HWB pour les flux de sélecteur de couleur designer, CMYK pour les estimations d'impression et la couleur CSS nommée la plus proche pour la prose de documentation. Vous n'êtes jamais enfermé dans hex → OKLCH seulement. Le sélecteur (carré SL + curseur de teinte + curseur alpha) pilote les neuf simultanément, et sur les navigateurs basés sur Chromium, le bouton EyeDropper échantillonne n'importe quel pixel à l'écran, y compris hors du navigateur.

Erreurs courantes HEX / OKLCH

Lire le chroma OKLCH comme la saturation HSL

Le chroma OKLCH est non borné (0 à ~0,4 pour les couleurs tenant dans sRGB, plus haut pour gamut chromatique large) — il N'est PAS un pourcentage de saturation 0-100 % comme le S de HSL. Supposer que C=0,3 signifie « 30 % saturé » se trompe d'échelle : 0,3 est très chromatique, près du plafond sRGB pour certaines teintes et bien au-delà pour d'autres. Le C maximum varie selon L et H — un vert à L=0,7 supporte un C bien plus élevé qu'un bleu à L=0,3. Traitez C comme une distance absolue au gris, pas comme un pourcentage relatif.

✗ Incorrect
Régler C OKLCH = 0,3 en attendant « 30 % de saturation » :
oklch(0.7 0.3 250) → peut dépasser le gamut sRGB pour les bleus
La couleur gamut chromatique large rend désaturée sur les écrans hérités.
✓ Correct
Traitez C comme un chroma absolu, vérifiez les badges de gamut chromatique :
oklch(0.7 0.15 250) → confortablement dans sRGB pour cette paire L+H
Utilisez les badges pour trouver le C max qui tient dans le gamut chromatique cible.

Traiter le L OKLCH comme le L HSL

Les deux espaces rapportent la clarté comme un axe 0-1 (ou 0-100 %), mais ils mesurent des choses différentes. Le L de HSL est géométrique — dérivé d'une moyenne max/min RGB dans sRGB gamma-encodé. Le L d'OKLCH est perceptuel — ancré au modèle OKLAB. Porter une palette basée sur HSL comme `oklch(L%, C, H)` et s'attendre à une luminosité correspondante produit des résultats inégaux parce que la relation L entre les deux espaces est non linéaire. Pour les couleurs mi-tons, OKLCH L = 0,6 correspond approximativement à HSL L = 50 %, mais la courbe dérive aux extrêmes foncés et clairs.

✗ Incorrect
Copier les pourcentages L HSL directement dans OKLCH :
hsl(220 50% 30%) porté comme oklch(0.30 0.10 220)
Les deux couleurs paraissent notablement différentes en luminosité.
✓ Correct
Re-dérivez OKLCH depuis le hex original, ne portez pas depuis HSL :
source hex → conversion OKLCH → oklch(0.34 0.08 254)
Le L perceptuel reste correct ; la palette paraît régulière.

Oublier que l'OKLCH gamut chromatique large ne s'affichera pas en sRGB

OKLCH est non borné — vous pouvez écrire `oklch(0.7 0.4 30)` et la syntaxe est valide, mais le chroma dépasse ce que l'espace d'octet 256-par-canal de sRGB peut encoder. Sur un moniteur sRGB cette couleur est tronquée vers l'approximation in-gamut la plus proche (généralement une version désaturée). Sur un moniteur Display P3 elle rend correctement. Livrer un OKLCH gamut chromatique large sans vérifier les badges de gamut chromatique produit une couleur qui paraît différente sur différents écrans — un bug de cohérence inter-plateforme subtil mais réel.

✗ Incorrect
Livrer oklch(0.7 0.4 30) sans vérifier le gamut sRGB :
Les écrans P3 rendent rouge saturé ; les écrans sRGB rendent désaturé
La couleur de marque paraît incohérente sur le matériel utilisateur.
✓ Correct
Vérifiez le badge de gamut sRGB, Snap to sRGB si nécessaire, en couches avec @supports :
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
Le matériel P3 obtient la valeur gamut chromatique large ; le matériel sRGB obtient le repli ramené.

Prise en charge navigateur manquante pour oklch()

Le parsing natif d'`oklch()` est arrivé dans Chrome et Edge 111 (mars 2023), Safari 15.4 (mars 2022) et Firefox 113 (mai 2023). La couverture caniuse cumulée est 94 %+, mais les 6 % restants incluent IE 11, vieux Safari sur iOS 15.3 ou antérieur, vieux Android Chrome et webviews intégrées. Livrer `oklch()` sans repli vers cette longue traîne rend comme la valeur CSS `inherit` ou échoue entièrement. Détectez toujours la fonctionnalité avec `@supports` pour les sites de production à large audience.

✗ Incorrect
Définir la couleur de marque en OKLCH seulement :
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11 et vieux iOS Safari ne rendent aucune couleur du tout.
✓ Correct
Mettez en couches avec @supports pour un repli gracieux :
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
Les navigateurs modernes obtiennent OKLCH ; les navigateurs hérités obtiennent le repli hex.

Confondre OKLCH et LCH (forme polaire CIE-LAB)

CSS Color 4 livre à la fois `oklch()` et `lch()`. Ils semblent identiques en forme (L / C / H) mais utilisent des espaces sous-jacents différents : `lch()` est la forme polaire de CIE-LAB (1976), `oklch()` est la forme polaire d'OKLAB (Ottosson 2020). Les deux NE sont PAS interchangeables — `lch(60% 50 240)` et `oklch(0.6 0.15 240)` décrivent des couleurs différentes. L'uniformité perceptuelle de CIE-LAB se casse autour des bleus saturés, c'est pourquoi Ottosson a redérivé OKLAB. Pour les nouveaux travaux de système de design, préférez `oklch()` à `lch()`.

✗ Incorrect
Substituer lch() à oklch() en attendant le même résultat :
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — couleurs entièrement différentes
Copié-collé d'un espace à l'autre, la valeur est silencieusement fausse.
✓ Correct
Choisissez un espace et restez-y :
oklch(0.629 0.193 263.4) pour les systèmes de design modernes
ou lch(60% 50 240) — mais ne changez pas le nom de fonction sans reconvertir

Qui utilise HEX vers OKLCH

Développeurs front-end migrant vers les tokens OKLCH de Tailwind v4
Tailwind v4 s'est standardisé sur OKLCH pour sa palette par défaut en janvier 2025. Migrer une base de code v3 avec des couleurs de marque basées sur hex signifie convertir chaque hex en OKLCH et déposer le résultat dans le nouveau bloc `@theme`. Collez chaque hex ici, copiez la valeur `oklch()`, définissez `--color-primary: oklch(0.629 0.193 263.4)` et compagnie. Les badges de gamut chromatique en direct signalent toute couleur qui dépasse sRGB pour que vous puissiez décider de garder la valeur gamut chromatique large pour les utilisateurs Display P3 ou de ramener vers sRGB.
Auteurs de thèmes shadcn/ui construisant des palettes personnalisées
Le thème à variables CSS de shadcn/ui utilise OKLCH pour chaque token (`--background`, `--foreground`, `--primary`, etc.). Les thèmes personnalisés dérivent d'un hex de marque de base en convertissant vers OKLCH puis en faisant varier L pour les variantes claires/sombres. Collez le hex de marque, lisez le triplet OKLCH, construisez le reste du thème en faisant varier L tout en maintenant C et H fixes. Correspond exactement au flux canonique shadcn.
Auteurs de systèmes de design générant des rampes perceptuellement régulières
Générez une rampe 50/100/200/.../900 en faisant varier le canal L par incréments OKLCH égaux tout en maintenant C et H fixes. L'écart visuel entre paliers adjacents paraît identique sur chaque teinte — ce dont une palette de couleurs de marque a réellement besoin. Tailwind v4 utilise exactement cette construction pour sa palette par défaut, et shadcn/ui la reflète. Collez chaque hex de marque, lisez l'OKLCH, générez la rampe algorithmiquement ou via le panneau Teintes claires / Teintes foncées / Tons sous le sélecteur.
Ingénieurs d'accessibilité vérifiant le contraste en espace OKLCH
Le contraste WCAG 2.1 et APCA rapportent tous deux contre la couleur sRGB résolue, pas le triplet OKLCH — mais connaître le L OKLCH d'une couleur de marque rend le réglage du contraste prévisible : augmentez L de 0,1 pour passer AA contre le blanc, baissez L de 0,1 pour passer AA contre le noir. La vue simultanée OKLCH + WCAG + APCA rend la relation visible. Collez le hex de marque, regardez les badges de contraste, ajustez L en OKLCH (plus prévisible qu'en HSL) jusqu'à ce que la paire passe les deux métriques.
Développeurs web construisant des tokens de couleur gamut chromatique large pour les écrans modernes
La plupart des appareils Apple depuis 2017 (et de nombreux appareils Android modernes) restituent Display P3 nativement. Définir les couleurs d'accent de marque en OKLCH vous permet d'adresser des rouges et des verts saturés P3 uniquement qu'aucun code hex ne peut encoder. Collez un hex existant pour lire son OKLCH, puis poussez le canal C au-dessus du plafond sRGB pour revendiquer la saturation P3 supplémentaire. Les badges de gamut chromatique confirment que la nouvelle valeur tient dans P3 (et se rabat gracieusement sur les écrans sRGB uniquement via la compression de chroma du navigateur).
Formateurs enseignant la clarté perceptuelle vs géométrique
La vue simultanée OKLCH + HSL rend évidente la différence entre clarté perceptuelle et géométrique. Collez un vert saturé et un bleu saturé à la même HSL L=50 % ; les valeurs L OKLCH diffèrent notablement parce qu'OKLCH mesure la luminosité effectivement perçue. Faites glisser le curseur de teinte HSL et regardez L OKLCH osciller pendant que vous maintenez L HSL constant — la courbe est la particularité gamma visualisée. Une démonstration prête pour la salle de classe de pourquoi les systèmes de design ont migré vers OKLCH.
Mainteneurs open source modernisant la documentation des tokens
Les documentations de systèmes de design plus anciens listent typiquement les couleurs de marque uniquement comme codes hex. Moderniser vers OKLCH signifie montrer la même couleur dans les deux espaces — le hex pour la compatibilité des blocs de code, l'OKLCH pour le tableau spec et la définition de token moderne. Collez chaque hex, copiez la sortie OKLCH, mettez à jour la doc. Le hash d'URL partageable permet aussi aux contributeurs de lier à la couleur exacte en discussion dans un ticket GitHub sans ambiguïté.

Mathématiques et pipeline HEX vers OKLCH

HEX → OKLCH est un pipeline à 7 étapes
La conversion passe par cinq représentations intermédiaires : hex → sRGB entier → sRGB normalisé (0-1) → linear-sRGB (gamma-décodé) → CIE XYZ D65 → OKLAB → OKLCH. Chaque étape est une matrice ou fonction par morceaux bien définie d'une source primaire. L'outil exécute le pipeline complet à chaque frappe ; les mathématiques sont assez rapides (microsecondes) pour qu'aucun débounce ne soit nécessaire. Exposer le tuple RGB intermédiaire aux côtés d'OKLCH signifie que vous pouvez déboguer une valeur OKLCH inattendue en inspectant les canaux RGB.
Fonction gamma CSS Color 4 §11.2
La conversion sRGB → linear-sRGB utilise la fonction par morceaux CSS Color 4 §11.2 : `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. La forme par morceaux (avec un petit segment linéaire près de zéro) évite l'instabilité numérique de la forme pur-exposant aux couleurs très sombres. C'est la même fonction qu'utilisent les profils ICC pour encoder sRGB et la même fonction qu'utilisent les navigateurs en interne lors du rendu des codes hex. L'inverse pour OKLCH → hex applique la même fonction en sens inverse : `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
Matrice CSS Color 4 §15.1 : linear-sRGB ↔ XYZ D65
La matrice de CSS Color 4 §15.1 convertit linear-sRGB en CIE XYZ sous le point blanc D65 : `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`. La ligne Y donne la formule de luminance sRGB. La matrice est la même qu'utilisent chaque bibliothèque de gestion de couleur, y compris ICC, Adobe Color Engine et le pipeline open source LCMS. La matrice inverse pour OKLCH → hex applique l'inverse de §15.1.
Matrices OKLAB d'Ottosson 2020 et étape racine cubique
La conversion XYZ D65 → OKLAB utilise deux matrices et une étape racine cubique publiées dans l'article OKLAB de Björn Ottosson de 2020. La première matrice transforme XYZ vers un espace de réponse cône LMS (modélisé approximativement sur les sensibilités cône L/M/S humaines). Prenez la racine cubique de chaque canal pour compresser la plage dynamique de façon non linéaire (l'étape correctrice d'uniformité perceptuelle). La seconde matrice transforme le LMS racine-cubique vers les coordonnées L/a/b d'OKLAB. Les trois opérations utilisent les valeurs exactes publiées dans l'implémentation de référence de l'article ; aucune redérivation ni arrondi. L'inverse pour OKLCH → hex applique ces matrices en sens inverse.
OKLAB ↔ OKLCH est cartésien-vers-polaire
Les axes `a` et `b` d'OKLAB forment un plan chroma perpendiculaire à l'axe L. OKLCH encode polairement ce plan : `C = sqrt(a² + b²)` (distance euclidienne au gris), `H = atan2(b, a) * 180 / π` (angle en degrés, enroulé à 0-360°). L'inverse : `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. La forme polaire est préférée à OKLAB pour le stockage des tokens de design parce que la teinte est un axe stable — faire pivoter la teinte ne traverse pas accidentellement le gris comme peut le faire la rotation de `a` ou `b` en OKLAB.
Détection de gamut chromatique via vérification de plage de canal
Une couleur est considérée dans le gamut chromatique pour un espace cible (sRGB, Display P3, Rec2020) si chaque canal tombe dans `[-ε, 1 + ε]` après conversion vers les primaires de cet espace, où `ε = 1e-7` pour absorber le bruit de précision flottante autour des limites. Le badge de gamut chromatique pour chaque espace devient rouge quand un canal dépasse la plage. OKLCH est non borné en gamut chromatique — `oklch(0.7 0.4 30)` est une coordonnée valide mais peut dépasser l'espace d'octet 256-par-canal de sRGB. La vérification s'exécute à chaque frappe ; combinée avec Snap to sRGB, cela attrape l'écueil d'adoption le plus courant (OKLCH gamut chromatique large ne s'affichant pas correctement sur les écrans hérités).
Réduction binaire du chroma Snap-to-sRGB
Snap to sRGB correspond à l'algorithme informatif de cartographie de gamut chromatique de CSS Color 4 §13 : maintenez L et H fixes aux valeurs actuelles, recherche binaire de C ∈ [0, currentC] pour le plus grand C dont la conversion sRGB reste dans le gamut chromatique. La recherche s'exécute en au plus 30 itérations (précision ~10⁻⁹), ce qui est bien plus qu'assez pour la précision visuelle. Préserver L et H signifie que la couleur ramenée se lit comme la même famille de teinte à la même luminosité — elle perd juste en saturation. On ne tronque pas les canaux RGB directement parce que cela distord notablement la teinte (surtout dans les bleus, qui tronquent vers le violet).

Bonnes pratiques pour les flux HEX / OKLCH

Utilisez OKLCH comme format de token canonique dans le nouveau code
Pour tout système de design livré en 2025 ou plus tard, définissez les couleurs de marque et les rampes de palette en OKLCH. L'axe L donne automatiquement des rampes perceptuellement régulières ; l'axe chroma peut adresser des couleurs gamut chromatique large que hex ne peut encoder. Gardez un repli hex pour les navigateurs plus anciens via `@supports not (color: oklch(0 0 0))` ou PostCSS au moment du build, mais faites d'OKLCH la source de vérité dans votre magasin de tokens. Tailwind v4 et shadcn/ui sont livrés ainsi ; les nouveaux projets peuvent suivre leur exemple sans friction.
Générez des rampes en faisant varier L, en maintenant C et H constants
La construction canonique de rampe OKLCH : verrouillez C et H, faites varier L par incréments égaux. Une rampe à 9 paliers `oklch(L 0.15 263)` pour L = 0,1, 0,2, …, 0,9 produit un espacement visuellement régulier sur chaque palier. C'est exactement ce que fait Tailwind v4 en interne. Ne faites pas varier C en même temps que L sauf si vous voulez délibérément faire varier l'intensité chromatique de la rampe (rare). Ne faites pas dériver H sur les paliers — même une dérive de 5° donne une rampe brouillonne.
Respectez la précision de Tailwind v4 : 3 décimales L+C, 1 décimale H
La palette par défaut de Tailwind v4 publie les valeurs OKLCH avec trois décimales sur L et C, et une décimale sur H — `oklch(0.629 0.193 263.4)` pour blue-500. Respecter cette précision dans vos propres tokens signifie que les flux coller-dans-config produisent des valeurs identiques à celles que Tailwind livre, et les outils de diff ne signaleront pas de différences fallacieuses. L'arrondi par défaut de l'outil suit cette convention ; le copier-coller dans un bloc `@theme` est exact au bit près.
Faites passer l'OKLCH gamut chromatique large par la vérification de gamut Display P3
Si vous ciblez du matériel Apple moderne (iPhone, iPad, MacBook depuis 2017+) ou livrez du contenu HDR-aware, les badges de gamut chromatique vous permettent de pousser C au-dessus du plafond sRGB pour revendiquer la saturation P3 supplémentaire. La compression de chroma appliquée par le navigateur empêche la couleur d'être tronquée sur les écrans sRGB uniquement. Ne ramenez pas vers sRGB par défaut sauf si vous savez que toute votre audience est sur des écrans hérités — cela perd 30 %+ de la saturation que peut restituer le matériel P3.
Fournissez un repli hex via @supports pour les navigateurs pré-2023
Bien que la prise en charge des navigateurs evergreen pour `oklch()` soit maintenant à 94 %+, la longue traîne (IE 11, vieux Android Chrome, webviews intégrées) a encore besoin d'un repli. Enveloppez les tokens dans `@supports (color: oklch(0 0 0))` et fournissez une variante hex dans la branche alternative. La sortie de Snap to sRGB est exactement ce repli — généré automatiquement depuis le triplet OKLCH actuel avec L et H préservés. Les plugins PostCSS au moment du build comme `postcss-oklab-function` peuvent aussi intégrer l'approximation sRGB au moment de la compilation.
Documentez à la fois l'OKLCH et le hex source dans vos tokens
Quand vous livrez une variable CSS comme `--color-primary: oklch(0.629 0.193 263.4)`, incluez un commentaire avec le hex source : `/* source : #3b82f6 (Tailwind blue-500) */`. Six mois plus tard, quand quelqu'un doit dériver une teinte foncée connexe ou vérifier la valeur contre un PDF de charte de marque, le hex source préserve la chaîne de provenance complète. OKLCH seul est signifiant mais plus difficile à reconnaître à vue ; le hex source est l'identifiant que la plupart des coéquipiers chercheront en premier.
Utilisez le hash d'URL pour partager des décisions de couleur en direct
Chaque changement de couleur met à jour le hash d'URL sous la forme `#hex=3b82f6` ou `#oklch=...` automatiquement. Copiez l'URL dans un fil Slack ou un ticket GitHub et quiconque l'ouvre atterrit sur la même couleur avec le même triplet OKLCH. C'est plus fiable que de coller une chaîne OKLCH dans le chat — les destinataires font parfois des fautes de frappe sur les décimales ou enveloppent la mauvaise précision — et permet à un fil de revue de design de référencer une couleur exacte plutôt que « le bleu de marque dont on a parlé mardi ». Le hash n'est jamais transmis au serveur.

Questions fréquemment posées

Qu'est-ce que la couleur OKLCH ?
OKLCH est la forme polaire d'OKLAB, un espace colorimétrique perceptuellement uniforme publié par Björn Ottosson en 2020. Les canaux sont la clarté perceptuelle (0-1, également exprimable en 0-100 %), le chroma (0 jusqu'à environ 0,4 selon la teinte et L, sans borne supérieure) et la teinte (0-360°, identique conceptuellement à la teinte de HSL). Il est dérivé de CIE-LAB en passant par une étape de réponse cône LMS avec un pas de racine cubique. CSS Color 4 a ajouté la syntaxe `oklch()` en 2022. Tailwind v4 s'est standardisé sur OKLCH pour sa palette par défaut en 2025. Exemple : `oklch(0.629 0.193 263.4)` est le blue-500 de Tailwind.
OKLCH est-il meilleur que HSL ?
Pour les systèmes de design, oui. Le L (clarté) de HSL est géométrique — dérivé en moyennant le max et le min RGB — et hérite de la courbe gamma de sRGB, donc `hsl(60 100% 50%)` (jaune) paraît visiblement plus lumineux que `hsl(240 100% 50%)` (bleu) bien que les deux indiquent L=50 %. Le L d'OKLCH est perceptuel, ancré au modèle OKLAB d'Ottosson 2020. La conséquence pratique : une rampe OKLCH à L uniforme paraît visuellement régulière sur chaque teinte ; une rampe HSL nécessite des corrections par teinte ajustées à la main pour paraître régulière. C'est pourquoi Tailwind v4 a migré sa palette par défaut d'une génération basée sur HSL à une basée sur OKLCH.
Quels navigateurs prennent en charge oklch() ?
Tous les navigateurs evergreen depuis mi-2023 : Chrome et Edge 111 (mars 2023), Safari 15.4 (mars 2022, le plus précoce), Firefox 113 (mai 2023). La couverture caniuse cumulée dépasse 94 %. Pour la longue traîne — IE 11, vieux Safari, Android Chrome sur matériel ancien — enveloppez vos tokens dans `@supports (color: oklch(0 0 0))` et fournissez un repli hex ou `hsl()` dans la branche alternative. Les outils de build comme PostCSS `postcss-oklab-function` peuvent aussi intégrer une approximation sRGB aux côtés de la valeur OKLCH au moment de la compilation.
Pourquoi utiliser OKLCH dans Tailwind v4 ?
Tailwind v4 (sorti en janvier 2025) a fait passer sa palette par défaut d'une génération basée sur HSL à une basée sur OKLCH précisément parce qu'OKLCH donne automatiquement des rampes perceptuellement régulières. Sous le système HSL de la v3, `red-500` et `blue-500` avaient des poids perçus visiblement différents bien que leur L% HSL soit identique, ce qui forçait les designers à régler chaque palier à la main ; sous la v4, les deux paraissent équilibrés parce que les deux se trouvent à la même clarté perceptuelle OKLCH. OKLCH débloque aussi les couleurs gamut chromatique large Display P3 qu'aucun code hex ne peut encoder — un token Tailwind v4 comme `oklch(0.65 0.25 30)` peut adresser des rouges P3 qui dépassent sRGB. Le build émet toujours des replis hex pour les navigateurs plus anciens.
OKLCH est-il perceptuellement uniforme ?
Oui — c'est tout l'enjeu du design. OKLCH hérite de l'uniformité perceptuelle d'OKLAB, l'espace colorimétrique de Björn Ottosson de 2020 conçu spécifiquement pour corriger les non-uniformités de CIE-LAB (le meilleur espace perceptuellement uniforme antérieur). Un pas fixe sur le canal L correspond à un pas perceptuel fixe de luminosité. Un pas fixe sur C correspond à un pas perceptuel fixe de chroma. Les approximations CIELAB se cassent autour des couleurs très saturées ; OKLAB et sa forme polaire OKLCH restent exacts sur tout le gamut chromatique, c'est pourquoi chaque outil moderne de système de design (Tailwind v4, shadcn/ui, Radix Colors v3) s'est standardisé dessus.
Comment lit-on une valeur OKLCH ?
`oklch(L C H)` — trois nombres, éventuellement suivis de `/ A` pour l'alpha. L est la clarté perceptuelle de 0 (noir) à 1 (blanc) ; la forme nombre et la forme pourcentage sont équivalentes (`0.6` et `60%`). C est le chroma de 0 (gris) jusqu'à environ 0,4 pour les couleurs sRGB les plus saturées ; il n'y a pas de borne supérieure dure, les couleurs gamut chromatique large peuvent dépasser. H est la teinte en degrés de 0 à 360, comme HSL (0/360 = rouge, 120 = vert, 240 = bleu). Exemple : `oklch(0.629 0.193 263.4)` est le blue-500 de Tailwind — lumineux, très chromatique, dans l'arc des bleus.
Quelle est la différence entre OKLCH et LCH ?
Les deux sont des formes polaires (clarté perceptuelle / chroma / teinte) d'un espace colorimétrique de la famille CIE-LAB. LCH est la forme polaire de CIE-LAB, l'espace perceptuellement uniforme de 1976. OKLCH est la forme polaire d'OKLAB, la mise à jour d'Ottosson de 2020. La différence : l'uniformité perceptuelle de CIE-LAB se casse autour des bleus et violets très saturés (une faiblesse documentée du modèle), donc une rampe LCH à travers des couleurs saturées paraît subtilement irrégulière. OKLAB corrige cela en redérivant les matrices depuis une étape de réponse cône LMS corrigée. Les deux sont livrés dans CSS Color 4 (syntaxe `lch()` et `oklch()`) ; pour les nouveaux systèmes de design en 2025, préférez OKLCH.
Comment convertir hex en OKLCH ?
Le pipeline est : analyser le hex `#RRGGBB` en entiers de canaux sRGB via `parseInt(hex, 16)`, normaliser à 0-1, décoder le gamma vers linear-sRGB via la fonction par morceaux CSS Color 4 §11.2, multiplier par la matrice §15.1 pour obtenir CIE XYZ D65, multiplier par la matrice LMS d'Ottosson et prendre la racine cubique de chaque canal, multiplier par la matrice OKLAB d'Ottosson pour obtenir L/a/b, puis cartésien-vers-polaire : `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. Le pipeline complet s'exécute en microsecondes. Cet outil l'exécute en direct au fil de la saisie — `#3b82f6` atterrit comme `oklch(0.629 0.193 263.4)` instantanément.