Un *contrast checker* è lo strumento che designer e sviluppatori usano prima di rilasciare una schermata. Calcola il **rapporto di contrasto** tra due colori, il testo e lo sfondo dietro di esso, con la formula definita nelle Web Content Accessibility Guidelines (WCAG). Più alto è il rapporto, più il testo è facile da leggere.
Le WCAG definiscono tre soglie. **3:1** è il minimo per i titoli grandi (24px o più in peso normale, 18.66px o più in grassetto) e per il bordo visibile dei componenti interattivi come pulsanti, campi dei moduli e icone. **4.5:1** è il minimo AA per il testo normale, l'asticella a cui punta la maggior parte dei team. **7:1** è il livello AAA, il più alto, che dà un supporto solido a chi ha una vista ridotta.
Il contrasto **non** è la stessa cosa di quanto due colori sembrino vivaci. Due colori di brand accesi possono comunque essere difficili da leggere se la loro *luminanza* è simile. Questo strumento applica la formula della luminanza WCAG a ogni canale, riporta il rapporto esatto e valuta ogni contesto, così non devi tirare a indovinare.
Cosa imparerai controllando il contrasto
I rapporti di contrasto vanno da 1:1 (colori identici) a 21:1 (nero puro su bianco puro). Le coppie di colori di brand più comuni di solito cadono tra 2:1 e 12:1.
Le WCAG usano la *luminanza relativa*, non la luminosità percepita: il giallo su bianco può sembrarti a posto e fallire comunque con 1.3:1.
Il testo grande ha una soglia più permissiva (3:1 per AA) perché i glifi più grandi sono più facili da distinguere a parità di contrasto.
Pulsanti, bordi dei moduli e icone devono raggiungere 3:1 rispetto allo sfondo adiacente: è la regola del *contrasto non testuale* aggiunta nelle WCAG 2.1.
Regolare la *luminosità* (non la tonalità) è il modo più sicuro per correggere una coppia che non passa senza cambiare il colore del brand.
Come controllare il contrasto dei colori passo dopo passo
1
Inserisci i due colori
Scrivi o incolla un valore HEX, oppure usa il selettore colore. Il primo piano è il testo o l'icona; lo sfondo è ciò che sta dietro.
2
Leggi il rapporto di contrasto
Il numero grande a sinistra è il rapporto di contrasto WCAG. Sotto 3:1 è rischioso per qualsiasi interfaccia; sotto 4.5:1 non passa per il testo normale.
3
Controlla i livelli AA/AAA
Tre righe mostrano se passa o no per il testo normale (4.5/7), il testo grande (3/4.5) e i componenti dell'interfaccia (3:1). Punta alle spunte verdi su ogni riga che il tuo design usa davvero.
4
Premi "Regola primo piano" se una riga non passa
Quando AA non passa, lo strumento può alzare o abbassare la luminosità del primo piano, mantenendo la tonalità, finché la coppia non passa. Clicca di nuovo per AAA.
5
Copia la coppia finale
Quando entrambi i colori passano nei contesti che ti servono, copia lo snippet CSS (color: + background:) e incollalo nel tuo foglio di stile o nel file dei design token.
Regola di base per paragrafi, etichette, didascalie
Testo grande (≥ 18pt in peso normale o ≥ 14pt in grassetto)
3 : 1
4.5 : 1
Titoli, testi hero, citazioni grandi
Componenti dell'interfaccia e oggetti grafici
3 : 1
-
Bordi dei pulsanti, campi dei moduli, icone, anelli di focus
Logo o pura decorazione
Esente
Esente
Loghi e testo incidentale sono esenti, ma l'usabilità conta comunque
Stato disabilitato
Esente
Esente
I controlli inattivi sono esenti, ma non approfittarne per rilasciare impostazioni predefinite a basso contrasto
Esempi di contrasto da provare
Una coppia scuro su chiaro che passa
Testo normale, AA + AAA con margine
color:#1f2937;/* slate-800 */background:#f9fafb;/* slate-50 *//* Contrast ratio ≈ 14.6:1 */
Il classico grigio ardesia scuro su quasi bianco. Passa AAA per il testo normale (≥ 7:1) con margine. La maggior parte delle interfacce di prodotto dovrebbe puntare a questi valori di default.
Un blu di brand che *per un soffio* non passa AA
Sembra deciso, ma i conti non tornano
color:#3b82f6;/* blue-500 */background:#ffffff;/* Contrast ratio ≈ 4.0:1 */
I blu vivaci su bianco finiscono spesso intorno a 4:1: leggibili per i titoli grandi (passano il 3:1 AA per testo grande) ma sotto l'asticella di 4.5:1 per il testo normale. Usalo per pulsanti ed etichette di CTA da 18px in su, non per i paragrafi.
Un giallo che sembra a posto e non lo è
L'occhio inganna, la luminanza no
color:#facc15;/* amber-400 */background:#ffffff;/* Contrast ratio ≈ 1.6:1 */
Il giallo acceso su bianco è una trappola famosa: i colori sembrano forti ma la loro luminanza è troppo vicina. Non passa nessun livello. Riserva questa combinazione agli sfondi scuri (ad es. #facc15 su #1f2937 arriva a ≈ 12:1).
Errori comuni sul contrasto
Fidarsi degli occhi invece che del rapporto. I colori brillanti e saturi possono sembrare "forti" e fallire comunque i calcoli WCAG.
Dimenticare che i pesi del font sottili e leggeri di fatto *riducono* il contrasto: appaiono come meno inchiostro per pixel. Alza il rapporto per i pesi molto sottili.
Controllare solo sul bianco puro. Gli sfondi reali sono bianco sporco, gradienti o fotografie: ricontrolla sul colore effettivo su cui sta il testo.
Mettere il testo di placeholder e disabled vicino al limite WCAG. Sono entrambi esenti dalle WCAG, ma esente non vuol dire leggibile.
Saltare la regola del 3:1 per il contrasto *non testuale*. Pulsanti che spariscono nello sfondo, campi dei moduli senza un bordo visibile e anelli di focus invisibili sono le violazioni di accessibilità più comuni dopo il basso contrasto del testo.
FAQ sul contrast checker WCAG
Qual è un buon rapporto di contrasto tra colori?
Punta ad almeno 4.5:1 per il testo normale e 3:1 per i titoli grandi o l'interfaccia interattiva. 7:1 è l'obiettivo AAA: severo, ma vale la pena puntarci nei flussi di lettura critici come documentazione, istruzioni e messaggi di errore.
Che differenza c'è tra AA e AAA?
AA è il livello base di accessibilità richiesto dalla maggior parte delle normative (WCAG 2.1/2.2 AA). AAA è l'obiettivo più severo per le organizzazioni che vogliono supportare gli utenti con vista ridotta. AAA non è obbligatorio, ma per il testo normale è un obiettivo ragionevole.
Cosa conta come "testo grande" nelle WCAG?
Le WCAG definiscono testo grande quello da 18pt in su (circa 24px) in peso normale, oppure da 14pt in su (circa 18.66px) in grassetto. Al testo grande basta 3:1 per passare AA; il testo più piccolo ha bisogno di 4.5:1.
Perché il colore del mio brand non passa il contrasto?
Le tonalità medie brillanti, soprattutto blu, gialli e rossi intorno al 50% di luminosità, finiscono spesso appena sotto 4.5:1 su bianco. Di solito la soluzione è scurire il primo piano (o usarlo come sfondo sotto un testo bianco). Usa il pulsante "Regola primo piano" per trovare la sfumatura più vicina che passa.
I controlli disabilitati devono rispettare il contrasto WCAG?
No, i controlli disabilitati e la pura decorazione sono esplicitamente esenti. Ma "esente" non vuol dire "buona UX". Se gli utenti non distinguono un pulsante disabilitato dallo sfondo, non sanno nemmeno che esiste.