A11y Canvas
← Couleur
CouleurYuliana Krasulya

Couleurs : ce que le contraste mesure, ce que l'œil ressent

Un rapport de contraste à 4,5:1, c'est nécessaire — mais ce n'est pas suffisant. La vibration optique, le daltonisme, la fatigue visuelle en dark mode : autant de phénomènes que WCAG 2.1 ne mesure pas. Ce guide couvre les deux dimensions de l'accessibilité chromatique — les ratios et la perception — avec les combinaisons à éviter, celles qui tiennent la distance, et ce que prépare WCAG 3.0.

Quand on parle d'accessibilité chromatique, le réflexe immédiat est de lancer un contrast checker. Rapport 4,5:1 pour le texte courant, 3:1 pour le grand texte — case cochée, on avance. Sauf que ce ratio ne raconte qu'une partie de l'histoire.

WCAG mesure la différence de luminance relative entre deux couleurs. L'œil humain, lui, interprète bien d'autres choses : la vibration optique entre deux teintes saturées, la confusion induite par le daltonisme, la fatigue provoquée par un fond qui "saute" visuellement. Un accord chromatique peut passer tous les tests et rester désagréable à regarder pendant plus de trois secondes.

Cet article couvre les deux dimensions — le mesurable et le perceptuel — pour te donner une vision complète de ce qui fonctionne, et pourquoi.


Ce que WCAG mesure (et pourquoi c'est nécessaire mais insuffisant)

Le standard WCAG 2.1 définit trois niveaux de contraste pour le texte :

  • Niveau AA (minimum) : 4,5:1 pour le texte normal, 3:1 pour le texte agrandi (18pt+ ou 14pt+ en gras)

  • Niveau AAA (renforcé) : 7:1 pour le texte normal, 4,5:1 pour le texte agrandi

  • Éléments d'interface et graphiques : 3:1 minimum (boutons, icônes informatives, bordures significatives)

Le calcul repose sur la luminance relative — une valeur entre 0 (noir absolu) et 1 (blanc pur) qui tient compte de la non-linéarité de la perception humaine de la luminosité. Le ratio (L1 + 0.05) / (L2 + 0.05) donne un chiffre entre 1:1 (aucun contraste) et 21:1 (noir sur blanc).

Ce modèle est robuste pour mesurer la lisibilité de base. Mais il ne tient pas compte de :

  • La confusion chromatique : deux couleurs très différentes en teinte peuvent avoir une luminance quasi identique pour un utilisateur daltonien.

  • La vibration optique (chromostereopsis) : certaines paires de couleurs saturées créent une illusion de mouvement ou de profondeur qui épuise les yeux.

  • La taille et le contexte : un petit texte blanc sur fond violet foncé peut techniquement "passer" en AA tout en restant pénible à déchiffrer sur un écran basse résolution.


Les combinaisons à éviter

Rouge + vert

La pire erreur dans les interfaces. Environ 8 % des hommes et 0,5 % des femmes souffrent de deutéranomalie ou de protanomalie — les deux formes les plus fréquentes de daltonisme, qui affectent précisément la perception du rouge et du vert. Pour eux, ces deux couleurs peuvent paraître identiques ou quasi indiscernables.

Le problème concret : utiliser uniquement la couleur rouge pour les erreurs et vert pour les succès, sans icône ni texte d'accompagnement. C'est l'un des anti-patterns les plus documentés en accessibilité numérique.

La règle : la couleur ne doit jamais être le seul vecteur d'information. Toujours doubler avec une icône, un label, un pattern ou un style typographique.

Gris clair sur blanc (et toute combinaison pâle sur pâle)

L'un des défauts les plus fréquents des interfaces "minimalistes" actuelles. Un texte #9CA3AF sur fond #FFFFFF donne un ratio autour de 2,5:1 — loin du minimum AA. Pourtant, cette combinaison est omniprésente dans les UI kits modernes, souvent utilisée pour les placeholders, labels secondaires ou textes d'aide.

Le problème s'aggrave avec l'âge (la sensibilité au contraste diminue naturellement), la fatigue oculaire, un écran de mauvaise qualité ou un environnement lumineux.

Le seuil à retenir : si tu ne peux pas lire le texte en plissant légèrement les yeux, il ne passe probablement pas AA.

Jaune vif sur blanc

#FFFF00 sur #FFFFFF est visuellement agressif et pourtant le contraste est catastrophique (1,07:1). C'est le piège des couleurs "vives" : une forte saturation ne compense pas une luminance proche de celle du fond. Le jaune pur est l'une des couleurs les plus lumineuses du spectre visible — le mettre sur blanc le rend pratiquement invisible.

Bleu + rouge (et les paires "primaires" saturées)

Le bleu est mal traité par la rétine humaine : les cônes S (sensibles au bleu) sont moins nombreux que les cônes M et L, et leur résolution spatiale est inférieure. Un texte bleu pur sur fond rouge — ou l'inverse — produit un effet de "flou chromatique" et de vibration qui rend la lecture physiquement inconfortable.

Plus généralement, toute paire de couleurs complémentaires à saturation maximale (bleu/orange, violet/jaune, vert/magenta) provoque un phénomène appelé chromostereopsis : le cerveau tente de "mettre au point" sur deux longueurs d'onde différentes simultanément, créant une illusion de profondeur ou de tremblement. Le résultat : fatigue oculaire, parfois maux de tête.

Penn State Accessibility résume bien le problème : "Vibrating color combinations should be avoided because they can cause headaches and make content virtually unreadable."


Les combinaisons qui fonctionnent

Texte très sombre sur fond très clair (et vice versa)

La combinaison canonique. Noir pur #000000 sur blanc pur #FFFFFF donne 21:1 — le maximum théorique. En pratique, la plupart des design systems préfèrent adoucir légèrement :

  • Texte #1A1A1A sur fond #FAFAFA → ratio ~19:1, moins de fatigue pour la lecture longue

  • Texte #0B0F1F sur fond #FDFDFD → même effet, légère teinte froide

Ce choix fonctionne pour tout le monde : daltoniens, malvoyants, utilisateurs sur écrans bas de gamme.

Bleu foncé sur blanc ou crème

#003366 sur #FFFFFF (ratio ~12:1) est le choix de confiance par excellence. Banques, services publics, interfaces médicales : ce n'est pas un hasard. La teinte bleue n'interfère pas avec le daltonisme rouge-vert, la luminance est élevée, et la connotation psychologique (fiabilité, professionnalisme) renforce la lisibilité perçue.

Dark mode bien calibré

La tentation en mode sombre est d'aller vers les extrêmes : fond #000000, texte #FFFFFF. C'est une erreur. Le blanc pur sur noir absolu crée un halo (halation) qui rend la lecture fatigante, notamment pour les utilisateurs astigmates.

Les recommandations actuelles convergent vers :

  • Fond : entre #0D0D0D et #1A1A1A

  • Texte principal : #E8E8E8 ou #EAEAEA — jamais le blanc pur

  • Texte secondaire : autour de #9B9FAA

Pour les données et graphiques

Les palettes monochromatiques ou séquentielles (variations de luminance sur une seule teinte) sont plus robustes que les palettes arc-en-ciel. ColorBrewer, conçu pour la cartographie scientifique, reste une référence solide : il propose des palettes testées pour le daltonisme et l'impression en niveaux de gris.

Règle générale : ne jamais distinguer deux catégories uniquement par la teinte. Varier aussi la luminance, la forme, le pattern.


Ce que WCAG ne vérifie pas encore

Le standard actuel présente une limitation reconnue : il traite tous les textes de même taille de façon identique, alors que la lisibilité dépend aussi du contexte, de l'épaisseur de fonte, et de la nature de l'arrière-plan.

APCA (Advanced Perceptual Contrast Algorithm) est la méthode proposée pour WCAG 3.0. Elle calcule un "contraste lightness" en tenant compte du sens de lecture (texte sombre sur fond clair vs texte clair sur fond sombre), de la police et de sa graisse. Les résultats peuvent diverger significativement de WCAG 2.1 sur certains cas — notamment les textes légers sur fonds colorés profonds.

Pour un outil comme Frontend Studio, intégrer les deux métriques simultanément offre une information bien plus complète qu'un simple ratio WCAG.


Checklist pratique

Avant de valider une combinaison chromatique :

WCAG

  • Ratio ≥ 4,5:1 pour le texte courant

  • Ratio ≥ 3:1 pour les éléments d'interface et le texte agrandi

  • Testé avec un outil de vérification (WebAIM Contrast Checker, Colour Contrast Analyser)

Daltonisme

  • La combinaison n'est pas rouge/vert comme seul vecteur d'information

  • Testé via un simulateur de daltonisme (Coblis, Sim Daltonism, DevTools)

  • Chaque information véhiculée par la couleur est doublée (icône, texte, forme)

Perception

  • Pas de paires complémentaires à saturation maximale côte à côte (vibration)

  • En dark mode, fond et texte évitent le noir pur et le blanc pur

  • Lisible sans effort sur un écran de qualité moyenne, dans un environnement lumineux


Ressources

  • WCAG 2.1 — Understanding Contrast (Minimum) — W3C

  • Colors and Luminance — MDN Web Docs

  • Vibrating Colors — Penn State Accessibility

  • ColorBrewer — palettes de données accessibles

  • APCA Contrast Calculator — futur standard WCAG 3.0