edubun
Français

Couleurs et unités

Un texte gris clair #bbbbbb sur fond blanc a un rapport de contraste de 1.92 pour 1. Les WCAG demandent au moins 4.5 pour 1 pour un texte normal.

Les façons d'écrire une couleur

CSS accepte les couleurs dans plusieurs notations, et toutes reviennent au même : des quantités de lumière rouge, verte et bleue à l'écran. Les couleurs nommées comme red, navy ou rebeccapurple sont faciles à lire mais limitées. La notation hexadécimale écrit le rouge, le vert et le bleu avec deux chiffres hexadécimaux chacun, de 00 à ff (0 à 255) : #1a5fb4 correspond à 26 de rouge, 95 de vert et 180 de bleu, un bleu moyen. rgb(26 95 180) dit la même chose en décimal. hsl(210 80% 40%) décrit une couleur par sa teinte (un angle sur le cercle chromatique, où 0 est le rouge, 120 le vert et 240 le bleu), sa saturation et sa luminosité, ce qui permet d'obtenir facilement une nuance plus claire ou plus foncée de la même teinte en changeant un seul nombre.

color: navy;
color: #1a5fb4;              /* same as #1A5FB4 */
color: #36c;                 /* short form of #3366cc */
color: rgb(26 95 180);
color: rgb(26 95 180 / 50%); /* half transparent */
color: hsl(210 80% 40%);
background-color: transparent;
L'ancienne syntaxe avec virgules, rgb(26, 95, 180), fonctionne encore partout.

Une quatrième valeur, après une barre oblique, règle le canal alpha : rgb(0 0 0 / 50%) est un noir à moitié opaque, qui laisse donc voir ce qui se trouve derrière. color définit la couleur du texte, background-color le remplissage derrière un élément et border-color sa bordure. Le mot-clé currentColor désigne la couleur du texte de l'élément, pratique pour les icônes et les bordures qui doivent être assorties au texte.

Le contraste n'est pas facultatif

Un texte trop proche de son fond en luminosité est difficile à lire pour beaucoup de monde : les personnes malvoyantes, les lecteurs âgés, et tous ceux qui lisent sur un téléphone en plein soleil. Les WCAG 2.2, les règles d'accessibilité du W3C, mesurent cela par un rapport de contraste allant de 1 pour 1 (aucune différence) à 21 pour 1 (noir sur blanc). Le critère de succès 1.4.3 demande au moins 4.5 pour 1 pour un texte normal et 3 pour 1 pour un grand texte, que les WCAG définissent comme au moins 18 points, ou 14 points en gras. Le gris foncé #767676 sur blanc passe tout juste avec 4.54 pour 1 ; #777777 échoue de peu avec 4.48. Les outils de développement du navigateur affichent ce rapport quand tu inspectes un élément de texte : inutile de deviner.

La couleur ne doit jamais être non plus le seul moyen de transmettre une information. Un formulaire qui signale les erreurs uniquement en passant une bordure en rouge exclut toutes les personnes qui distinguent mal le rouge ; ajoute aussi un message ou une icône.

Unités absolues et relatives

Les longueurs ont besoin d'une unité, sauf zéro. px est le pixel CSS, une unité fixe ; sur les écrans haute densité, un pixel CSS couvre plusieurs pixels physiques, il garde donc à peu près la même taille à l'œil. Les unités relatives dépendent d'autre chose. em est relatif à la taille de police de l'élément lui-même : padding: 0.5em sur un texte de 20 pixels donne 10 pixels. rem est relatif à la taille de police de la racine (html), qui vaut 16 pixels dans les navigateurs sauf si le lecteur l'a modifiée : 1.25rem fait donc normalement 20 pixels. % est relatif au parent, en général à sa largeur. vw et vh sont des centièmes de la largeur et de la hauteur de la fenêtre d'affichage, et ch correspond à peu près à la largeur du chiffre zéro dans la police utilisée.

Laquelle choisir ? Dimensionner le texte en rem respecte le lecteur : si quelqu'un règle son navigateur pour un texte plus grand, tout ce qui est en rem grandit avec, alors qu'un texte fixé en px risque de ne pas suivre. Un padding en em grandit avec le texte qu'il entoure. Les pixels conviennent à ce qui ne doit pas changer d'échelle, comme une bordure de 1 pixel.

couleur hexadécimale#rrggbb, chaque paire de 00 à ff
hsl()Angle de teinte, saturation en %, luminosité en %
alphaOpacité, après une barre oblique : rgb(0 0 0 / 50%)
rapport de contraste4.5:1 pour un texte normal, 3:1 pour un grand texte (WCAG 1.4.3)
pxPixel CSS, fixe
emRelatif à la taille de police de l'élément
remRelatif à la taille de police de la racine (16px par défaut)
vw / vh1 % de la largeur / hauteur de la fenêtre d'affichage
  1. Quelle quantité de rouge contient #ff8000, sur une échelle de 0 à 255 ?
  2. Quelle quantité de vert contient #ff8000 ?
  3. Dans hsl(), quel angle de teinte correspond au vert pur ?
  4. Quel rapport de contraste minimal le critère WCAG 1.4.3 demande-t-il pour un texte normal ?
    • 4.5 to 1
    • 3 to 1
    • 7 to 1
  5. #777777 sur fond blanc satisfait-il l'exigence de 4.5 pour 1 ?
    • Non, il est à 4.48 pour 1
    • Oui, il est à 4.54 pour 1
    • Oui, n'importe quel gris passe
  6. La taille de police de la racine est de 16px. Combien de pixels font 1.5rem ?
  7. Un élément a font-size: 20px et padding: 0.5em. Combien de pixels de padding ?
  8. La fenêtre d'affichage fait 400px de large. Quelle largeur font 50vw ?
  9. Pourquoi dimensionner le texte en rem plutôt qu'en px ?
    • Il suit le réglage de taille de texte du navigateur du lecteur
    • Il est toujours plus petit
    • Il se charge plus vite
  10. Un formulaire signale les erreurs uniquement par une bordure rouge. Que manque-t-il ?
    • Un message ou une icône, car la couleur seule ne suffit pas
    • Un rouge plus foncé
    • Rien
L'essentiel
  • Couleurs nommées, hexadécimales, rgb() et hsl() ; une barre oblique ajoute l'alpha.
  • WCAG 1.4.3 : 4.5:1 pour un texte normal, 3:1 pour un grand texte ; jamais la couleur seule.
  • px est fixe ; em suit la taille de police de l'élément ; rem suit celle de la racine (16px par défaut).
Sources de ce cours (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Consulté le: 2026-10-17