Vérificateur de contraste des couleurs

Collez vos deux couleurs dans n'importe quel format CSS. L'outil calcule le contraste selon WCAG 2.2 ou APCA, propose une correction si besoin et construit un petit système de design accessible à partir de votre paire.

Résultat

Contraste WCAG 2.24,65:1

Lisible

AA pour le texte normal

  • Texte normalAA, Réussi
  • Texte largeAAA, Réussi
  • InterfaceAA, Réussi

Améliorations possibles

Les couleurs les plus proches des vôtres qui atteignent 7:1, le niveau AAA. Cliquez sur une combinaison pour l'appliquer, vous pourrez annuler.

Votre système de design

Typographie, couleurs et composants construits à partir de votre paire. Chaque contraste est vérifié avec la méthode choisie en haut de l'outil : WCAG 2.2.

Typographie

Chaque style de votre échelle, dans vos couleurs. WCAG 2.2 indique s'il est conforme, APCA s'il est lisible et, sinon, la taille minimale.

Typographie
TailleStyleAperçuWCAG 2.2APCA
48pxDisplay700 · interligne 1.1Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AAA
Lisible
40pxTitre 1700 · interligne 1.15Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AAA
Lisible
32pxTitre 2700 · interligne 1.2Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AAA
Lisible
24pxTitre 3600 · interligne 1.3Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AAA
Lisible
20pxTitre 4600 · interligne 1.4Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Lisible
18pxParagraphe large400 · interligne 1.6Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Trop petit31 px minimum
16pxParagraphe400 · interligne 1.6Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Trop petit31 px minimum
14pxLibellé600 · interligne 1.4Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Trop petit17 px minimum
14pxPetit texte400 · interligne 1.5Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Trop petit31 px minimum
12pxLégende500 · interligne 1.4Portez ce vieux whisky au juge blond qui fume
ConformeNiveau AA
Trop petit19 px minimum

Couleurs

Les couleurs dérivées gardent la teinte de votre texte. Leur luminosité est calculée pour atteindre un contraste précis, comme dans Harmonizer d'Evil Martians.

Base

  • Arrière-planArrière-plan de la page
  • SurfaceCartes, zones groupées
  • TexteTexte principal4,65:1, Réussi, sur arrière-plan, cible 4,50:1
  • Texte secondaireAide, légendes, placeholder4,59:1, Réussi, sur arrière-plan, cible 4,50:1
  • Texte désactivéÉléments inactifs, sans exigence

Bordures

  • BordureChamps, cases, focus3,03:1, Réussi, sur arrière-plan, cible 3,00:1
  • SéparateurLignes décoratives, sans exigence
  • FocusAnneau de focus4,65:1, Réussi, sur arrière-plan, cible 3,00:1

Action

  • AccentArrière-plan du bouton principal4,65:1, Réussi, sur arrière-plan, cible 3,00:1
  • Accent survoléBouton principal au survol5,91:1, Réussi, sous libellé d'accent, cible 4,50:1
  • Libellé d'accentTexte du bouton principal4,65:1, Réussi, sur accent, cible 4,50:1

Statuts

  • SuccèsTexte de confirmation4,56:1, Réussi, sur surface succès, cible 4,50:1
  • Surface succèsArrière-plan des confirmations
  • AvertissementTexte d'avertissement4,52:1, Réussi, sur surface avertissement, cible 4,50:1
  • Surface avertissementArrière-plan des avertissements
  • ErreurTexte d'erreur4,54:1, Réussi, sur surface erreur, cible 4,50:1
  • Surface erreurArrière-plan des erreurs

Composants

Les mêmes couleurs appliquées à une interface. Survolez et tabulez pour voir les états.

Nous l'utilisons seulement pour vous répondre.
Saisissez une adresse e-mail valide.
Rapport d'accessibilitéNouveau12 critères vérifiés, 3 à corriger.Lire la documentation

Modifications enregistrées.

Votre session expire dans 5 minutes.

Le paiement a échoué. Vérifiez votre carte.

Exporter

Les couleurs et la typographie en variables, prêtes à coller.

/* Généré par le vérificateur de contraste Includdy, à partir de rgb(0 97 243) sur rgb(246 241 228), contrastes vérifiés en WCAG 2.2 */
:root {
  /* Arrière-plans */
  --color-bg: rgb(246 241 228);
  --color-bg-surface: #f3efe5;
  --color-bg-accent: rgb(0 97 243);
  --color-bg-accent-hover: #0253d0;
  --color-bg-success: #e1e6d2;
  --color-bg-warning: #ede2d0;
  --color-bg-danger: #f6dfd2;

  /* Textes */
  --color-text: rgb(0 97 243);
  --color-text-secondary: #0262f4;
  --color-text-disabled: #7eadfe;
  --color-text-on-accent: rgb(246 241 228);
  --color-text-success: #047534;
  --color-text-warning: #8f5a02;
  --color-text-danger: #c61e29;

  /* Bordures */
  --color-border: #4487ff;
  --color-border-divider: #bfcee8;
  --color-border-focus: #0061f3;

  /* Typographie */
  /* Display */
  --font-size-display: 3rem;
  --line-height-display: 1.1;
  --font-weight-display: 700;
  --letter-spacing-display: -0.02em;

  /* Titre 1 */
  --font-size-h1: 2.5rem;
  --line-height-h1: 1.15;
  --font-weight-h1: 700;
  --letter-spacing-h1: -0.02em;

  /* Titre 2 */
  --font-size-h2: 2rem;
  --line-height-h2: 1.2;
  --font-weight-h2: 700;
  --letter-spacing-h2: -0.01em;

  /* Titre 3 */
  --font-size-h3: 1.5rem;
  --line-height-h3: 1.3;
  --font-weight-h3: 600;
  --letter-spacing-h3: -0.01em;

  /* Titre 4 */
  --font-size-h4: 1.25rem;
  --line-height-h4: 1.4;
  --font-weight-h4: 600;

  /* Paragraphe large */
  --font-size-body-large: 1.125rem;
  --line-height-body-large: 1.6;
  --font-weight-body-large: 400;

  /* Paragraphe */
  --font-size-body: 1rem;
  --line-height-body: 1.6;
  --font-weight-body: 400;

  /* Libellé */
  --font-size-label: 0.875rem;
  --line-height-label: 1.4;
  --font-weight-label: 600;

  /* Petit texte */
  --font-size-small: 0.875rem;
  --line-height-small: 1.5;
  --font-weight-small: 400;

  /* Légende */
  --font-size-caption: 0.75rem;
  --line-height-caption: 1.4;
  --font-weight-caption: 500;
  --letter-spacing-caption: 0.01em;
}

Contraste des couleurs et accessibilité : calcul, seuils WCAG et RGAA

Le vérificateur en haut de cette page compare deux couleurs et rend un chiffre, de 1:1 à 21:1. Ce guide explique d'où vient ce chiffre et quel seuil il doit atteindre selon ce que vous colorez.


Mikhail ShaymardanovExpert en Qualité et Accessibilité Web

La clarté avant la teinte


#Le contraste des couleurs en accessibilité

Le contraste des couleurs, c'est l'écart de clarté entre un texte et son arrière-plan : 1:1 pour deux couleurs de même clarté, 21:1 pour du noir sur du blanc. Il compte d'abord pour les personnes malvoyantes et pour celles dont la vue baisse avec l'âge.

La teinte n'entre presque pas dans le calcul. Un rouge #FF0000 et un vert #009400 donnent 1,00:1 : pour la formule, ce sont deux gris identiques. Le W3C l'a voulu ainsi, car une personne qui distingue mal les couleurs ne peut pas compter sur la teinte pour lire.

Ce que voit l'œil
Bannière de marché de Noël, texte rouge sur arrière-plan vert.
Ce que mesure la formule
La même bannière en niveaux de gris, le texte a disparu.

Description de l'image :

À gauche, une bannière annonce le « Marché de Noël des artisans », samedi 13 décembre, place des Tanneurs. Tout le texte est rouge vif (#FF0000) sur un arrière-plan vert vif (#009400). Les deux couleurs se distinguent par la teinte, mais le texte vibre et se lit mal.

À droite, la même bannière où chaque couleur est remplacée par le gris de même clarté. Le texte et l'arrière-plan deviennent le même gris moyen : le rectangle paraît uni et plus aucun mot n'est visible. C'est ce que mesure le ratio.

La formule ne voit que la clarté : ce rouge et ce vert ont la même, d'où 1,00:1. Pour juger une paire de couleurs, imaginez-la en noir et blanc.

Les seuils viennent des WCAG (Web Content Accessibility Guidelines), que reprend le RGAA (Référentiel général d'amélioration de l'accessibilité). Voir aussi le glossaire : ratio de contraste.


#Calcul du ratio de contraste

Un texte bleu vif #0061F3 sur un arrière-plan jaune #FFD23F saute aux yeux. Le vérificateur répond pourtant 3,63:1 : échec pour un texte courant.

Description textuelle de l'animation

Une fiche produit de boutique en ligne : une photo de théière, le nom « Théière en grès », le prix 29,90 € et un bouton jaune « Ajouter au panier » écrit en bleu vif, à la taille d'un texte courant. Le personnage dd, le logo d'Includdy avec des bras et des jambes, entre par la gauche, regarde le bouton et lève le pouce. La question s'affiche : ce bouton est-il assez contrasté ?

Une étiquette « Vérificateur de contraste » apparaît sous la fiche et un trait lumineux balaie le bouton, comme un scanner.

Un tampon rouge « Échec » tombe de travers sur le coin du bouton. Dessous, en gros : ratio 3,63:1, il faut au moins 4,5:1. dd sursaute.

Le mot ratio clignote. Question : ce ratio, qu'est-ce que c'est, et d'où sort 3,63 ? Un point d'interrogation flotte au-dessus de dd.

La fiche s'efface. Le bouton jaune est agrandi jusqu'à montrer un seul pixel de l'écran : un carré fait de trois bandes lumineuses, rouge, verte et bleue, qui s'allument l'une après l'autre.

Sous les trois bandes s'écrivent leurs noms : rouge, vert, bleu. Chaque pixel mélange ces trois lampes pour fabriquer une couleur.

Le pixel disparaît. En haut apparaissent les deux couleurs du bouton, à gauche l'arrière-plan jaune #FFD23F, à droite le texte bleu #0061F3. Les mots rouge, vert et bleu montent se placer au-dessus de chaque colonne. Chaque code se coupe en trois pastilles : FF, D2 et 3F pour le jaune, 00, 61 et F3 pour le bleu.

Sous chaque pastille s'écrit le réglage de sa lampe, de 0 à 255 : 255, 210 et 63 pour le jaune, 0, 97 et 243 pour le bleu.

Sous chaque réglage se glisse une barre de fraction et le nombre 255 : chaque réglage est divisé par 255, le maximum possible, pour obtenir une valeur relative. Un instant plus tard, chaque fraction laisse place à son résultat, de 0 à 1 : 1, 0,82 et 0,25 pour le jaune, 0, 0,38 et 0,95 pour le bleu.

Des barres montent pour montrer la lumière réelle que l'écran émet pour chaque part, avec leur valeur au-dessus. Pour le jaune : 1, 0,64 et 0,05. Pour le bleu : 0, 0,12 et 0,90.

dd explique que les codes de couleur sont réglés pour l'œil, qui distingue mieux les nuances dans le sombre que dans le clair : ils ne mesurent donc pas directement la quantité de lumière. Pour la retrouver, on élève chaque part à la puissance 2,2 environ. Le mot « puissance » et le nombre 2,2 s'affichent en grand, puis le 2,2 se réduit et vient se placer en exposant à côté de chaque part. Chaque barre redescend alors à sa lumière réelle : 0,82 donne 0,64, 0,25 donne 0,05, 0,38 donne 0,12 et 0,95 donne 0,90. Les valeurs affichées viennent de la formule exacte des WCAG, un peu plus fine, dont la puissance 2,2 est une bonne approximation.

Les colonnes s'effacent. Une courbe en cloche sur l'arc-en-ciel montre la sensibilité de l'œil selon la couleur de la lumière : haute dans le vert, faible dans le bleu. Près des trois lampes, des badges donnent la part de chacune dans le blanc de l'écran, qui dépend de la sensibilité de l'œil et de la lumière de chaque lampe : rouge 21 %, vert 72 %, bleu 7 %. Les colonnes reviennent et les badges descendent sous les barres. Chaque barre est multipliée par son badge et rapetisse : pour le jaune, 0,213, 0,461 et 0,004 ; pour le bleu, 0,000, 0,085 et 0,065 (calculés avec les valeurs exactes, puis arrondis).

Dans chaque colonne, les trois barres s'empilent et leurs valeurs s'additionnent : 0,213 + 0,461 + 0,004 ≈ 0,677 pour le jaune (la somme exacte, les valeurs affichées étant arrondies), 0,000 + 0,085 + 0,065 = 0,150 pour le bleu. Chaque pile devient un gris : un gris clair de 0,68 pour le jaune, un gris foncé de 0,15 pour le bleu, une fois arrondis.

Les deux gris montent prendre leur place dans un calcul : (0,68 + 0,05) / (0,15 + 0,05) ≈ 3,63 ; le calcul exact, (0,6771 + 0,05) / (0,1502 + 0,05), donne 3,63. Une note précise que 0,05 représente la lumière de la pièce reflétée par l'écran. En comptant la lumière de la pièce, le jaune émet 3,63 fois plus de lumière que le bleu : c'est le ratio. dd pointe le résultat et hoche la tête.

Pour finir, la fiche produit revient avec son tampon « Échec ». dd demande comment réparer ce bouton. Le bleu du texte fonce jusqu'à #0050C8 : le tampon rouge s'envole, un tampon vert « Réussi » le remplace, et la ligne devient « Ratio 4,88:1, au-dessus de 4,5:1 ». dd lève le pouce.

Pour finir, une animation du vérificateur de contraste d'Includdy, dans une fenêtre de navigateur à l'adresse includdy.com/contraste. Le vérificateur s'assemble : les onglets WCAG 2.2 et APCA, les champs « Couleur du texte » et « Couleur d'arrière-plan », la carte de résultat et l'aperçu ; la caméra glisse d'une partie à l'autre et un pointeur fait chaque geste. Au départ, du texte noir sur du blanc : 21,00:1. Légende : « Essayons ce bleu et ce jaune dans le vérificateur. » Le pointeur tape #0061F3 dans le champ du texte, puis #FFD23F dans celui de l'arrière-plan. Légende : « Saisissez la couleur du texte, puis celle de l'arrière-plan. » La carte passe au rouge : 3,63:1, « Seulement en grand ». dd montre le score. Légende : « Verdict immédiat : contraste insuffisant pour du texte normal. » Sous la carte, « Améliorations possibles » s'ouvre avec trois combinaisons proches : texte ajusté 4,54:1, texte et arrière-plan ajustés 4,52:1, arrière-plan ajusté 4,50:1. Légende : « L'outil propose alors des couleurs proches qui réussissent le test. » Le pointeur clique sur « Texte ajusté » : le texte devient #004fe1, la carte passe au vert, 4,54:1, « Lisible, AA pour le texte normal ». Légende : « Un clic, et votre texte devient lisible. » Pour finir, la fenêtre se range à gauche et une carte apparaît à droite : un QR code qui ouvre includdy.com/contraste, l'adresse includdy.com/contraste en grand et la mention « Gratuit, sans inscription ». dd lève le pouce. Légende finale : « Gratuit et sans inscription : includdy.com/contraste ».

Pour finir, la fenêtre et la carte s'effacent. dd reste seul sur la scène et fait une petite danse : il pointe le doigt en l'air, remue un derrière qu'il n'a pas et fait un clin d'œil. Puis il saute à sa place dans le mot « inclusion buddy » : ses deux lettres en deviennent le « dd » bleu, et une note précise « inclusion buddy : le compagnon de l'inclusion ». Le mot se replie en « includdy », le logo vient au premier plan, et le slogan s'affiche dessous pendant que la voix le dit : « L'accessibilité web rendue simple. Gagnez du temps en assurant votre conformité. »

  1. Trois lampes par pixel. L'écran mélange une lampe rouge, une verte et une bleue, réglées de 0 à 255. Le code #0061F3 donne ces réglages : 0, 97 et 243.
  2. Une part de 0 à 1. Chaque réglage est divisé par 255, le maximum possible : 97 devient 0,38, et 243 devient 0,95.
  3. La vraie lumière. Les codes sont réglés pour l'œil, qui voit mieux les nuances dans le sombre : ils ne mesurent pas la quantité de lumière. Pour la retrouver, on élève chaque part à la puissance 2,2 environ : 0,38 donne 0,12, et 0,95 donne 0,90.
  4. La sensibilité de l'œil. L'œil est bien plus sensible au vert. Selon cette sensibilité et la lumière de chaque lampe, sur 100 parts de clarté, le vert en apporte 72, le rouge 21, le bleu 7. Chaque lumière est multipliée par son poids : la lampe bleue, presque à fond, ne compte plus que pour 0,065.
  5. L'addition. Les trois résultats s'additionnent : on obtient la clarté de la couleur, de 0 à 1, que les WCAG appellent la luminance relative. Notre bleu vaut 0,1502, le jaune monte à 0,6771.
  6. La division. On divise le plus clair par le plus foncé, en ajoutant 0,05 de chaque côté pour la lumière de la pièce reflétée par l'écran : (0,6771 + 0,05) / (0,1502 + 0,05) ≈ 3,63.

En noir et blanc, ces deux couleurs deviendraient un gris foncé et un gris clair assez proches : c'est cet écart que mesure le ratio. Le noir (0) sur le blanc (1) donne 21, d'où le plafond de 21:1. Le même poids du vert explique pourquoi le vert pur #00FF00 sur blanc ne donne que 1,37:1.


#Taux de contraste minimum WCAG et RGAA : 4,5:1, 3:1 et 7:1

Le seuil dépend de la taille du texte et du niveau visé : AA, celui que demande la loi, ou AAA, plus exigeant.

Ratio de contraste minimum selon la taille du texte et le niveau WCAG
Type de texteNiveau AANiveau AAA
Texte courant4,5:17:1
Grand texte : 24 px, ou 14 pt gras, environ 18,7 px (18,5 px dans le RGAA)3:14,5:1

Le critère 3.2 du RGAA fixe le grand texte à 24 px, ou 18,5 px en gras. Un intertitre de 18 px en gras reste donc à 4,5:1.

Page d'ateliers de céramique avec un titre et un intertitre en terre cuite.

Description de l'image :

Page d'un atelier de céramique, « Grès & Sel ». En haut, le logo et quatre icônes : recherche, compte, favoris, panier.

Le titre « Nos ateliers du samedi » (repère A) est écrit en 24 px, en terre cuite #C0703E, sur blanc. Dessous, un court paragraphe gris foncé présente les ateliers.

Une carte suit, avec la photo d'un mug en grès. Son intertitre « Initiation au tournage » (repère B) a la même couleur terre cuite, en 18 px gras. Dessous : une description, « Samedi 10 h, 65 € » et un bouton noir « Réserver ».

Les deux textes ont exactement la même couleur ; seule leur taille change le seuil à atteindre.

Une même couleur peut passer en titre et échouer en intertitre. À 3,73:1, cette terre cuite suffit pour le titrerepère A, en 24 px, donc du grand texte, mais pas pour l'intertitrerepère B, en 18 px gras, qui demande 4,5:1. Vérifiez chaque couleur à la plus petite taille où vous l'employez.
  • Le gris #6B7280 du texte secondaire atteint 4,83:1 sur blanc et passe.
  • Le gris #9CA3AF des textes d'exemple dans les champs n'atteint que 2,54:1.
  • #777777 donne 4,48:1 et échoue : le ratio ne s'arrondit jamais.

Les textes secondaires sont ceux qui frôlent le plus souvent le seuil. Sur la fiche produit ci-dessous, regardez la ligne de description sous le nom du mug.

Échoue
Fiche produit d'un mug, description en gris #777777.
Passe
La même fiche, description en gris #374151.

Description de l'image :

Deux fiches produit identiques : à gauche la photo d'un mug en grès moucheté, à droite son nom « Mug moucheté », une ligne de description, le prix 28,00 € et un bouton noir « Ajouter ».

La description « Grès fait main à Nantes, 30 cl. Passe au lave-vaisselle. » est en gris #777777 dans la première fiche (repère A) et en gris #374151 dans la seconde (repère B). Dans la seconde, le texte est aussi un peu plus grand, 16 px.

Une description griserepère A peut sembler lisible et échouer de peu : 4,48:1. La description plus foncéerepère B atteint 10,31:1 et passe aussi APCA à 16 px. Vérifiez les textes secondaires : ce sont eux qui échouent le plus souvent.

Pourquoi 4,5 ? Une bonne vue lit à partir de 3:1, et vers 80 ans il faut environ une fois et demie plus de contraste.


#Contraste des boutons, champs de formulaire et icônes

Le critère 1.4.11 (3.3 du RGAA) demande 3:1 pour ce qui permet de repérer un élément d'interface : bordure d'un champ sans couleur d'arrière-plan, focus, coche d'une case, icône seule dans un bouton.

Sur un champ, la bordure dessine la zone où l'on écrit. La bordure en gris très clair #E5E7EB donne 1,24:1 sur blanc : au soleil, le champ disparaît. Comparez les contours du champ e-mail et de la case à cocher.

Échoue
Formulaire de commande, champs bordés d'un gris presque invisible.
Passe
Le même formulaire, champs bordés de gris moyen bien visible.

Description de l'image :

Deux versions du formulaire de commande d'une fromagerie, étape 1 sur 3, « Vos coordonnées ». Chacune contient le champ « Nom complet » rempli avec « Claire Moreau », le champ « Adresse e-mail » rempli avec « [email protected] », une case à cocher pour recevoir l'arrivage du vendredi, et un bouton brun foncé « Continuer vers le retrait ».

Dans la première version, les bordures des champs et de la case sont gris très clair, #E5E7EB : sur le blanc, on devine à peine les contours (repère A sur le champ e-mail). Dans la seconde, elles sont gris moyen, #6B7280, et chaque champ se détache nettement (repère B).

Un champ doit se repérer sans qu'on clique dedans. La bordure pâlerepère A, à 1,24:1, disparaît sur un écran au soleil ; la bordure gris moyenrepère B, à 4,83:1, reste visible. Vérifiez aussi les cases à cocher et les boutons radio.

Une icône seule, sans mot à côté, est la seule indication de ce que fait le bouton : elle doit elle aussi atteindre 3:1. Observez les quatre icônes de l'en-tête.

Échoue
En-tête de boutique avec des icônes recherche, compte, favoris et panier en gris très pâle.
Passe
Le même en-tête, icônes en gris foncé.

Description de l'image :

Deux versions de l'en-tête d'une boutique de céramique. À gauche, le logo « Grès & Sel » ; à droite, quatre icônes seules, sans texte : loupe, silhouette du compte, cœur des favoris, sac du panier. Sous l'en-tête, le fil d'Ariane et le titre « Bols en grès ».

Dans la première version, les quatre icônes sont gris très pâle, #D1D5DB (repère A), presque invisibles. Dans la seconde, elles sont gris foncé, #4B5563 (repère B).

Sans texte à côté, l'icône est la seule indication du bouton. Les icônes pâlesrepère A, à 1,47:1, s'effacent ; les icônes gris foncérepère B, à 7,56:1, se repèrent d'un coup d'œil.

L'arrière-plan d'un bouton, lui, peut se fondre dans la page si son texte suffit à le repérer ; c'est ce texte qui doit atteindre 4,5:1. Le blanc sur l'orange #FF6B00 des boutons d'achat ne donne que 2,86:1, et le rouge d'erreur #EF4444 sur blanc, 3,76:1.

Échoue
Bouton Ajouter au panier orange vif avec texte blanc.
Passe
Le même bouton en orange brûlé.

Description de l'image :

Deux versions du bloc d'achat d'un « Saladier en grès, 24 cm » à 46,00 €. On y voit un sélecteur de quantité réglé sur 1, un grand bouton arrondi « Ajouter au panier » avec une icône de sac, et la mention « Expédié sous 48 h, emballage sans plastique ».

Dans la première version, le bouton est orange vif #FF6B00 avec un texte blanc qui manque de netteté (repère A). Dans la seconde, il est orange brûlé #C2410C, toujours orange, et le texte blanc se lit nettement (repère B).

Une couleur vive n'est pas forcément contrastée. Le texte blanc sur cet orangerepère A ne donne que 2,86:1 ; sur la même teinte plus foncéerepère B, il atteint 5,18:1. Pour corriger un bouton, gardez la teinte et baissez la clarté.

Le contour de focus montre l'élément atteint avec la touche Tab. S'il se confond avec l'arrière-plan, une personne qui navigue au clavier perd sa place dans la page. Dans le menu ci-dessous, le focus est sur « Commander ».

Échoue
Menu d'une boulangerie, le lien Commander entouré d'un contour bleu très pâle.
Passe
Le même menu, contour bleu foncé bien visible.

Description de l'image :

Deux versions de l'en-tête d'une boulangerie, « Boulangerie Fournier », avec un bouton brun « Mon panier » et un menu de quatre liens : « Nos pains », « Commander », « Horaires », « La boutique ». Dessous, un bandeau crème annonce « Pain au levain, cuit chaque matin ».

Le focus du clavier est sur « Commander ». Dans la première version, il est entouré d'un contour bleu ciel #BFDBFE, qu'on distingue à peine du blanc (repère A). Dans la seconde, le contour est bleu foncé #1D4ED8 et saute aux yeux (repère B).

Le contour de focus pâlerepère A, à 1,42:1, passe inaperçu ; le contour bleu foncérepère B atteint 6,70:1. Parcourez votre site avec la touche Tab : vous devez toujours voir où vous êtes.

#Exceptions au contraste minimum : logos, décor, éléments désactivés

Aucun seuil ne s'applique au texte d'un logo, à un élément désactivé, au texte purement décoratif ni au texte présent par hasard dans une photo. Une icône qui répète le mot écrit à côté est exemptée aussi. La page ci-dessous en réunit quatre.

Page panier d'une épicerie en ligne, quatre éléments numérotés.

Description de l'image :

Page d'une épicerie en ligne, « comptoir vert ». En haut, le logo : une feuille et le nom en vert clair (repère A), puis les icônes recherche et panier.

Le titre « Fruits et légumes du jour » est en vert très foncé. À sa droite, le mot « Bio » est écrit en très grand, dans un vert presque blanc (#E8F5EE) : c'est une décoration (repère B). Dessous, la ligne « Livraison offerte dès 40 € » commence par une icône de camion gris clair (repère C).

En bas, l'encadré « Votre panier » liste un panier de saison à 24,90 € et un miel de châtaignier à 9,50 €, pour un total de 34,40 €. La mention « Choisissez un créneau de retrait pour continuer » précède le bouton « Valider la commande », grisé et désactivé (repère D).

Quatre éléments n'ont aucun seuil sur cette page : le logorepère A, le mot « Bio » en filigranerepère B, l'icône du camionrepère C, que le texte répète, et le bouton désactivérepère D. Les prix, les liens et les boutons actifs, eux, doivent atteindre les seuils.

La charte graphique, elle, n'exempte que le logo : les boutons et liens dans la couleur de marque restent soumis aux seuils. Si la couleur de la marque est trop claire pour porter du texte, gardez-le pour le logo et prenez une version plus foncée pour les boutons et les liens.

Échoue
Fiche produit d'une épicerie, bouton et lien dans le vert de marque #4CAF7A.
Passe
La même fiche, bouton et lien en vert plus foncé #1A8755.

Description de l'image :

Deux versions de la fiche « Panier de saison, 6 kg » de l'épicerie « comptoir vert » : une description, le prix 24,90 €, un grand bouton « Commander ce panier » et la phrase « Prêt en 2 h. Voir les points de retrait », dont la fin est un lien souligné.

Dans la première version, le bouton a un arrière-plan vert clair #4CAF7A avec un texte blanc (repère A), et le lien, en gras, est écrit dans ce même vert (repère B). Dans la seconde, le bouton et le lien passent au vert plus foncé #1A8755 (repères C et D). Le logo reste vert clair dans les deux.

Hors du logo, la couleur de marque suit les mêmes seuils. Ce vert donne 2,72:1 avec le blanc : le boutonrepère A et le lienrepère B échouent. Un vert plus foncé de la même teinte atteint 4,53:1, pour le boutonrepère C comme pour le lienrepère D, et reste reconnaissable.

#Couleur et contraste des liens dans un texte

Un lien distingué par sa seule couleur doit atteindre 4,5:1 avec l'arrière-plan et 3:1 avec le texte voisin (technique G183). Le bleu par défaut #0000EE atteint 9,40:1 sur blanc, mais 2,23:1 face à un texte noir : sans son soulignement par défaut, on le distinguerait mal du texte.

Soulignez vos liens : l'exigence face au texte voisin disparaît, celle face à l'arrière-plan reste. Un soulignement qui n'apparaît qu'au survol ne suffit pas.

Échoue
Paragraphe de blog avec un lien bleu non souligné.
Passe
Le même paragraphe, lien bleu souligné.

Description de l'image :

Deux versions d'un article du blog d'une boulangerie, « Le levain, notre ingrédient le plus lent ». Le paragraphe est en noir sur blanc et contient un lien, « la recette du pain de campagne », en bleu.

Dans la première version, le lien n'est pas souligné : seule sa couleur bleue le distingue du texte noir qui l'entoure (repère A, au début de sa ligne). Dans la seconde, le même lien bleu est souligné (repère B).

Un lien repéré par sa seule couleur doit aussi se détacher du texte voisin : le lien bleurepère A n'atteint que 2,23:1 face au noir. Le lien soulignérepère B se repère sans la couleur, et seul compte son contraste avec le blanc, 9,40:1.

#Contraste du texte transparent ou posé sur une image

On mesure la couleur réellement affichée. Un texte noir à 50 % d'opacité sur blanc devient le gris #808080 : 3,95:1, échec. L'agenda ci-dessous utilise cette transparence pour ses sous-titres.

Échoue
Agenda d'un café, sous-titres en gris moyen.
Passe
Le même agenda, sous-titres en gris plus foncé.

Description de l'image :

Deux versions de l'agenda d'octobre d'un café, « La Chope ». Deux événements sont listés avec leur date : « Concert du vendredi », le 17 octobre, et « Soirée jeux de société », le 24 octobre. Sous chaque titre noir, un sous-titre donne l'heure et les détails.

Les sous-titres sont écrits en noir rendu transparent. À 50 % d'opacité, ils apparaissent gris moyen (repère A) ; à 75 %, gris plus foncé (repère B).

La transparence change la couleur affichée. Les premiers sous-titresrepère A, en noir à 50 %, s'affichent en #808080 : 3,95:1. Les secondsrepère B, à 75 %, s'affichent en #404040 : 10,37:1. Mesurez toujours la couleur que l'écran affiche au final.

Sur une photo, mesurez la zone la plus défavorable sous les lettres, et ajoutez un voile sombre si l'arrière-plan varie trop. Une photo claire et chargée, comme celle de ce fleuriste, est le cas le plus difficile.

Échoue
Bannière de fleuriste, titre blanc sur une photo de fleurs blanches très claire.
Passe
La même bannière assombrie par un voile, le titre blanc se lit.

Description de l'image :

Deux versions de la bannière d'accueil d'un fleuriste, « Fleurs de Margaux ». La photo montre l'intérieur lumineux d'une boutique : des fleurs blanches et roses dans des seaux en zinc, devant une grande fenêtre baignée de soleil.

Par-dessus, en blanc : le nom du fleuriste, un menu, le titre « Bouquets de saison, livrés le jour même » et la phrase « Commandez avant 14 h, nous livrons dans tout Lyon ».

Dans la première version, la photo est affichée telle quelle : le titre blanc se perd dans les fleurs blanches et le mur clair (repère A). Dans la seconde, un voile gris foncé couvre toute la photo, qui reste reconnaissable, et le texte blanc se lit partout (repère B).

Sur une photo, le contraste se mesure à l'endroit le plus clair sous les lettres. Sans voile, le titre blancrepère A n'y obtient que 1,18:1. Avec un voile sombre à 70 %, le même titrerepère B atteint 7,17:1, et le texte reste lisible même si la photo change.

Le texte dessiné dans l'image elle-même compte aussi : le slogan d'une bannière exportée en JPG, les prix d'un visuel promotionnel, une capture d'écran. Les WCAG appliquent les mêmes seuils à ces images de texte qu'au texte de la page. Un outil qui lit seulement le code ne voit pas ces lettres : vérifiez-les à part.

Échoue
Visuel promotionnel de plantes, slogan blanc sur un mur blanc.
Passe
Le même visuel, slogan blanc sur un bandeau vert foncé.

Description de l'image :

Deux versions d'un visuel promotionnel de jardinerie. La photo montre des plantes vertes en pots de terre cuite, sur des étagères en bois clair, devant un mur blanc.

Dans la première version, le slogan « −20 % sur les plantes d'intérieur, jusqu'au 31 octobre » est écrit en blanc, en haut à droite, directement sur le mur blanc et les feuilles : on le lit à peine (repère A). Il fait partie du fichier image.

Dans la seconde, le même slogan est écrit en blanc sur un bandeau vert foncé (#14532D) en bas de l'image, et il se lit nettement (repère B).

Un slogan dessiné dans l'imagerepère A échappe aux vérificateurs qui lisent le code : seule une mesure sur l'image révèle 1,04:1. Le slogan écrit en HTML sur un bandeaurepère B atteint 9,11:1 et se vérifie comme le reste de la page.

#Comment APCA calcule le contraste

APCA (Accessible Perceptual Contrast Algorithm) est une autre façon de calculer le contraste, créée par Andrew Somers. Comme les WCAG, il part de la clarté des deux couleurs. La suite change sur trois points.

Description textuelle de l'animation

Trois grandes pastilles de couleur s'alignent : à gauche le texte noir #000000, au milieu l'arrière-plan vert #16A34A d'un bouton, à droite le texte blanc #FFFFFF. dd, le logo d'Includdy avec des bras et des jambes, entre par la gauche et les regarde. Comme WCAG, APCA commence par mesurer la luminance de chaque couleur, la lumière qu'elle émet. Les pastilles noire et blanche pâlissent et, sous le vert, on retrouve les trois lampes du premier dessin animé : rouge, vert, bleu. Sous chaque nom, sa paire du code, 16, A3 et 4A, puis son réglage sur 255 : 22, 163 et 74. Des barres montent à la part de chaque lampe : 0,09, 0,64 et 0,29. Puis « puissance 2,4 » s'affiche en grand, et le 2,4 vient se placer en petit exposant à côté de chaque part. À cette étape, APCA utilise une simple puissance 2,4, là où la formule exacte de WCAG suit une courbe en deux parties, proche d'une puissance 2,2. Les barres baissent jusqu'à la lumière réelle : 0,00, 0,34 et 0,05. Sous les barres apparaissent les poids de l'œil, les mêmes que pour WCAG : ×21 %, ×72 % et ×7 %, et à droite, en petit, la courbe de sensibilité de l'œil revient en rappel, avec un point rouge, vert et bleu pour chaque lampe. Les barres rétrécissent encore : 0,0006, 0,2443 et 0,0037. Puis elles s'empilent en une seule barre grise, tandis que leurs valeurs viennent se poser au-dessus, l'une sous l'autre, pour une addition posée : 0,0006 + 0,2443 + 0,0037 = 0,2486. C'est le gris du vert pour APCA. À côté, un petit texte rappelle celui de WCAG : 0,2686. Le gris remonte sous la pastille verte. Les pastilles reprennent leur couleur et, sous chacune, apparaît son gris avec sa valeur : 0 pour le noir, 0,2486 pour le vert, 1 pour le blanc, et chacun se place sur une réglette qui va du noir au blanc. dd les pointe du doigt.

Les pastilles s'effacent et les gris se rangent en deux colonnes. À gauche, un bouton vert « Continuer » écrit en noir : du texte foncé sur clair. À droite, le même bouton écrit en blanc : du texte clair sur foncé. Le gris du vert se dédouble pour aller dans les deux colonnes. Première différence avec WCAG : le sens du contraste compte. dd regarde un bouton puis l'autre, un point d'interrogation au-dessus de la tête.

Pourquoi ? Les boutons et les gris s'écartent un instant, et deux panneaux apparaissent sous les mentions « Foncé sur clair » et « Clair sur foncé » : à gauche, « Aa » en noir sur un panneau blanc, à droite, « Aa » en blanc sur un panneau noir. L'œil s'adapte à la lumière qui entoure le texte : sur un arrière-plan foncé, un texte clair agit un peu comme une petite lampe. Exemple : il peut paraître plus gras et un peu flou, c'est le halo, et le « Aa » blanc se met à rayonner. APCA a mesuré des puissances propres à chaque sens, une pour l'arrière-plan et une pour le texte : 0,56 et 0,57 quand le texte est foncé sur clair, 0,65 et 0,62 quand il est clair sur foncé. Elles s'inscrivent sous les panneaux. dd regarde un panneau puis l'autre et pointe le « Aa » blanc, puis les boutons et les gris reviennent.

D'abord l'arrière-plan. Dans chaque colonne, la puissance s'affiche en grand : « puissance 0,56 » à gauche, « puissance 0,65 » à droite. Le mot s'efface, le nombre rétrécit et vient se placer en petit, en haut à droite de 0,2486 : c'est un exposant. Le résultat s'écrit à côté : 0,2486 puissance 0,56 égale 0,4586, et 0,2486 puissance 0,65 égale 0,4046. Puis seul ce résultat reste dans le gris. dd pointe les puissances, se penche pour suivre leur trajet, puis hoche la tête.

Ensuite le texte. APCA remonte d'abord un peu le noir pur : son 0 devient 0,0045. Les puissances du texte s'affichent à leur tour en grand, 0,57 pour le noir et 0,62 pour le blanc, puis passent en exposant de la même façon. Le noir donne 0,046 et le blanc reste à 1.

Deuxième différence avec WCAG : APCA soustrait au lieu de diviser. Les gris s'écartent et, dans chaque colonne, deux barres montent côte à côte, l'arrière-plan à gauche et le texte à droite, avec la mention « WCAG 2 » : ce sont d'abord les luminances de WCAG, plus 0,05. Le vert vaut 0,2686 + 0,05 = 0,3186, le noir 0 + 0,05 = 0,05 et le blanc 1 + 0,05 = 1,05. WCAG divise : il regarde combien de fois une barre est plus haute que l'autre. Des copies de la barre courte glissent une à une depuis la droite et s'empilent au-dessus d'elle jusqu'en haut de la grande, la dernière coupée : × 6,37 à gauche, le ratio de 6,37:1 du texte noir, et × 3,30 à droite, le ratio de 3,30:1 du texte blanc. Puis la mention devient « APCA » et les barres changent de hauteur : elles prennent les clartés corrigées d'APCA, 0,4586 et 0,046 à gauche, 0,4046 et 1 à droite. APCA soustrait : il mesure l'écart entre le haut des deux barres. Une accolade marque cet écart : 0,4126 à gauche, moins 0,5954 à droite. dd pointe la pile, puis se penche vers l'écart et hoche la tête. Les barres s'effacent et les gris reviennent. Dans chaque colonne, les deux valeurs se placent de part et d'autre d'un signe moins : clarté de l'arrière-plan moins clarté du texte. À gauche, 0,4586 moins 0,046 égale 0,4126. À droite, 0,4046 moins 1 égale moins 0,5954. Cet écart passe ensuite par trois opérations, chaque nouvelle valeur remplaçant la précédente. D'abord, on le multiplie par 1,14, un facteur d'échelle choisi pour que les seuils tombent sur des nombres ronds : 0,470 à gauche, moins 0,679 à droite. Puis APCA teste l'écart : sous 0,1, le score vaut zéro, ce qui efface les contrastes trop faibles ; ici, il dépasse 0,1. Sinon, on le rapproche de zéro de 0,027 : 0,443 à gauche, moins 0,652 à droite. Enfin, multiplié par 100, il devient le score Lc : Lc 44,3 pour le texte noir, Lc moins 65,2 pour le texte blanc. Le signe moins clignote : il indique un texte clair sur un arrière-plan foncé. dd pointe chaque opération, hoche la tête, puis pointe le signe moins.

Troisième différence avec WCAG : le score d'APCA donne une taille de texte minimale précise, là où WCAG n'a que deux catégories, texte courant et grand texte. Les calculs s'effacent, les scores montent sous les boutons, et dessous apparaissent deux carrés verts avec les lettres « Aa », minuscules. Les lettres grandissent. Le blanc devient lisible dès 21,75 px, en graisse normale, et s'arrête vite. Le noir doit grandir bien plus, jusqu'à 44 px, toujours en graisse normale. dd se penche pour suivre la course.

La colonne du noir pâlit et le carré blanc s'entoure de vert : APCA prédit le texte que l'œil lit le mieux, ici le blanc. dd lève le pouce et hoche la tête.

Pour résumer, tout s'efface et dd part en courant vers la gauche, les talons dans un petit nuage de poussière. Trois cartes apparaissent l'une après l'autre au centre. Première carte : « Le sens du contraste compte », avec un petit « Aa » noir sur blanc à côté d'un « Aa » blanc sur noir. Deuxième carte : « APCA soustrait les clartés », avec un signe moins à côté d'un signe diviser barré de rouge. Troisième carte : « Le score donne une taille minimale », avec un petit « Aa » qui grandit. dd tombe du haut de l'image sur la première carte, en soulevant de la poussière, et hoche la tête. À chaque nouvelle carte, il prend son élan jusqu'au bord, s'accroupit et saute par-dessus le vide jusqu'à la carte suivante, où il atterrit dans un nuage de poussière. Sur chaque carte, il s'arrête un instant, regarde la carte et hoche la tête. Sur la troisième, il regarde le « Aa » grandir et lève le pouce. Puis il s'élance d'un bond vers le coin en haut à droite et sort de l'image, avant de revenir en courant par la gauche jusqu'à sa place, près de la bulle.

Pour finir, une animation du vérificateur de contraste d'Includdy, dans une fenêtre de navigateur à l'adresse includdy.com/contraste. Le vérificateur s'assemble : les onglets WCAG 2.2 et APCA, les champs « Couleur du texte » et « Couleur d'arrière-plan », la carte de résultat et l'aperçu ; la caméra glisse d'une partie à l'autre et un pointeur fait chaque geste. Au départ, du texte noir sur du blanc. Légende : « Mettons ce bouton vert dans notre vérificateur, avec un texte blanc. » Le pointeur colle #16A34A dans le champ de l'arrière-plan, puis tape #FFFFFF dans celui du texte. En WCAG 2.2, la carte passe au rouge : 3,30:1. Le pointeur clique sur l'onglet APCA ; l'indicateur glisse et s'étire. Légende : « Passez sur APCA : la taille de texte minimale s'affiche. » La carte affiche Lc −65,2, « Seulement en grand, taille minimale : 22 px, ou 15 px en gras », « texte clair sur arrière-plan foncé ». La caméra glisse vers l'aperçu, qui dit : « Avec ce contraste, le texte normal doit faire au moins 22 px » (le tableau d'APCA donne 21,75 px, l'outil arrondit au-dessus). Légende : « En blanc, en graisse normale, il faut au moins 22 pixels. » Le pointeur remplace #FFFFFF par #000000 : Lc 44,3, « Très grand texte seulement, taille minimale : 44 px, ou 25 px en gras », et l'aperçu, « Lisible en grand seulement », demande au moins 44 px. dd écarquille les yeux. Légende : « En noir, il faudrait des lettres deux fois plus grandes. » Pour finir, la fenêtre se range à gauche et une carte apparaît à droite : un QR code qui ouvre includdy.com/contraste, l'adresse includdy.com/contraste en grand et la mention « Gratuit, sans inscription ». dd lève le pouce. Légende finale : « Gratuit et sans inscription : includdy.com/contraste ».

Pour finir, la fenêtre et la carte s'effacent. dd reste seul sur la scène et fait une petite danse : il pointe le doigt en l'air, remue un derrière qu'il n'a pas et fait un clin d'œil. Puis il saute à sa place dans le mot « inclusion buddy » : ses deux lettres en deviennent le « dd » bleu, et une note précise « inclusion buddy : le compagnon de l'inclusion ». Le mot se replie en « includdy », le logo vient au premier plan, et le slogan s'affiche dessous pendant que la voix le dit : « L'accessibilité web rendue simple. Gagnez du temps en assurant votre conformité. »

  1. Le sens compte. L'œil ne lit pas de la même façon un texte foncé sur un arrière-plan clair et un texte clair sur un arrière-plan foncé. APCA fait passer chaque clarté par une courbe qui dépend de ce sens.
  2. Une soustraction au lieu d'une division. APCA retire la clarté du texte de celle de l'arrière-plan. Le résultat s'appelle le score Lc (de l'anglais lightness contrast, le contraste de clarté), et son signe donne le sens : négatif pour un texte clair sur un arrière-plan foncé.
  3. Une taille minimale au lieu d'un seuil. Le score ne dit pas « passe » ou « échoue » : il donne la taille de texte à partir de laquelle on lit sans effort, selon la graisse de la police.

Sur un bouton vert #16A34A, le texte blanc obtient Lc −65,2 : en graisse normale, il se lit dès 21,75 px. Le texte noir obtient Lc 44,3 : il faudrait l'écrire en 44 px. Les valeurs viennent de la bibliothèque apca-w3.


#WCAG 2 ou APCA : quand les deux ne sont pas d'accord

Les deux méthodes ne donnent pas toujours la même réponse. Sur un bouton bleu #2F80ED, les WCAG font passer le texte noir à 5,43:1 et refusent le blanc à 3,87:1. APCA dit l'inverse : Lc −71,1 pour le blanc, lisible dès 19,5 px en graisse normale, et Lc 38,5 pour le noir, qu'il faudrait écrire en 71 px. À l'œil, beaucoup trouvent le blanc plus lisible.

Description textuelle de l'animation

La capture d'un petit site apparaît au centre de l'écran : « Atelier Terre », un atelier de céramique fictif, avec un formulaire et son bouton « Envoyer » bleu #2F80ED, en graisse normale. dd entre par la gauche. Légende : « Ce formulaire a un bouton bleu. Pour son texte, noir ou blanc ? » Sur « bouton », la vue zoome doucement sur ce bouton, qui remplit le centre de l'écran.

Un seul bouton, et une hésitation : sur « noir », son texte devient noir ; sur « blanc », il redevient blanc ; puis il continue d'alterner, noir, blanc, noir, blanc, de plus en plus lentement. dd réfléchit, la main au menton, un point d'interrogation au-dessus de la tête, les yeux sur le bouton.

Légende : « Comparons les deux : noir en haut, blanc en bas. » Le bouton se dédouble en deux grands boutons du même bleu, l'un au-dessus de l'autre : celui du haut en texte noir, celui du bas en texte blanc. Puis la question : « À votre avis, lequel se lit le mieux ? » dd regarde un bouton puis l'autre et ouvre les mains.

Les deux boutons rapetissent et se rangent côte à côte en haut de l'écran, le noir à gauche, le blanc à droite. dd les suit des yeux.

Sous chaque bouton apparaît le verdict de WCAG 2 : le texte noir obtient 5,43:1, conforme, en vert avec une coche ; le texte blanc obtient 3,87:1, en échec, en rouge avec une croix. Légende : « Pour WCAG 2, en texte normal, le noir passe et le blanc échoue. » dd hésite et secoue la tête.

Légende : « Pourtant, à l'œil, beaucoup trouvent le blanc plus lisible. WCAG 2 aurait-il tort ? » dd pointe le bouton blanc, dont le verdict rouge tremble.

Dessous apparaît le score APCA de chaque bouton : Lc 38,5 pour le texte noir, Lc −71,1 pour le texte blanc. Le signe moins indique un texte clair sur un arrière-plan foncé. Légende : « Regardons APCA : Lc −71,1 pour le blanc, contre 38,5 pour le noir. » dd écarquille les yeux puis hoche la tête.

Sous chaque score, une barre montre la taille minimale pour lire le texte. Légende : « Ce score donne aussi une taille minimale de texte. » La barre du noir se remplit entièrement, lisible dès 71 px en graisse normale ; celle du blanc s'arrête au quart, lisible dès 19,5 px.

Légende : « Comme notre œil, APCA préfère donc le blanc. » Le verdict du blanc s'illumine et dd lève le pouce.

Légende : « Un bleu un peu plus foncé, et les deux méthodes valident le blanc. » La colonne du texte noir s'efface. Le bouton au texte blanc fonce, du bleu #2F80ED au bleu #1470EB. Ses verdicts passent au vert : WCAG 2 donne 4,62:1, conforme, avec une coche ; APCA donne Lc −76,8, lisible dès 18 px. dd lève le pouce et hoche la tête.

Les boutons et leurs verdicts disparaissent. Deux cartes apparaissent côte à côte, chacune avec un petit « Aa » blanc sur le bleu #2F80ED. À gauche, « WCAG 2 » affiche 3,87:1 sur une règle qui s'arrête avant le trait de 4,5:1 : « la conformité, la norme exigée par la loi ». À droite, « APCA » affiche Lc −71,1 sur une règle qui part de zéro vers la gauche, du côté négatif, et dépasse le trait de −60 (Lc 60 en valeur absolue), le minimum pour un texte de 24 px, ou de 16 px en gras : « la lisibilité, plus proche de l'œil, mais expérimental ». Légende : « La loi s'appuie sur WCAG 2. APCA, encore expérimental, n'a aucune valeur légale. » dd regarde les deux cartes.

Légende : « Pour être conforme, vérifiez avec WCAG 2, » dd pointe la carte WCAG 2, son trait de 4,5:1 pulse ; la carte APCA pâlit.

Légende : « et pour la lisibilité, regardez APCA. » dd pointe la carte APCA, dont le score grossit un instant ; la carte WCAG 2 pâlit.

Les cartes disparaissent et dd file en courant vers la gauche, talons au vent, en soulevant de petits nuages de poussière. Au centre apparaît la capture d'un petit site, celui d'un atelier de céramique fictif, « Atelier Terre » : une barre de navigation, une photo d'étagères de bols et de tasses, et un formulaire « Nous écrire » avec les champs Nom, E-mail et Votre message, puis le bouton « Envoyer » au texte blanc en gras, bleu #2F80ED. Un fin trait part de ce bouton, un point d'abord, puis une ligne qui s'allonge jusqu'à un panneau placé à droite : un curseur « Luminosité » qui va du noir au blanc en passant par le bleu, avec sous sa poignée le code de la couleur, #2F80ED. Dessous, deux cartes de verdict pour le texte blanc du bouton : WCAG 2, seuil 4,5:1, et APCA, seuil Lc 60, avec la mention « pour un texte de 16 px en gras ». Au départ, WCAG 2 donne 3,87:1, en échec avec une croix rouge, et APCA Lc −71,1, au-dessus du seuil avec une coche verte. Légende finale : « S'ils ne sont pas d'accord, cherchez une couleur qui passe les deux. »

Aussitôt, dd passe la tête par le coin en haut à droite, jette un œil au curseur et saute dessus et atterrit sur la piste, à gauche de la poignée. Il pose la main sur la poignée et la tire d'un trait vers le côté sombre ; il force, et des gouttes de sueur s'envolent de sa tête. Le bouton fonce avec elle, le code sous la poignée change sans cesse et les valeurs défilent en continu, comme un compteur : le ratio WCAG 2 monte de 3,87:1 à 4,47:1, toujours avec sa croix rouge, et le score APCA descend de Lc −71,1 à Lc −75,8. dd s'arrête juste avant le seuil pour reprendre son souffle, en sueur. Puis une dernière poussée : à 4,52:1, sur le bleu #1872EB, WCAG 2 passe et sa croix devient une coche verte, et la poignée s'arrête sur #1470EB : 4,62:1 et Lc −76,8, les deux avec une coche verte. dd lâche la poignée, lève le pouce et hoche la tête.

Pour finir, une animation du vérificateur de contraste d'Includdy, dans une fenêtre de navigateur à l'adresse includdy.com/contraste. Le vérificateur s'assemble : les onglets WCAG 2.2 et APCA, les champs « Couleur du texte » et « Couleur d'arrière-plan », la carte de résultat et l'aperçu ; la caméra glisse d'une partie à l'autre et un pointeur fait chaque geste. Au départ, du texte blanc sur du noir. Légende : « Dernier essai : notre bouton bleu, avec son texte blanc. » Le pointeur colle #2F80ED dans le champ de l'arrière-plan : en WCAG 2.2, la carte passe au rouge, 3,87:1. Légende : « Son score avec WCAG, puis avec APCA. » Un clic sur l'onglet APCA : Lc −71,1, « Seulement en grand ». Retour sur WCAG 2.2 ; sous la carte, trois combinaisons : arrière-plan ajusté 4,52:1, texte et arrière-plan ajustés 7,36:1, texte ajusté 4,50:1. Légende : « Un clic sur la suggestion, et les deux méthodes sont d'accord. » Le pointeur clique sur « Arrière-plan ajusté » : l'arrière-plan devient #2274e0, la carte passe au vert, 4,52:1, « Lisible ». Sur l'onglet APCA, la même paire donne Lc −76,3, « Lisible, texte courant dès 18 px ». dd lève le pouce. Plus bas, la partie « 04 Exporter » monte à l'écran avec le code CSS des couleurs, ligne par ligne, et le pointeur clique sur « Copier », qui devient « Copié ». Légende : « Copiez ensuite toute la palette dans votre code. » Pour finir, la fenêtre se range à gauche et une carte apparaît à droite : un QR code qui ouvre includdy.com/contraste, l'adresse includdy.com/contraste en grand et la mention « Gratuit, sans inscription ». dd lève le pouce. Légende finale : « Gratuit et sans inscription : includdy.com/contraste ».

Pour finir, la fenêtre et la carte s'effacent. dd reste seul sur la scène et fait une petite danse : il pointe le doigt en l'air, remue un derrière qu'il n'a pas et fait un clin d'œil. Puis il saute à sa place dans le mot « inclusion buddy » : ses deux lettres en deviennent le « dd » bleu, et une note précise « inclusion buddy : le compagnon de l'inclusion ». Le mot se replie en « includdy », le logo vient au premier plan, et le slogan s'affiche dessous pendant que la voix le dit : « L'accessibilité web rendue simple. Gagnez du temps en assurant votre conformité. »

Les deux méthodes divergent dans les deux sens : #767676 sur blanc passe les WCAG à 4,54:1, mais n'obtient que Lc 71,6 avec APCA, sous le minimum de Lc 75 pour un texte courant. Changer de formule rendrait non conformes des sites qui l'étaient la veille, et l'inverse : le débat dure depuis plus de trois ans.

La loi suit les WCAG 2. Vérifiez la conformité avec elles et la lisibilité avec APCA ; en #1470EB, le bouton passe les deux avec un texte blanc.


#Tester et corriger le contraste des couleurs d'un site web

Collez vos couleurs dans l'outil en haut de cette page, dans n'importe quel format CSS : il tient compte de la transparence et propose des couleurs proches qui passent. Pour corriger, gardez la teinte et changez la clarté : l'orange #C2410C porte le texte blanc à 5,18:1 et reste orange.

Vérifiez aussi ce qu'on oublie : textes d'exemple des champs, messages d'erreur, focus, états de survol et thème sombre.

Le thème sombre se vérifie comme une palette à part. Un gris qui passe sur blanc peut échouer sur un arrière-plan presque noir, et APCA y demande souvent un texte plus clair, ou à défaut plus grand ou plus gras.

Échoue
Liste de commandes en thème sombre, dates en gris sombre peu lisible.
Passe
La même liste, dates en gris clair.

Description de l'image :

Deux versions de la page « Mes commandes » d'une boutique en ligne, en thème sombre : un arrière-plan presque noir et des titres blancs. Deux commandes sont listées, n° 4821 à 62,40 € et n° 4790 à 18,00 €, chacune avec une icône de colis.

Sous chaque numéro, une ligne indique la date de livraison et le nombre d'articles. Dans la première version, elle est en gris #6B7280, terne et difficile à lire (repère A). Dans la seconde, elle est en gris très clair #D1D5DB, en graisse moyenne (repère B).

Le même gris change de résultat d'un thème à l'autre : 4,83:1 sur blanc, mais 3,67:1 sur l'arrière-plan sombre, où les datesrepère A deviennent ternes. Les dates en gris très clairrepère B, un peu plus grasses, atteignent 12,04:1 : APCA exige plus du texte clair sur sombre.

Pour vérifier une page déjà en ligne, l'application Includdy la scanne et repère le texte peu contrasté là où il s'affiche, y compris sur un arrière-plan complexe et dans les images.

Partagez cet article

Questions fréquentes

4,5:1 pour le texte courant, selon le critère 3.2. Pour le grand texte, à partir de 24 px ou de 18,5 px en gras, le seuil descend à 3:1. Le critère 3.3 demande aussi 3:1 pour les composants d'interface et les éléments graphiques porteurs d'information, comme la bordure d'un champ ou une icône.

Ce sont les seuils du niveau AA des WCAG, que le RGAA reprend. Le niveau AAA, à 7:1, n'est pas exigé.

Il accepte vos couleurs dans n'importe quel format CSS, du code hex aux formats récents comme oklch, et tient compte de la transparence. Le résultat donne deux avis : la règle officielle des WCAG 2.2 et APCA, une méthode plus proche de l'œil mais encore expérimentale.

Si la paire échoue, l'outil propose des couleurs proches qui passent. Il décline aussi votre paire en tailles de texte et couleurs d'interface, prêtes à copier dans votre code. L'outil est gratuit et sans inscription, et les calculs restent dans votre navigateur.

Pas sur tout le site. La loi demande le niveau AA, soit 4,5:1 pour le texte courant. Imposer 7:1 partout laisse très peu de couleurs possibles pour les boutons et les accents.

Gardez le niveau AAA pour les textes qu'on lit longtemps, comme le corps des articles ou la documentation. Ailleurs, le niveau AA suffit.

Rien. Les seuils sont les mêmes qu'en WCAG 2.1 : 4,5:1 pour le texte courant, 3:1 pour le grand texte et les éléments d'interface. Des couleurs conformes en 2.1 le restent en 2.2.

La formule de calcul ne change pas non plus. APCA ne fait pas partie de WCAG 2.2 : c'est une méthode expérimentale, sans valeur légale.

En grande partie, oui, parce qu'il ignore la teinte et ne mesure que la clarté. Une personne qui confond le rouge et le vert perçoit toujours cette différence de clarté.

Le W3C signale une exception. Chez les personnes protanopes, le rouge paraît plus sombre qu'il ne l'est. Évitez le texte rouge sur un arrière-plan noir, même si le ratio passe.

Oui. Le ratio se calcule sur la couleur écrite dans le CSS, alors que l'écran lisse les bords des lettres. Sur un trait très fin, ce lissage mélange le texte à l'arrière-plan, et les lettres paraissent plus pâles que prévu.

Le W3C conseille de viser au-dessus du minimum avec ce type de police. Pour une graisse de 300 ou moins, gardez une bonne marge au-dessus de 4,5:1.

Sur le papier, oui. Le RGAA valide son critère 3.2 si un mécanisme permet d'afficher un contraste suffisant. Ce bouton doit alors être lui-même assez contrasté, et la version renforcée doit garder exactement les mêmes contenus et fonctionnalités.

Dans les faits, corriger la palette d'origine coûte souvent moins cher que de maintenir deux thèmes à jour.

Oui, comme une palette à part. Une couleur qui passe sur blanc peut échouer sur un arrière-plan sombre. Le gris #6B7280, courant pour le texte secondaire, atteint 4,83:1 sur blanc. Sur le presque noir #111827, il tombe à 3,67:1 et échoue.

Passez chaque paire du thème sombre dans le vérificateur, sans oublier les états de survol et de focus.