logo oujood
🔍

Les couleurs en CSS3 rgba(), hsl(), hsla() et opecity

CSS3 fournit plusieurs nouvelles façons pour définir une valeur de couleur.
CSS3 ajoute quelques nouvelles notations fonctionnelles pour définir des valeurs de couleur pour les éléments qui sont : rgba(), hsl(),  hsla() et opecity.

OUJOOD.COM

Couleurs en CSS : bases, transparence et formats modernes

Cette page réorganise et enrichit le cours : nous partons des couleurs de base, avançons vers la transparence, puis vers les formats modernes (variables CSS, color(), lab()/lch(), oklab()/oklch(), etc.). Enfin, vous trouverez un récapitulatif comparatif, des bonnes pratiques et une section Accessibilité (contraste, daltonisme).

1) Couleurs de base

1.1 Couleurs nommées CSS

CSS fournit une liste de mots-clés prêts à l’emploi (named colors) : red, green, blue, black, white, transparent (complètement transparent), ou encore rebeccapurple, etc. Ces mots-clés sont pratiques pour des exemples rapides.

red
rebeccapurple
transparent
gold
tomato
teal

Exemple :     📋 Copier le code

<div style="display:flex;gap:.5rem" class="checkerboard">
  <div style="background:red;color:white;padding:.5rem">red</div>
  <div style="background:rebeccapurple;color:white;padding:.5rem">rebeccapurple</div>
  <div style="background:transparent;padding:.5rem">transparent</div>
</div>

Explication : Les « named colors » sont interprétées directement par le navigateur. transparent signifie « entièrement transparent » (valeur alpha = 0) ; la couleur sous-jacente (ou le motif de fond) restera visible.

1.2 Hexadécimal : #RRGGBB et #RRGGBBAA

La notation hexadécimale encode Rouge/Vert/Bleu en base 16 : #FF0000 (rouge), #00FF00 (vert), #0000FF (bleu). Les raccourcis #RGB existent (#F00#FF0000). Depuis CSS Color Level 4, on peut ajouter un canal alpha : #RRGGBBAA (ou #RGBA). Exemple : #FF000080 pour un rouge à 50% d’opacité.

Exemple :     📋 Copier le code

<style>
  .box{width:120px;padding:.5rem;border:1px solid #ddd;text-align:center;margin:.25rem}
</style>
<div style="display:flex;gap:.5rem" class="checkerboard">
  <div class="box" style="background:#FF0000">#FF0000</div>
  <div class="box" style="background:#FF000080">#FF000080</div> <!-- 50% alpha -->
  <div class="box" style="background:#0F08">#0F08</div> <!-- #RGBA => #00FF0088 -->
</div>

Explication : #RRGGBBAA ajoute deux chiffres hexadécimaux pour l’alpha (00 = transparent, FF = opaque). C’est équivalent à rgba()/hsla() mais reste une écriture compacte.

1.3 Couleurs RGBA

rgba(255, 0, 0, 0.3)

rgba(0, 255, 0, 0.3)

rgba(0, 0, 255, 0.3)

Les valeurs de couleur RGBA étendent RGB avec un canal alpha (opacité de la « couleur »). Le paramètre alpha va de 0 (transparent) à 1 (opaque).

Exemple :     📋 Copier le code

<style>
  p{width:200px}
  .p1{background-color: rgba(255, 0, 0, 0.3)}
  .p2{background-color: rgba(0, 255, 0, 0.3)}
  .p3{background-color: rgba(0, 0, 255, 0.3)}
</style>
<p class="p1">rgba(255, 0, 0, 0.3)</p>
<p class="p2">rgba(0, 255, 0, 0.3)</p>
<p class="p3">rgba(0, 0, 255, 0.3)</p>

Explication : Ici, seul l’arrière-plan est semi-transparent ; le texte reste opaque si vous ne lui appliquez pas d’alpha.

1.4 Valeurs de couleur HSL/HSLA

Le modèle HSL (Hue-Saturation-Lightness) est souvent plus intuitif pour créer des palettes : la teinte est un angle (0–360), la saturation et la luminosité sont des pourcentages.

  • 0 (ou 360) : rouge
  • 120 : vert
  • 240 : bleu

Exemple :     📋 Copier le code

<style>
  .sw{width:220px;margin:0;padding:.25rem .5rem}
  .g{margin:.75rem 0}
</style>
<div class="g">
  <div class="sw" style="background:hsl(120 100% 30%)">HSL(120 100% 30%)</div>
  <div class="sw" style="background:hsl(120 100% 50%)">HSL(120 100% 50%)</div>
  <div class="sw" style="background:hsl(120 100% 70%)">HSL(120 100% 70%)</div>
  <div class="sw" style="background:hsl(120 100% 90%)">HSL(120 100% 90%)</div>
</div>
<div class="g">
  <div class="sw" style="background:hsl(240 10% 50%)">HSL(240 10% 50%)</div>
  <div class="sw" style="background:hsl(240 40% 50%)">HSL(240 40% 50%)</div>
  <div class="sw" style="background:hsl(240 70% 50%)">HSL(240 70% 50%)</div>
  <div class="sw" style="background:hsl(240 100% 50%)">HSL(240 100% 50%)</div>
</div>

Explication : Avec HSL, vous ajustez facilement des variantes (clair/foncé, saturé/désaturé) en gardant la même teinte (cohérence graphique).

2) Transparence : opacity vs alpha

Il faut distinguer :

  • Alpha dans rgba()/hsla()/#RRGGBBAA : la couleur est semi-transparente (n’affecte pas les enfants).
  • opacity : la boîte complète (élément + contenu + enfants) devient semi-transparente.

Exemple :     📋 Copier le code

<style>
  .wrap{display:flex;gap:1rem}
  .card{width:220px;padding:.5rem;border:1px solid #ddd}
  .bg-alpha{background: rgba(0,150,50,.5)}   /* couleur semi-transparente */
  .op-50{background: rgb(0,150,50); opacity:.5} /* tout l'élément est à 50% */
</style>
<div class="checkerboard wrap">
  <div class="card bg-alpha"><b>Alpha (rgba)</b><br>Texte 100% opaque</div>
  <div class="card op-50"><b>opacity</b><br>Texte aussi à 50%</div>
</div>

Explication : Utilisez l’alpha si vous voulez que seul l’arrière-plan soit translucide et que le texte reste net. Réservez opacity aux effets où tout doit s’estomper (survol, désactivation, etc.).

3) Formats avancés et modernes

3.1 Fonctions perceptuelles : lab(), lch(), oklab(), oklch()

Ces espaces sont plus réguliers perceptuellement : une variation numérique produit une variation visuelle plus prévisible qu’avec RGB/HSL. LCH et OKLCH sont très pratiques pour générer des gammes (modifier la clarté L ou la chroma C à teinte constante).

Exemple :     📋 Copier le code

<style>
  .row{display:flex;gap:.5rem}
  .sw2{min-width:130px;border:1px solid #ddd;padding:.5rem;text-align:center}
</style>
<div class="row">
  <div class="sw2" style="background:lch(70% 60 40)">lch(70% 60 40)</div>
  <div class="sw2" style="background:lch(60% 60 40)">lch(60% 60 40)</div>
  <div class="sw2" style="background:lch(50% 60 40)">lch(50% 60 40)</div>
</div>
<div class="row" style="margin-top:.5rem">
  <div class="sw2" style="background:oklch(0.75 0.12 40)">oklch(0.75 0.12 40)</div>
  <div class="sw2" style="background:oklch(0.65 0.12 40)">oklch(0.65 0.12 40)</div>
  <div class="sw2" style="background:oklch(0.55 0.12 40)">oklch(0.55 0.12 40)</div>
</div>

Explication : À hue constant, on fait varier la clarté (L) pour décliner la même couleur du clair au foncé. C’est idéal pour des palettes cohérentes et accessibles.

3.2 Espace élargi & color()

La fonction color() permet de cibler des espaces (par ex. display-p3) : color(display-p3 1 0 0) produit un rouge P3 (plus saturé que sRGB). Utilisez-la avec repli pour les navigateurs plus anciens.

Exemple :     📋 Copier le code

<style>
  .p3{background: color(display-p3 1 0 0)} /* Rouge en gamut P3 */
  .srgb{background: rgb(255 0 0)}
  .cell{min-width:130px;border:1px solid #ddd;padding:.5rem;text-align:center}
</style>
<div style="display:flex;gap:.5rem">
  <div class="cell srgb">sRGB</div>
  <div class="cell p3">display-p3</div>
</div>

Explication : Sur un écran compatible P3, le rouge P3 apparaît plus vif. Prévoyez un fallback sRGB si nécessaire.

3.3 Variables CSS (Custom Properties)

Définissez vos couleurs dans :root puis réutilisez-les partout. Pratique pour thématiser et assurer la cohérence.

Exemple :     📋 Copier le code

<style>
  :root{
    --primary-color: oklch(0.65 0.12 240);
    --on-primary: white;
    --surface: white;
    --text: #1f2937;
  }
  [data-theme="dark"]{
    --surface: #0b1220;
    --text: #e5e7eb;
  }
  .btn{background: var(--primary-color); color: var(--on-primary); padding:.5rem .75rem; border-radius:.25rem}
  .panel{background: var(--surface); color: var(--text); padding:.75rem; border:1px solid #e5e7eb}
</style>

\<div class="panel">
\<button class="btn">Action primaire\</button>
\</div>

\<!-- Simuler un thème sombre -->
\<div class="panel" data-theme="dark" style="margin-top:.5rem">
\<button class="btn">Action primaire (dark)\</button>
\</div> 

Explication : Les variables CSS (préfixées par --) peuvent être surchargées selon le thème, la section, le composant… Elles se combinent parfaitement avec HSL/LCH/OKLCH.

3.4 color-scheme & couleurs système

La propriété color-scheme indique au navigateur que votre page gère light / dark (et adapte alors scrollbars, formulaires…). Les couleurs système comme Canvas et CanvasText s’alignent automatiquement sur le thème de l’OS/navigateur.

Exemple :     📋 Copier le code

<style>
  :root{ color-scheme: light dark } /* déclare la prise en charge des deux schémas */
  .sys{ background: Canvas; color: CanvasText; padding:.75rem; border:1px solid #ddd }
</style>
<div class="sys">
  Cette carte utilise des couleurs système (Canvas/CanvasText) et s'adapte au thème.
</div>

Explication : color-scheme améliore l’intégration native (scrollbars, champs…). Les noms Canvas/CanvasText évitent de « forcer » des couleurs qui casseraient l’accessibilité.

4) Accessibilité des couleurs

  • Contraste : viser au moins 4.5:1 pour du texte normal, 3:1 pour du texte large (≈ ≥ 18 px, ou ≥ 14 px gras).
  • Daltonisme : ne jamais coder l’information par la couleur seule ; ajouter texte, icônes, motifs, soulignement.
  • État au clavier : conserver focus/hover visibles.

Exemple :     📋 Copier le code

<style>
  .bad{background:#8ecae6;color:#bde0fe;padding:.5rem} /* contraste faible */
  .good{background:#0b132b;color:#ffffff;padding:.5rem} /* contraste élevé */
  a.safe{color:#1d4ed8;text-decoration:underline}
  .legend::before{content:"● ";font-weight:bold}
</style>
<div class="bad legend">Contraste insuffisant</div>
<div class="good legend" style="margin-top:.5rem">Contraste recommandé</div>
<p>Ne vous fiez pas à la couleur seule : <a href="#" class="safe">lien souligné</a> + icône/texte d’état.</p>

Explication : Le premier bloc est difficile à lire (contraste faible). Le second utilise un fond sombre et texte blanc (contraste fort). Le lien est souligné pour rester identifiable même pour les personnes daltoniennes.

5) Récapitulatif comparatif

Format Exemple Avantages Limites Transparence
Couleurs nommées rebeccapurple Très lisible, rapide Palette limitée Non (sauf transparent)
Hex #1d4ed8 Courant, compact Peu intuitif à régler Oui via #RRGGBBAA
RGB(A) rgb(37 99 235) Précis par canal Peu perceptuel Oui (rgba())
HSL(A) hsl(217 91% 60%) Génération de palettes Uniformité limitée Oui (hsla())
LCH / OKLCH oklch(.65 .12 240) Perceptuellement cohérent Support plus récent Par canal (pas de suffixe A)
color() (P3…) color(display-p3 1 0 0) Couleurs plus vives Dépend du matériel Via paramètres/fallback
Variables CSS var(--primary-color) Thèmes & cohérence Nécessite une stratégie Selon la valeur

6) Bonnes pratiques & recommandations

  • Centralisez vos couleurs avec des variables CSS et nommez-les sémantiquement : --primary, --surface, --text-weak
  • Préférez HSL/OKLCH pour générer des gammes cohérentes (clair → foncé) à teinte constante.
  • Utilisez alpha dans la couleur (RGBA/HSLA/#A) plutôt que opacity si le texte/enfant doit rester net.
  • Exposez color-scheme: light dark et, si possible, offrez un bouton de thème qui bascule vos variables.
  • Testez le contraste et fournissez des indices non colorés (soulignement, icône, motif).

Compatibilité navigateurs (historique/indicatif)

Les nombres dans le tableau spécifient la première version de navigateur ayant pris en charge la propriété/valeur indiquée (à titre historique). Pour les projets actuels, vérifiez toujours la compatibilité la plus récente.

Propriété | NavigateurGoogle Chrome Internet Explorer Firefox Safari Opera
RGBA, HSL et HSLA 4.0 9.0 3.0 3.1 10.1
opacity 4.0 9.0 2.0 3.1 10.1

Exemples originaux

Couleurs RGBA

rgba(255, 0, 0, 0.3)

rgba(0, 255, 0, 0.3)

rgba(0, 0, 255, 0.3)

Les valeurs de couleur RGBA sont une extension des valeurs RGB avec un canal alpha – qui spécifie l'opacité de la couleur. Le paramètre alpha est compris entre 0 (transparent) et 1 (opaque).

Exemple :     📋 Copier le code

<!doctype html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exemple couleur RGBA</title>
  <style>
    p{width:200px}
    .p1{background-color: rgba(255, 0, 0, 0.3)}
    .p2{background-color: rgba(0, 255, 0, 0.3)}
    .p3{background-color: rgba(0, 0, 255, 0.3)}
  </style>
</head>
<body>
  <p class="p1">rgba(255, 0, 0, 0.3)</p>
  <p class="p2">rgba(0, 255, 0, 0.3)</p>
  <p class="p3">rgba(0, 0, 255, 0.3)</p>
</body>
</html>

Valeurs de couleur HSL

Les couleurs peuvent aussi être définies en HSL (teinte-saturation-luminosité) via la notation fonctionnelle hsl(). La saturation et la luminosité sont des pourcentages ; 100 % de saturation = couleur vive, 0 % = gris. 100 % de luminosité = blanc, 0 % = noir, 50 % ≈ « ton moyen ».

Exemple :     📋 Copier le code

<!doctype html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exemple couleur HSL</title>
  <style>
    p{width:200px;margin:0;padding:0}
    div{margin:15px}
    .p1{background-color:hsl(120 100% 30%)}
    .p2{background-color:hsl(120 100% 50%)}
    .p3{background-color:hsl(120 100% 70%)}
    .p4{background-color:hsl(120 100% 90%)}
    .p11{background-color:hsl(240 10% 50%)}
    .p12{background-color:hsl(240 40% 50%)}
    .p13{background-color:hsl(240 70% 50%)}
    .p14{background-color:hsl(240 100% 50%)}
  </style>
</head>
<body>
  <div>
    <p class="p1">HSL(120 100% 30%)</p>
    <p class="p2">HSL(120 100% 50%)</p>
    <p class="p3">HSL(120 100% 70%)</p>
    <p class="p4">HSL(120 100% 90%)</p>
  </div>
  <div>
    <p class="p11">HSL(240 10% 50%)</p>
    <p class="p12">HSL(240 40% 50%)</p>
    <p class="p13">HSL(240 70% 50%)</p>
    <p class="p14">HSL(240 100% 50%)</p>
  </div>
</body>
</html>

Couleurs HSLA

HSLA ajoute l’alpha à HSL : hsla(teinte, saturation, luminosité, alpha).

Exemple :     📋 Copier le code

<!doctype html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exemple couleur HSLA</title>
  <style>
    p{width:250px;margin:0;padding:0}
    div{margin:15px}
    .p1{background-color:hsla(0 100% 50% / .3)}
    .p2{background-color:hsla(0 100% 50% / .5)}
    .p3{background-color:hsla(0 100% 50% / .7)}
    .p4{background-color:hsla(0 100% 50% / .9)}
  </style>
</head>
<body>
  <div>
    <p class="p1">hsla(0 100% 50% / 0.3)</p>
    <p class="p2">hsla(0 100% 50% / 0.5)</p>
    <p class="p3">hsla(0 100% 50% / 0.7)</p>
    <p class="p4">hsla(0 100% 50% / 0.9)</p>
  </div>
</body>
</html>

Propriété opacity

opacity rend translucide l’ensemble de l’élément (y compris enfants/texte).

Exemple :     📋 Copier le code

<!doctype html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exemple opacity</title>
  <style>
    p{width:250px;margin:0;padding:0}
    div{margin:15px}
    .p1{background-color:rgb(0 150 50); opacity:.3}
    .p2{background-color:rgb(0 150 50); opacity:.5}
    .p3{background-color:rgb(0 150 50); opacity:.7}
    .p4{background-color:rgb(0 150 50); opacity:.9}
  </style>
</head>
<body>
  <div>
    <p class="p1">rgb(0 150 50); opacity:.3</p>
    <p class="p2">rgb(0 150 50); opacity:.5</p>
    <p class="p3">rgb(0 150 50); opacity:.7</p>
    <p class="p4">rgb(0 150 50); opacity:.9</p>
  </div>
</body>
</html>

chapitre précédent     chapitre suivant

Par carabde — mise à jour