Critères de succès WCAG · Level AA
WCAG 1.4.3 : Contraste (minimum)
Les WCAG 1.4.3 exigent que le texte et les images de texte aient un ratio de contraste d’au moins 4,5:1 par rapport à leur arrière-plan (3:1 pour le texte de grande taille), afin de garantir que les personnes ayant une basse vision ou des déficiences de la perception des couleurs puissent lire le contenu sans technologie d’assistance.
Ce que signifie cette règle
WCAG 1.4.3 — Contraste (minimum) est un critère de succès de niveau AA relevant de la Règle 1.4 (Distinguable) des Règles pour l’accessibilité des contenus Web 2.2. Il impose que la présentation visuelle du texte et des images de texte maintienne un rapport de contraste de luminance suffisant avec leur arrière-plan afin que les personnes ayant une déficience visuelle modérée puissent lire le contenu sans dépendre de technologies d’assistance améliorant le contraste.
Les rapports de contraste requis sont les suivants. Le texte normal — tout texte plus petit que 18 points (environ 24 pixels CSS) ou 14 points en gras (environ 18,67 pixels CSS) — doit atteindre un rapport de contraste d’au moins 4,5:1. Le texte de grande taille, défini comme un texte d’au moins 18 points en graisse normale ou 14 points en gras, nécessite un rapport de contraste minimal de 3:1. Les mêmes seuils s’appliquent aux images de texte : les images matricielles ou vectorielles qui affichent des caractères lisibles doivent également respecter ces rapports par rapport à toute couleur d’arrière-plan adjacente.
Le rapport de contraste est calculé à l’aide de la formule de luminance relative définie dans la spécification WCAG. La luminance relative (L) est calculée à partir des valeurs de couleur sRGB après correction gamma, et le rapport est exprimé sous la forme (L1 + 0,05) / (L2 + 0,05), où L1 est la plus claire des deux valeurs de luminance et L2 la plus sombre. Un rapport de 1:1 signifie l’absence totale de contraste (couleurs identiques), tandis que 21:1 est le maximum, atteint uniquement par du noir pur sur du blanc pur.
Le critère couvre tout le texte d’avant-plan rendu par le navigateur, y compris le texte à l’intérieur des boutons, liens, libellés, champs de formulaire, cellules de tableau, info-bulles, texte indicatif (placeholder) dans les champs de saisie, et texte superposé à des images ou des dégradés. Il couvre également les éléments de texte SVG et le texte rendu via le contenu généré par CSS (pseudo-éléments ::before et ::after).
WCAG 1.4.3 définit plusieurs exceptions officielles explicitement exclues de l’exigence :
- Texte accessoire : Le texte ou les images de texte purement décoratifs, non visibles ou faisant partie d’un composant d’interface utilisateur inactif (désactivé) sont exemptés. Par exemple, le libellé estompé d’un champ de formulaire désactivé n’a pas besoin de respecter le rapport.
- Logotypes : Le texte faisant partie d’un logo ou d’un nom de marque n’est soumis à aucune exigence minimale de contraste, car l’identité de marque dépend souvent de choix de couleurs spécifiques et l’on s’attend à ce que les utilisateurs reconnaissent les logos visuellement.
- Texte de grande taille : Comme indiqué ci-dessus, le texte de grande taille bénéficie d’un rapport assoupli de 3:1 plutôt que 4,5:1, en reconnaissance du fait que des formes de lettres plus grandes sont plus faciles à distinguer avec un contraste plus faible.
Un succès se produit lorsque le rapport de contraste calculé est égal ou supérieur au seuil applicable pour chaque portion de texte visible et non exemptée. Un échec se produit lorsque tout texte visible, non exempté, ou toute image de texte, tombe en dessous du seuil, même d’une fraction de point de rapport.
Pourquoi c’est important
Environ 2,2 milliards de personnes dans le monde vivent avec une forme de déficience visuelle, selon l’Organisation mondiale de la Santé. Un sous-ensemble significatif de ces personnes — y compris celles ayant une basse vision due à des affections telles que la cataracte, le glaucome, la dégénérescence maculaire et la rétinopathie diabétique — peuvent encore lire du texte à l’écran lorsque le contraste est suffisant, mais peinent ou échouent complètement lorsque le contraste est faible. Le critère Contraste (minimum) répond directement aux besoins de cette population en fixant un plancher mesurable et testable en dessous duquel le texte devient inaccessible.
Au-delà des déficiences visuelles diagnostiquées, on estime qu’environ 8 % des hommes et 0,5 % des femmes d’ascendance d’Europe du Nord présentent une forme de déficience de la vision des couleurs (daltonisme). Bien que le daltonisme soit distinct d’un faible contraste, de nombreuses formes de daltonisme réduisent la différence de luminance perçue entre certaines teintes, rendant un contraste insuffisant encore plus problématique. Une étiquette rouge sur un fond vert peut apparaître comme un gris presque uniforme pour une personne atteinte de deutéranopie, rendant le texte invisible si le contraste de luminance sous-jacent est insuffisant.
Les personnes âgées sont touchées de manière disproportionnée. L’œil vieillissant perd en sensibilité au contraste, et la taille de la pupille diminue, réduisant la quantité de lumière atteignant la rétine. Une personne septuagénaire peut avoir besoin d’un contraste de luminance nettement plus élevé pour obtenir la même lisibilité qu’une personne trentenaire, même sans diagnostic clinique de basse vision.
Considérons un scénario concret du monde réel : un site de e-commerce turc utilise un texte gris clair (#999999) sur un fond blanc (#FFFFFF) pour les descriptions de produits et les informations de prix — une tendance de design courante, appréciée pour son esthétique minimaliste. Le rapport de contraste de cette combinaison est d’environ 2,85:1, bien en dessous du seuil de 4,5:1. Un utilisateur atteint d’une dégénérescence maculaire à un stade précoce peut être totalement incapable de lire le prix d’un produit, ce qui le force à abandonner l’achat. Non seulement cela exclut un utilisateur d’une transaction commerciale fondamentale, mais cela représente également une perte de revenus directe pour le commerçant et un risque juridique dans les juridictions qui imposent la conformité en matière d’accessibilité.
Du point de vue de l’ergonomie et du référencement (SEO), un texte à fort contraste bénéficie à tous les utilisateurs dans des environnements difficiles : lumière du soleil intense sur un écran mobile, écrans de faible qualité, ou simplement un utilisateur qui n’a pas calibré son moniteur. Des choix de couleurs accessibles réduisent la fatigue oculaire des personnes voyantes lors de longues sessions de lecture, et les améliorations de lisibilité sont corrélées à des taux de rebond plus faibles et à un temps passé sur la page plus long — des signaux que les moteurs de recherche utilisent comme indicateurs de qualité.
Règles Axe-core associées
- color-contrast : Il s’agit de la règle automatisée principale appliquant WCAG 1.4.3 au niveau AA. Le moteur axe-core calcule les couleurs d’avant-plan et d’arrière-plan de chaque nœud de texte dans le DOM, en résolvant la cascade CSS, l’opacité, l’empilement z-index et la transparence alpha. Il signale tout élément de texte dont le rapport de contraste est inférieur à 4,5:1 pour le texte normal ou 3:1 pour le texte de grande taille. La règle indique le rapport réel constaté, le rapport requis et l’élément spécifique en échec, ce qui rend la correction simple. Cependant, axe-core ne peut analyser que les couleurs qu’il peut déterminer à partir des styles calculés ; le texte rendu à l’intérieur d’un
<canvas>, sur des dégradés CSS complexes ou au-dessus d’images d’arrière-plan peut ne pas être entièrement résoluble sans contexte supplémentaire, et axe marquera ces cas comme « needs review » plutôt que comme succès ou échec définitif. Le texte indicatif (placeholder) dans les champs de formulaire est également vérifié par cette règle. - color-contrast-enhanced : Cette règle applique les seuils plus stricts de WCAG 1.4.6 — Contraste (renforcé) de 7:1 pour le texte normal et 4,5:1 pour le texte de grande taille (niveau AAA). Bien que 1.4.6 ne soit pas requis pour la conformité AA, exécuter cette règle pendant le développement est utile pour les équipes visant une accessibilité renforcée ou se préparant à des environnements réglementaires susceptibles d’adopter les exigences AAA. Axe-core signale séparément les violations de cette règle afin que les équipes puissent distinguer les échecs AA (color-contrast) des améliorations AAA ambitieuses (color-contrast-enhanced).
Des tests manuels sont nécessaires dans plusieurs scénarios que les outils automatisés ne peuvent pas entièrement résoudre. Lorsque le texte est superposé à une image d’arrière-plan ou un dégradé CSS, la couleur d’arrière-plan effective varie à travers la boîte englobante du texte. Les outils automatisés doivent soit échantillonner la couleur dominante, soit supposer la région la plus défavorable, soit s’en remettre à un examinateur manuel. De même, le texte à l’intérieur des éléments <canvas> est rendu sous forme de pixels sans information de couleur sémantique disponible pour l’arbre d’accessibilité, de sorte qu’une inspection manuelle avec un outil pipette est la seule approche fiable. Le texte qui n’apparaît que sur les états :hover ou :focus peut également nécessiter une interaction manuelle pour être déclenché avant que les outils automatisés puissent l’évaluer.
Comment tester
- Analyse automatisée avec axe DevTools : Installez l’extension de navigateur axe DevTools (disponible pour Chrome, Firefox et Edge). Accédez à la page à tester, ouvrez le panneau de l’extension et lancez une analyse de page complète. Dans le panneau de résultats, filtrez par les identifiants de règle color-contrast et color-contrast-enhanced. Pour chaque violation, l’outil met en évidence l’élément en échec, indique le rapport de contraste réel (par exemple « 2,85:1 »), le rapport requis (par exemple « 4,5:1 ») et les couleurs d’avant-plan et d’arrière-plan calculées en hexadécimal. Exportez les résultats au format CSV ou JSON pour le suivi. Répétez l’opération sur tous les points de rupture, car les mises en page responsives peuvent modifier les tailles de police (ce qui affecte le seuil de texte de grande taille) ou changer de jeux de couleurs.
- Audit Lighthouse : Ouvrez Chrome DevTools, accédez à l’onglet Lighthouse, sélectionnez « Accessibility » et lancez l’audit. Lighthouse fait apparaître les violations de contraste des couleurs dans sa section Accessibility avec des références d’éléments. Notez que Lighthouse utilise une version plus ancienne d’axe-core dans certains environnements ; l’utilisation directe d’axe DevTools peut détecter davantage de problèmes.
- Mesure manuelle du contraste : Utilisez le sélecteur de couleurs intégré aux DevTools du navigateur ou un outil dédié tel que le WebAIM Contrast Checker (webaim.org/resources/contrastchecker/) ou l’application de bureau TPGi Colour Contrast Analyser. Sélectionnez les couleurs d’avant-plan et d’arrière-plan avec la pipette et vérifiez que le rapport indiqué respecte le seuil. Pour le texte sur des dégradés ou des images, échantillonnez plusieurs points dans la zone de texte et utilisez la mesure de contraste la plus faible comme valeur de référence.
- Test des états interactifs : Déclenchez manuellement les états
:hover,:focus,:activeet:visitedsur les liens et éléments interactifs, puis mesurez le contraste pour chaque état séparément. Certains designs utilisent des couleurs de survol à plus faible contraste qui échouent involontairement. Utilisez la fonctionnalité « Force element state » des DevTools du navigateur pour maintenir un état pendant la mesure. - Revue avec lecteur d’écran et clavier (contextuelle) : Bien que le contraste soit un critère visuel et ne soit pas détectable directement par les lecteurs d’écran, des tests avec NVDA + Firefox, VoiceOver + Safari ou JAWS + Chrome permettent de confirmer que le texte est présent dans l’arbre d’accessibilité et n’est pas masqué via des techniques CSS (telles que
color: transparent) qui le rendraient visuellement inaccessible. Si un lecteur d’écran annonce un texte qui semble invisible à l’écran, vérifiez si le rendu visuel respecte les exigences de contraste pour les personnes voyantes. - Zoom et mise à l’échelle des polices : Augmentez la taille de police par défaut du navigateur (Paramètres → Apparence → Taille de la police) et le zoom à 200 %. Vérifiez que le texte qui passe de « normal » à « grande taille » à ces dimensions respecte toujours le seuil approprié. Une police de 14 px au zoom par défaut peut devenir 28 px à 200 % de zoom, ce qui modifie le seuil applicable.
Comment corriger
Texte de corps avec contraste insuffisant — Incorrect
<!-- Light gray text on white background: contrast ratio ~2.85:1 -->
<style>
p.description {
color: #999999;
background-color: #ffffff;
font-size: 16px;
}
</style>
<p class='description'>This product is handcrafted from premium materials.</p>
Texte de corps avec contraste insuffisant — Correct
<!-- Darkened text color achieves 7:1 contrast ratio, exceeding 4.5:1 AA requirement -->
<style>
p.description {
color: #595959; /* contrast ratio 7.0:1 against #ffffff */
background-color: #ffffff;
font-size: 16px;
}
</style>
<p class='description'>This product is handcrafted from premium materials.</p>
Bouton d’appel à l’action avec faible contraste — Incorrect
<!-- White text on a light blue button: contrast ratio ~2.5:1 -->
<style>
.btn-primary {
background-color: #6eb5ff;
color: #ffffff;
font-size: 16px;
padding: 12px 24px;
border: none;
border-radius: 4px;
}
</style>
<button class='btn-primary'>Add to Cart</button>
Bouton d’appel à l’action avec faible contraste — Correct
<!-- Darker blue background raises contrast to 4.56:1 against white text -->
<style>
.btn-primary {
background-color: #0057b8; /* contrast ratio 4.56:1 against #ffffff */
color: #ffffff;
font-size: 16px;
padding: 12px 24px;
border: none;
border-radius: 4px;
}
</style>
<button class='btn-primary'>Add to Cart</button>
Texte indicatif (placeholder) dans un champ de formulaire — Incorrect
<!-- Default browser placeholder is often ~#757575 or lighter; some resets make it worse -->
<style>
input::placeholder {
color: #bbbbbb; /* contrast ratio ~1.6:1 against white background */
}
input {
background-color: #ffffff;
font-size: 16px;
}
</style>
<input type='email' placeholder='Enter your email address' />
Texte indicatif (placeholder) dans un champ de formulaire — Correct
<!-- #767676 achieves exactly 4.54:1 against white — the practical AA floor for normal text -->
<style>
input::placeholder {
color: #767676; /* contrast ratio 4.54:1 against #ffffff — passes AA */
}
input {
background-color: #ffffff;
font-size: 16px;
}
</style>
<input type='email' placeholder='Enter your email address' />
Texte sur une image d’arrière-plan ou un dégradé — Incorrect
<!-- Dark text directly on a light-to-dark gradient: passes in some regions, fails in others -->
<style>
.hero {
background: linear-gradient(to right, #ffffff, #0057b8);
padding: 40px;
}
.hero h1 {
color: #333333;
font-size: 32px;
}
</style>
<section class='hero'>
<h1>Welcome to Our Store</h1>
</section>
Texte sur une image d’arrière-plan ou un dégradé — Correct
<!-- A semi-transparent dark scrim behind the text ensures consistent contrast regardless of gradient -->
<style>
.hero {
background: linear-gradient(to right, #ffffff, #0057b8);
padding: 40px;
position: relative;
}
.hero-content {
background-color: rgba(0, 0, 0, 0.65); /* dark scrim guarantees contrast */
padding: 16px 24px;
display: inline-block;
border-radius: 4px;
}
.hero h1 {
color: #ffffff; /* white on near-black scrim exceeds 4.5:1 */
font-size: 32px;
margin: 0;
}
</style>
<section class='hero'>
<div class='hero-content'>
<h1>Welcome to Our Store</h1>
</div>
</section>
Erreurs courantes
- Supposer qu’une couleur semble correcte sur votre moniteur calibré : Les écrans haut de gamme avec de larges gamuts de couleurs et une forte luminosité peuvent rendre des combinaisons à faible contraste lisibles pour des designers ayant une vision normale dans un environnement contrôlé, alors que le même texte est illisible sur un ordinateur portable bon marché ou sous un éclairage fluorescent de bureau. Vérifiez toujours avec un outil de rapport de contraste, et non sur la seule base du jugement visuel.
- Oublier de tester séparément les états interactifs : Un lien peut respecter le rapport 4,5:1 dans son état par défaut mais tomber à 2,8:1 au survol (
:hover) lorsque la couleur s’éclaircit. Chaque état interactif doit respecter indépendamment le seuil. - Considérer les champs de formulaire désactivés comme universellement exemptés : L’exemption s’applique uniquement aux composants d’interface utilisateur inactifs. Si un champ est visuellement stylé comme désactivé mais reste programmaticalement activé (attribut
disabledmanquant), il n’est pas exempté et doit respecter les exigences de contraste. - Utiliser l’opacité pour estomper le texte sans tenir compte de la couleur effective : Définir
opacity: 0.5sur un texte sombre le mélange effectivement avec l’arrière-plan, produisant une couleur composite plus claire. Le rapport de contraste doit être calculé par rapport à la couleur composite résultante, et non à la valeur CSS d’origine. Par exemple,#000000à 50 % d’opacité sur du blanc se rend approximativement en#808080, ce qui donne un rapport de contraste d’environ 3,9:1 — en dessous du seuil de 4,5:1 pour le texte normal. - Ignorer le texte à l’intérieur des éléments SVG : Les éléments SVG
<text>stylés avecfillplutôt qu’avec la propriété CSScolorrestent soumis à 1.4.3. Les outils automatisés peuvent les manquer selon la manière dont le SVG est intégré (inline vs<img>vs<object>). Le SVG inline est l’approche la plus fiable pour les tests. - Mal identifier la taille du texte pour l’exemption de texte de grande taille : Les seuils 18 pt / 14 pt en gras se réfèrent à la taille rendue dans le navigateur de l’utilisateur, et non à la valeur en pixels CSS dans le code source. CSS
font-size: 24pxéquivaut exactement à 18 pt (puisque 1 pt = 1,333 px), mais si l’utilisateur a défini une taille de police par défaut plus grande, un élément de 16 px peut être rendu plus grand que 18 pt. Testez avec les tailles de police par défaut du navigateur et vérifiez soigneusement vos calculs de taille. - Se fier uniquement à la couleur pour distinguer le texte lié du texte de corps : Si un lien est stylé sans soulignement et utilise uniquement la couleur pour le différencier du texte environnant, la couleur du lien doit atteindre un rapport de 3:1 par rapport à la couleur du texte de corps en plus du rapport 4,5:1 par rapport à l’arrière-plan de la page. De nombreux designs échouent à l’une ou l’autre de ces exigences. Ajouter des soulignements (ou un autre indicateur visuel non basé sur la couleur) est l’approche la plus sûre.
- Ignorer le texte à l’intérieur des widgets tiers et des plugins de chat : Les widgets intégrés — fenêtres de chat en direct, bannières de consentement aux cookies, carrousels d’avis, flux de réseaux sociaux — font partie de la page et entrent dans le champ d’application de la conformité à WCAG 1.4.3. Un texte à faible contraste à l’intérieur d’un widget tiers constitue un échec même si votre propre base de code est entièrement conforme.
- Ne pas refaire de tests après l’activation du mode sombre ou du mode à contraste élevé : Un jeu de couleurs qui respecte les exigences en mode clair peut échouer en mode sombre si les propriétés personnalisées CSS ne sont pas gérées avec soin. De même, le mode de contraste élevé de Windows remplace de nombreuses déclarations de couleur CSS ; vérifiez que le texte reste lisible et qu’aucun CSS personnalisé ne réintroduit involontairement des paires à faible contraste dans des environnements à couleurs forcées.
- Utiliser CSS
background-clip: textou des techniques de texte en dégradé sans solution de repli : Le texte rempli de dégradés créé via-webkit-background-clip: text; color: transparentpose un problème de contraste complexe, car la couleur du texte varie à travers le glyphe. Les outils automatisés ne peuvent généralement pas résoudre cela, et la luminance réelle de chaque partie de la forme de lettre doit être vérifiée manuellement par rapport à l’arrière-plan de la page.
Lien avec la réglementation turque en matière d’accessibilité
La Circulaire présidentielle n° 2025/10 de la Turquie, publiée au Journal officiel (Resmî Gazete) n° 32933 le 21 juin 2025, établit un cadre national contraignant pour l’accessibilité numérique. La Circulaire impose la conformité aux normes internationales reconnues d’accessibilité du Web — alignant de fait les exigences réglementaires turques sur WCAG 2.2 — et introduit l’Erişilebilirlik Logosu (Logo d’accessibilité), délivré par le Ministère de la Famille et des Services sociaux (Aile ve Sosyal Hizmetler Bakanlığı), comme marque officielle de certification pour les produits et services numériques conformes.
WCAG 1.4.3 — Contraste (minimum) est un critère de succès de niveau AA, et la conformité de niveau AA constitue le socle requis pour prétendre au Logo d’accessibilité. Cela signifie que toute entité visant ce logo doit s’assurer que tout texte visible, non exempté, et toute image de texte sur ses sites Web et applications respectent les seuils de contraste 4,5:1 (texte normal) et 3:1 (texte de grande taille) définis par ce critère. Le non-respect de 1.4.3 est l’une des violations automatisées les plus fréquemment détectées et constituerait un obstacle direct à la certification.
La Circulaire s’applique à un large éventail d’entités des secteurs privé et public. Les entités concernées comprennent les institutions et organismes publics au niveau de l’administration centrale et locale ; les banques et institutions financières réglementées par l’Autorité de régulation et de supervision bancaires (BDDK) ; les hôpitaux et prestataires de soins de santé, publics et privés ; les opérateurs de télécommunications comptant 200 000 abonnés ou plus ; les plateformes de e-commerce qui atteignent les seuils applicables de chiffre d’affaires ou de volume de transactions ; les agences de voyage ; les entreprises de transport privées ; et les écoles privées et établissements d’enseignement autorisés par le Ministère de l’Éducation nationale (MEB).
Pour ces entités, traiter la conformité en matière de contraste n’est pas simplement une recommandation de bonne pratique — cela a une portée réglementaire. Les organisations non conformes s’exposent à un contrôle administratif et à des conséquences en termes de réputation, tandis que les organisations conformes peuvent afficher l’Erişilebilirlik Logosu comme un signal de confiance pour les environ 8,5 millions de personnes handicapées en Turquie, ainsi que pour les personnes âgées, les utilisateurs mobiles et le grand public qui bénéficient d’un design lisible et à fort contraste.
Les organisations opérant en Turquie qui n’ont pas encore réalisé d’audit WCAG 1.4.3 devraient donner la priorité à une analyse automatisée de tous les points de contact numériques accessibles au public — Web, Web mobile et applications natives le cas échéant — suivie d’un examen manuel des arrière-plans en dégradé, des superpositions d’images et des composants intégrés tiers. La mise en place d’un système de jetons de design (design tokens) avec des paires de couleurs pré-approuvées et vérifiées en contraste est la solution la plus évolutive à long terme, garantissant que les nouveaux composants d’interface utilisateur héritent par défaut de combinaisons de couleurs accessibles et que les futures refontes n’introduisent pas involontairement de défaillances de contraste.
