Criteri di successo WCAG · Level AAA

WCAG 1.4.6: Contrasto (Avanzato)

WCAG 1.4.6 richiede un rapporto di contrasto minimo di 7:1 per il testo normale e di 4,5:1 per il testo di grandi dimensioni tra i colori di primo piano e di sfondo, andando oltre la soglia AA per garantire la leggibilità agli utenti con ipovisione, deficit nella percezione dei colori o a coloro che operano in condizioni di illuminazione difficili.

Cosa Significa Questa Regola

WCAG 1.4.6 Contrast (Enhanced) è un criterio di successo di livello AAA all’interno della Linea guida 1.4 (Distinguishable). Richiede che la presentazione visiva del testo e delle immagini di testo abbia un rapporto di contrasto di almeno 7:1 rispetto allo sfondo. Per il testo di grandi dimensioni — definito come almeno 18pt (circa 24px) per il peso normale, o almeno 14pt (circa 18,67px) per il grassetto — il rapporto di contrasto richiesto è almeno 4,5:1. Questo rappresenta un notevole incremento rispetto al criterio di livello AA 1.4.3, che richiede solo 4,5:1 per il testo normale e 3:1 per il testo di grandi dimensioni.

Il rapporto di contrasto è calcolato utilizzando la luminanza relativa dei due colori coinvolti, come definito nella specifica WCAG. La formula considera i valori RGB linearizzati dei colori di primo piano e di sfondo per produrre un rapporto che va da 1:1 (nessun contrasto, colori identici) a 21:1 (massimo contrasto, nero su bianco o bianco su nero).

Questo criterio si applica a tutto il testo renderizzato nell’interfaccia, incluso il testo all’interno delle immagini, le icone contenenti testo e il testo renderizzato in elementi canvas quando l’output renderizzato è accessibile. Riguarda intestazioni, corpo del testo, etichette, testo segnaposto nei campi dei moduli quando trasmette informazioni significative, etichette dei pulsanti, testo dei link, elementi di navigazione e qualsiasi altro contenuto testuale visibile sullo schermo.

WCAG 1.4.6 condivide le stesse eccezioni ufficiali del criterio 1.4.3. I seguenti elementi sono esplicitamente esclusi dal requisito:

  • Testo incidentale: Testo o immagini di testo puramente decorative, non visibili a nessuno, o che fanno parte di un’immagine che contiene altri contenuti visivi significativi. Un esempio è il testo visibile sullo sfondo di una fotografia usata come decorazione.
  • Logotipi: Il testo che fa parte di un logo o di un nome di marca non ha alcun requisito di contrasto. Questo si applica solo alla parte di wordmark del logo di un’azienda, non al testo adiacente del corpo o alle etichette dell’interfaccia utente.
  • Componenti dell’interfaccia utente inattivi: Il testo all’interno di controlli di modulo disabilitati, pulsanti disabilitati o altri elementi dell’interfaccia che non sono attualmente operabili è esente. Tuttavia, questa esenzione dovrebbe essere applicata con parsimonia — l’interfaccia utente inattiva dovrebbe comunque essere sufficientemente percepibile da comunicare la propria esistenza.

Un superamento di questo criterio significa che ogni istanza di contenuto testuale che non è esplicitamente esclusa soddisfa o supera il rapporto 7:1 (o 4,5:1 per il testo di grandi dimensioni). Si ha un fallimento quando qualsiasi testo non escluso scende al di sotto di queste soglie, anche di poco. Il contrasto deve essere mantenuto in tutti gli stati supportati — hover, focus, active, visited — poiché il criterio si applica alla presentazione renderizzata in ciascuno di questi stati.

Perché È Importante

Secondo l’Organizzazione Mondiale della Sanità, circa 2,2 miliardi di persone nel mondo vivono con qualche forma di deficit visivo. Tra queste, centinaia di milioni sperimentano condizioni che riducono direttamente la capacità di distinguere tra i colori o percepire testo a basso contrasto, tra cui cataratta, glaucoma, degenerazione maculare e varie forme di deficit della visione dei colori. Per questa popolazione, interfacce che soddisfano solo la soglia di contrasto AA di 4,5:1 possono comunque rappresentare barriere significative alla lettura e alla comprensione.

Il rapporto 7:1 richiesto da questo criterio è specificamente calibrato per tenere conto della perdita di sensibilità al contrasto associata all’invecchiamento degli occhi e alle comuni condizioni di ipovisione. La ricerca in ambito di scienze della visione mostra che una persona con sensibilità al contrasto moderatamente ridotta — approssimativamente equivalente a una persona con visione 20/80 che utilizza lenti correttive — può sperimentare una riduzione effettiva del contrasto di circa tre a uno. Un rapporto di contrasto progettuale di 7:1, dopo questa riduzione percettiva, fornisce ancora un contrasto percepito di circa 2,3:1, che è vicino alla soglia minima alla quale il testo diventa leggibile. Senza questo margine, tali utenti potrebbero essere completamente incapaci di leggere il contenuto.

Consideriamo uno scenario reale: un cliente di banca di 68 anni che gestisce le proprie finanze online in un pomeriggio luminoso, con la luce del sole che si riflette sullo schermo del laptop. Anche con una visione clinicamente pienamente funzionale, il riflesso e la naturale riduzione della sensibilità al contrasto che accompagna l’invecchiamento possono rendere il testo grigio medio su sfondo bianco completamente illeggibile. Un design che raggiunge un contrasto di 7:1 in condizioni normali sarà ancora utilizzabile in questo contesto; uno che supera a malapena 4,5:1 non lo sarà.

Oltre all’impatto specifico sulla disabilità, il testo ad alto contrasto avvantaggia praticamente tutti gli utenti in ambienti di lettura subottimali: forte luce solare all’aperto, schermi usurati con retroilluminazione ridotta, display e-ink monocromatici e proiettori di bassa qualità nelle sale riunioni. Il requisito di contrasto migliorato rappresenta quindi non solo un miglioramento dell’accessibilità ma anche un ampio incremento dell’usabilità.

Da una prospettiva di ottimizzazione per i motori di ricerca, il testo ad alto contrasto tende a correlare con gerarchie tipografiche più pulite e strutturate. Sebbene i motori di ricerca non misurino direttamente il contrasto, la disciplina progettuale necessaria per soddisfare gli standard di contrasto AAA produce tipicamente pagine con una gerarchia visiva più forte e migliori punteggi di leggibilità, che contribuiscono a tassi di rimbalzo più bassi e tempi di permanenza più lunghi — segnali che avvantaggiano indirettamente le prestazioni SEO.

Regole Axe-core Correlate

  • color-contrast-enhanced: Questa è la principale regola axe-core associata a WCAG 1.4.6. Valuta i colori di primo piano e di sfondo calcolati di tutti i nodi di testo nel DOM e calcola il loro rapporto di contrasto utilizzando la formula di luminanza WCAG. La regola segnala qualsiasi elemento di testo in cui il rapporto di contrasto scende al di sotto di 7:1 per il testo di dimensioni normali o al di sotto di 4,5:1 per il testo di grandi dimensioni (come definito da font-size e font-weight calcolati). Riporta il rapporto effettivo riscontrato, il rapporto richiesto e l’elemento responsabile, rendendo la correzione semplice. La regola distingue tra testo normale e di grandi dimensioni utilizzando le stesse soglie di dimensione definite da WCAG: 18pt (24px) per il peso normale e 14pt (18,67px) per il grassetto.
  • Limitazioni che richiedono test manuali: Regole automatizzate come color-contrast-enhanced non possono rilevare errori di contrasto in diversi scenari importanti. Il testo renderizzato all’interno di elementi <canvas> è invisibile allo scanner basato sul DOM e richiede un’ispezione visiva manuale. Il testo sovrapposto a sfondi con gradiente o fotografici presenta una sfida particolarmente difficile: il rapporto di contrasto varia lungo il testo a seconda della parte del gradiente o dell’immagine che si trova dietro ciascuna lettera. Gli strumenti automatizzati in genere campionano un singolo colore di sfondo o riportano risultati inconcludenti in questi casi. Il testo che cambia colore al passaggio del mouse o al focus deve inoltre essere testato manualmente in ciascuno stato interattivo, poiché le scansioni automatizzate catturano tipicamente solo lo stato renderizzato predefinito. Inoltre, il testo il cui contrasto dipende da proprietà personalizzate CSS risolte a runtime tramite JavaScript potrebbe non essere valutabile durante una scansione statica.

Come Testare

  1. Scansione automatizzata con axe DevTools: Installa l’estensione del browser axe DevTools (Chrome o Firefox). Apri la pagina di destinazione, attiva l’estensione ed esegui una scansione dell’intera pagina. Nel pannello dei risultati, filtra per l’ID della regola color-contrast-enhanced o cerca “enhanced” nell’elenco dei problemi. Per ciascun elemento segnalato, il pannello mostra l’elemento, il rapporto di contrasto effettivo e il rapporto richiesto. Prendi nota di eventuali elementi riportati come “da verificare” piuttosto che come superati o falliti in modo definitivo — in genere si tratta di sfondi calcolati che non è stato possibile risolvere e che richiedono una verifica manuale.
  2. Scansione automatizzata con Lighthouse: Apri Chrome DevTools, vai alla scheda Lighthouse ed esegui un audit di accessibilità. Lighthouse utilizza axe-core internamente, quindi mostrerà le stesse violazioni color-contrast-enhanced. Il report le raggruppa sotto Accessibilità e collega ciascun elemento non conforme. Tieni presente che Lighthouse analizza la pagina nel suo stato predefinito e non testa stati interattivi come hover o focus.
  3. Campionamento manuale dei colori: Utilizza il selettore di colori degli strumenti di sviluppo del browser o uno strumento dedicato come Colour Contrast Analyser (TPGi) per campionare manualmente i colori di primo piano e di sfondo degli elementi di testo. Questo è particolarmente importante per il testo su immagini, gradienti o sfondi semitrasparenti. Campiona più punti lungo il testo in cui lo sfondo varia e verifica che il rapporto di contrasto minimo tra tutti i punti campionati soddisfi 7:1 per il testo normale o 4,5:1 per il testo di grandi dimensioni.
  4. Test degli stati interattivi: Utilizzando gli strumenti di sviluppo del browser, forza gli elementi nei loro stati hover, focus, active e visited (tramite il pannello :hov in Chrome DevTools o equivalente). Riesegui il controllo del contrasto in ciascuno stato per assicurarti che le modifiche di colore applicate tramite pseudo-classi CSS non introducano errori di contrasto. Presta particolare attenzione agli stati visited dei link, agli stati hover dei pulsanti e agli indicatori di focus dei campi dei moduli.
  5. Verifica con screen reader (NVDA + Firefox): Sebbene gli screen reader non testino direttamente il contrasto, verificare che il testo sia accessibile a NVDA conferma che si tratta di vero testo nel DOM (non un’immagine di testo senza alternativa). Avvia Firefox, apri NVDA e naviga nella pagina utilizzando il cursore di lettura. Qualsiasi testo che NVDA non riesce a leggere dovrebbe essere esaminato per determinare se si tratta di un’immagine di testo che richiede un test di contrasto a livello di immagine.
  6. Verifica con screen reader (VoiceOver + Safari su macOS): Attiva VoiceOver con Command+F5 e naviga nella pagina utilizzando VO+Freccia destra. Come con NVDA, il testo che VoiceOver salta o legge in modo errato può indicare un rendering del testo non standard che richiede un’ispezione manuale del contrasto.
  7. Simulazione in scala di grigi: Abilita la modalità di visualizzazione in scala di grigi tramite le impostazioni di accessibilità del sistema operativo (disponibile su Windows, macOS, iOS e Android). Questo rimuove tutte le informazioni sul colore e rende immediatamente visibili le differenze di contrasto. Il testo che diventa difficile da leggere in modalità scala di grigi quasi certamente non soddisfa il requisito di contrasto migliorato.

Come Correggere

Testo del Corpo su Sfondo Chiaro — Errato

<!-- Fails 1.4.6: #767676 on #ffffff yields approximately 4.54:1,
     which passes AA (1.4.3) but falls far short of the 7:1 AAA requirement -->
<p style='color: #767676; background-color: #ffffff;'>
  Please review our terms and conditions before proceeding.
</p>

Testo del Corpo su Sfondo Chiaro — Corretto

<!-- Passes 1.4.6: #595959 on #ffffff yields approximately 7.0:1,
     meeting the enhanced contrast requirement for normal-weight body text -->
<p style='color: #595959; background-color: #ffffff;'>
  Please review our terms and conditions before proceeding.
</p>

Intestazione Colorata su Sfondo di Brand — Errato

<!-- Fails 1.4.6: brand blue #4A90D9 on white #ffffff yields approximately 3.0:1.
     Even though this is a heading and may appear large, bold headings at
     common web sizes (e.g. 20px bold) may not qualify as WCAG "large text"
     depending on rendering, and 3.0:1 fails even the large-text 4.5:1 threshold -->
<h2 style='color: #4A90D9; background-color: #ffffff;'>
  Welcome to Our Services
</h2>

Intestazione Colorata su Sfondo di Brand — Corretta

<!-- Passes 1.4.6: dark navy #1A3A5C on white #ffffff yields approximately 12.6:1.
     Exceeds the 7:1 requirement for normal text and comfortably surpasses
     the 4.5:1 large-text requirement. Brand identity is preserved through
     the use of a darker shade within the same hue family. -->
<h2 style='color: #1A3A5C; background-color: #ffffff;'>
  Welcome to Our Services
</h2>

Testo su Sfondo con Gradiente — Errato

<!-- Fails 1.4.6: The gradient transitions from a dark color that provides
     adequate contrast on the left to a light color that provides insufficient
     contrast on the right. Text spanning the full width will fail at some point. -->
<div style='background: linear-gradient(to right, #1a1a1a, #cccccc); padding: 20px;'>
  <p style='color: #ffffff;'>Create your account today and get started.</p>
</div>

Testo su Sfondo con Gradiente — Corretto

<!-- Passes 1.4.6: A semi-transparent dark overlay behind the text ensures
     that foreground text maintains at least 7:1 contrast regardless of
     the underlying gradient value at any point beneath the text block. -->
<div style='background: linear-gradient(to right, #1a1a1a, #cccccc); padding: 20px;'>
  <p style='color: #ffffff; background-color: rgba(0,0,0,0.75); padding: 8px 12px; display: inline-block;'>
    Create your account today and get started.
  </p>
</div>

Testo Segnaposto in un Campo di Input — Errato

<!-- Fails 1.4.6: default browser placeholder styling is typically around
     #aaaaaa on white, yielding approximately 2.32:1. If placeholder text
     conveys meaningful information (e.g. format hints), it must meet contrast requirements. -->
<input type='text' placeholder='DD/MM/YYYY' style='background: #ffffff;'>

Testo Segnaposto in un Campo di Input — Corretto

<!-- Passes 1.4.6: Override the default placeholder color to achieve 7:1 contrast.
     Also adds a visible label as best practice, since placeholders disappear on input. -->
<label for='dob'>Date of Birth</label>
<input type='text' id='dob' placeholder='DD/MM/YYYY'
  style='background: #ffffff; color: #000000;'>
<style>
  input::placeholder {
    color: #595959; /* approximately 7.0:1 on white — meets AAA */
  }
</style>

Errori Comuni

  • Affidarsi esclusivamente a combinazioni di colori che superano il livello AA senza verificare le soglie AAA: Molti designer utilizzano il comune grigio medio #767676 su bianco, che supera il criterio 1.4.3 con circa 4,54:1 ma fallisce il criterio 1.4.6 con un margine significativo. Verifica sempre rispetto all’obiettivo 7:1, non solo 4,5:1.
  • Presumere che le esenzioni per il testo di grandi dimensioni si applichino in modo troppo esteso: L’eccezione per il testo di grandi dimensioni (4,5:1 invece di 7:1) si applica solo al testo di almeno 18pt (24px) con peso normale o almeno 14pt (18,67px) in grassetto. Il testo a 20px con peso normale non rientra in questa categoria e deve comunque soddisfare 7:1.
  • Ignorare il contrasto negli stati interattivi: Applicare un colore più chiaro al passaggio del mouse per creare un affordance visiva senza verificare se lo stato hover soddisfa ancora 7:1. Ad esempio, scurire lo sfondo di un pulsante al passaggio del mouse mantenendo il testo bianco può ancora superare il test, ma schiarire il testo al passaggio del mouse causa frequentemente errori.
  • Trascurare le catene di proprietà personalizzate CSS: Definire un colore del testo come var(--color-primary) dove --color-primary è impostato globalmente ma sovrascritto localmente nell’ambito di un componente senza riverificare il contrasto. Il colore effettivamente renderizzato può differire dal valore del token globale e produrre un rapporto non conforme in contesti specifici del componente.
  • Trattare l’esenzione per lo stato disabilitato come una licenza progettuale: Utilizzare l’esenzione per l’interfaccia utente inattiva come giustificazione per stilizzare elementi disabilitati con un contrasto 1:1 (testo invisibile), rendendo impossibile per gli utenti sapere che un campo esiste. Gli elementi disabilitati dovrebbero comunque essere visivamente percepibili anche se sono esenti dal requisito 7:1.
  • Non testare il testo renderizzato su immagini o video: Posizionare il testo direttamente su un’immagine hero o su uno sfondo video e verificare il contrasto solo rispetto al colore medio anziché rispetto alla porzione più chiara dell’immagine attraversata dal testo. Il contrasto minimo deve essere mantenuto su ogni pixel sotto il testo, non in media.
  • Applicare correzioni di contrasto solo ai breakpoint desktop: I design responsive che utilizzano colori di sfondo diversi ai breakpoint mobile — ad esempio, passando da uno sfondo bianco su desktop a uno sfondo beige chiaro su mobile — possono introdurre nuovi errori di contrasto alle dimensioni di schermo più piccole che non erano presenti durante i test su desktop.
  • Dimenticare il contrasto del testo negli indicatori di focus: Quando un anello di focus personalizzato o uno stato di focus personalizzato cambia sia lo sfondo sia il colore del testo di un elemento in focus, la nuova combinazione testo-sfondo nello stato di focus deve soddisfare indipendentemente il rapporto 7:1, a prescindere da ciò che ottiene lo stato predefinito.
  • Presumere che l’esenzione per il logo si estenda al testo descrittivo adiacente: Posizionare un payoff o una descrizione di prodotto nello stesso blocco tipografico del logo di un brand e rivendicare l’esenzione per il logo per l’intero blocco. L’esenzione si applica rigorosamente al testo che è parte integrante del logo stesso, non a qualsiasi testo vicino.
  • Non validare il contrasto dopo override del framework CSS: Importare una libreria di componenti di terze parti o un framework CSS che reimposta o sovrascrive i colori del testo con valori inferiori a 7:1, quindi distribuire tali valori predefiniti senza audit. I valori predefiniti dei framework sono quasi mai calibrati sugli standard di contrasto AAA.

Relazione con le Normative di Accessibilità della Turchia

La Circolare Presidenziale 2025/10 della Turchia, pubblicata nella Gazzetta Ufficiale n. 32933 il 21 giugno 2025, stabilisce requisiti obbligatori di accessibilità digitale per un’ampia gamma di istituzioni e organizzazioni che operano in Turchia. La circolare impone la conformità a WCAG 2.2 a livello AA come standard di base. Le tipologie di soggetti coperti includono istituzioni e agenzie pubbliche, piattaforme di e-commerce, banche e fornitori di servizi finanziari, ospedali e organizzazioni sanitarie, società di telecomunicazioni con 200.000 o più abbonati, agenzie di viaggio, società di trasporto privato e scuole private autorizzate dal Ministero dell’Istruzione Nazionale (MoNE).

WCAG 1.4.6 Contrast (Enhanced) è un criterio di livello AAA e pertanto non è un requisito obbligatorio ai sensi della Circolare Presidenziale. Le organizzazioni che raggiungono solo la conformità di livello AA — la soglia minima prevista dalla legge — non saranno in violazione della circolare per l’omissione del requisito di contrasto migliorato 7:1, a condizione che soddisfino la soglia AA di 4,5:1 per il testo normale definita dal criterio 1.4.3.

Tuttavia, raggiungere la conformità AAA sul contrasto rappresenta un impegno significativo verso un design inclusivo che va ben oltre il minimo rispetto legale. Per le istituzioni pubbliche, che hanno l’obbligo più ampio di servire tutti i cittadini indipendentemente dallo stato di disabilità, adottare volontariamente lo standard di contrasto migliorato segnala una reale dedizione all’accesso universale. Le organizzazioni sanitarie e gli ospedali — settori in cui i pazienti possono già trovarsi sotto stress fisico o cognitivo, o possono interagire con sistemi digitali in condizioni difficili come una forte illuminazione clinica — hanno un motivo pratico particolarmente forte per superare la soglia minima di contrasto. Allo stesso modo, banche e fornitori di servizi finanziari i cui clienti includono sempre più persone anziane sono in una posizione ideale per beneficiare della credibilità e della fiducia degli utenti che la conformità al contrasto AAA comunica.

Le organizzazioni che perseguono la certificazione ISO 30071-1, l’allineamento allo standard europeo EN 301 549 o qualsiasi processo di approvvigionamento internazionale che valuti la maturità in materia di accessibilità scopriranno che la conformità al contrasto di livello AAA rafforza la loro posizione. Man mano che l’applicazione dell’accessibilità digitale matura a livello globale e in Turchia in particolare, i criteri attualmente a livello AAA sono storicamente migrati verso lo status di requisiti obbligatori nei successivi aggiornamenti normativi. Adottare ora il contrasto migliorato posiziona le organizzazioni in anticipo rispetto ai probabili requisiti futuri e riduce il costo delle eventuali attività di correzione.

Per le organizzazioni che utilizzano l’SDK di overlay Accsible, gli strumenti di regolazione del contrasto della piattaforma possono aiutare gli utenti ad applicare modalità ad alto contrasto a livello di widget, fornendo uno strato compensativo che contribuisce a colmare il divario tra i livelli di contrasto del design pubblicato e le esigenze del singolo utente. Questo non sostituisce il rispetto del criterio a livello di codice sorgente, ma fornisce un supporto significativo a runtime per gli utenti che necessitano di contrasto migliorato e che visitano siti che non hanno ancora raggiunto la piena conformità AAA.