Skip to content

Guide

Formats de couleur CSS : hex, RGB, HSL, OKLCH — lequel utiliser et quand

Quatre formats, quatre cas d’utilisation. Le bon choix dépend de ce que vous faites avec la couleur.

By Published

Le CSS moderne prend en charge quatre notations de couleur principales : hex (#FF6600), rgb(),hsl(), et le plus récent oklch(). Toutes décrivent le même gamut de couleurs (sRGB par défaut, plus large pour OKLCH). Elles diffèrent en lisibilité humaine, en facilité de manipulation, et dans le type de changement de couleur qui semble naturel.

Les quatre formats en un coup d’œil

FormatExempleIdéal pour
Hex#FF6600Stocker des couleurs, échanger avec les designers, code qui ne modifie pas la valeur.
rgb()rgb(255 102 0)Génération programmatique, quand les valeurs canal par canal comptent.
hsl()hsl(24 100% 50%)Ajuster manuellement luminosité et saturation tout en gardant la teinte fixe.
oklch()oklch(0.72 0.18 47)Concevoir des échelles de couleurs où l’uniformité perceptuelle est importante.

Hex : le format de stockage

Hex encode chaque canal RGB sous forme de valeur hexadécimale à deux chiffres. #FF6600signifie rouge 255, vert 102, bleu 0 — c’est un orange vif.

Avantages : court, universellement compris, facile à copier-coller, fonctionne dans tout contexte CSS.

Inconvénients : opaque à lire (“#7E4F2Best-il un ton chaud ou froid ?”), on ne peut pas facilement ajuster la luminosité ou la saturation sans convertir d’abord.

Le CSS moderne prend en charge le hex à 8 chiffres pour la transparence :#FF6600AAest l’orange ci-dessus à 67% d’opacité.

rgb() : le format de canal explicite

Mêmes canaux que hex, nombres décimaux, alpha optionnel. Deux syntaxes coexistent :

  • Forme avec virgules (legacy) : rgb(255, 102, 0) ou avec alpha rgba(255, 102, 0, 0.67)
  • Forme moderne avec espaces : rgb(255 102 0) ou avec alpha rgb(255 102 0 / 0.67)

Idéal pour la génération programmatique : construire une couleur à partir de la sortie d’un algorithme, mélanger deux couleurs, calculer le contraste d’accessibilité.

hsl() : le format ajustable manuellement

Trois valeurs : teinte (0-360°), saturation(0-100%), luminosité (0-100%). Ajuster chacune indépendamment semble plus naturel que modifier les canaux RGB.

  • Teinte : la couleur elle-même. 0 = rouge, 60 = jaune, 120 = vert, 180 = cyan, 240 = bleu, 300 = magenta.
  • Saturation : 0% = gris, 100% = couleur pure.
  • Luminosité : 0% = noir, 50% = teinte pure, 100% = blanc.

Idéal pour les tokens de design où vous voulez une variante “même couleur, plus sombre” — diminuez la luminosité de 10%, gardez teinte et saturation. Les états de survol, les variantes de thème et les dégradés en bénéficient.

Le piège : la luminosité HSL ne suit pas la luminosité perçue de façon uniforme. Le jaune HSL à 50% de luminosité semble beaucoup plus clair que le bleu HSL à 50% de luminosité. Pour un design de couleurs perceptuellement uniforme, OKLCH est le meilleur choix.

oklch() : le format perceptuel

Trois valeurs : L (luminosité, 0-1),C (chroma, 0-~0.4 pour sRGB),H(teinte, 0-360°). Basé sur l’espace colorimétrique perceptuel OKLab (Björn Ottosson, 2020).

La propriété clé : des valeurs de luminosité égales semblent également lumineuses. oklch(0.6 0.2 0) (rouge) etoklch(0.6 0.2 120) (vert) etoklch(0.6 0.2 240) (bleu) ont tous la même luminosité perçue, contrairement à HSL où ils varieraient dramatiquement.

Idéal pour : concevoir des échelles de couleurs, des thèmes sombres, s’assurer que le contraste du texte reste constant lors d’une rotation de teinte. Pris en charge dans tous les navigateurs evergreen depuis 2023.

Choisir le bon

  • Pour les couleurs de marque et les tokens de design :définissez en HSL ou OKLCH. Stockez hex comme fallback dans les fichiers legacy.
  • Pour les rampes de couleurs UI (50/100/200/.../900) :OKLCH avec une chroma fixe et une luminosité variable produit des échelles perceptuellement uniformes.
  • Pour copier depuis une spec Figma/Photoshop :collez hex. Convertissez via notre outil hex vers RGB quand vous avez besoin de manipuler.
  • Pour les choix axés sur l’accessibilité :calculez le contraste WCAG sur la forme rgb. La formule de contraste fonctionne sur RGB linéaire, pas directement sur hex ou HSL.

La conclusion

Hex pour le stockage et le copier-coller. RGB pour le programmatique. HSL pour les ajustements du designer. OKLCH pour les rampes perceptuellement uniformes. La spec CSS permet de mélanger librement ; choisissez le format qui correspond à ce que vous faites avec la couleur.

Sources : CSS Color Module Level 4 (W3C) ; Björn Ottosson,A perceptual colour space (2020) ; documentation MDN sur les fonctions CSS de couleur modernes.

Exemple travaillé : construire une rampe de couleurs UI en 10 étapes

Une rampe de système de design va généralement de 50 / 100 / 200 / 300 / 400 / 500 / 600 / 700 / 800 / 900 — du plus clair au plus sombre — avec 500 comme couleur de marque “vraie”.

Avec HSL à teinte et saturation constantes, luminosité de 95% (étape 50) à 15% (étape 900) :

--brand-50:  hsl(24 100% 95%);
--brand-500: hsl(24 100% 50%);  /* base */
--brand-900: hsl(24 100% 18%);

Problème : la luminosité HSL est mathématiquement uniforme mais pas perceptuellement. Le saut de brand-400 à brand-500 semble dramatique ; le saut de brand-800 à brand-900 est à peine visible.

OKLCH avec chroma constante, luminosité de 0,97 à 0,20 :

--brand-50:  oklch(0.97 0.04 47);
--brand-500: oklch(0.64 0.21 47);  /* base */
--brand-900: oklch(0.26 0.09 47);

Chaque étape ressemble à une étape perceptuellement uniforme par rapport à la précédente. Tailwind v4, Radix Colors v3 et la plupart des systèmes de design modernes ont basculé vers les rampes OKLCH après 2023.

Prise en charge des navigateurs et stratégie de fallback

NotationChromeSafariFirefoxOutlook bureau
Hex 6 chiffrestoustoustoustous
Hex 8 chiffres (alpha)62+ (2018)10+ (2016)49+ (2016)NON
rgb() virgulestoustoustoustous
hsl()tous modernestous modernestous modernespartiel
oklch()111+ (2023)15.4+ (2022)113+ (2023)NON

Pour le web moderne, OKLCH est entièrement utilisable. Pour les emails et les contextes legacy, la cible sûre est le hex à 6 chiffres.

Pour les détails complets de la spec, le CSS Color Module Level 4 couvre toutes les notations, et l’article original OKLab de Björn Ottosson (2020) est la référence canonique pour le modèle perceptuel sous OKLCH. Pour la conversion interactive de formats, le convertisseur de couleur gère hex ↔ rgb ↔ hsl ↔ oklch avec rapport de contraste WCAG.

Frequently asked questions

Quelle est la différence entre les formats de couleur hex et HSL en CSS ?
Hex encode la couleur sous forme de trois valeurs hexadécimales à 2 chiffres pour le rouge, le vert et le bleu (ex. #FF6600). HSL exprime la même couleur comme teinte (0–360°), saturation (0–100%) et luminosité (0–100%), ce qui facilite l’ajustement de la luminosité sans recalculer les trois canaux.
Quand devrais-je utiliser oklch au lieu de hsl en CSS ?
Utilisez oklch quand vous avez besoin de dégradés de couleur perceptuellement uniformes ou de génération de palettes. Dans HSL, changer la teinte tout en maintenant la luminosité constante produit des couleurs qui semblent très différentes en luminosité ; le canal de luminosité d’oklch est calibré pour la perception humaine.
Puis-je utiliser des codes hex à 8 chiffres en CSS pour la transparence ?
Oui. CSS prend en charge le hex à 8 chiffres (#RRGGBBAA) où les deux derniers chiffres spécifient l’alpha de 00 (transparent) à FF (opaque). Par exemple, #FF660080 est un orange 50% transparent.
Tous les navigateurs prennent-ils en charge les valeurs de couleur oklch ?
oklch est pris en charge par tous les principaux navigateurs depuis 2023 (Chrome 111, Firefox 113, Safari 15.4). Pour la prise en charge des anciens navigateurs, fournissez un fallback hex ou rgb avant la déclaration oklch.
Quel est l’avantage de hsl sur rgb pour générer des palettes de couleurs ?
HSL vous permet de créer des teintes et des nuances en ajustant uniquement la valeur de luminosité tout en maintenant la teinte et la saturation constantes, produisant des palettes cohérentes. Avec RGB, créer une version plus claire de #FF6600 nécessite de recalculer manuellement les trois canaux.
Comment convertir une couleur hex en hsl ?
Normalisez chaque canal RGB à 0–1, trouvez le max et le min, puis calculez : H = angle de couleur basé sur quel canal est max, S = (max−min)/(1−|2L−1|), L = (max+min)/2. La plupart des outils de design et les préprocesseurs CSS incluent des fonctions de conversion intégrées.

Related

Published May 16, 2026