Colore

Contrasto dei colori: testo leggibile per tutti

Il contrasto è la differenza tra parole che le persone leggono e parole che saltano. I numeri WCAG in parole semplici, come verificarli e cosa cambia quando lo sfondo è un gradiente.

GradientlyAccount Gradiently verificato··6 min di lettura
Copertina: Andes Mirror · GR·WVR2·V3

In breve

  • Il contrasto dei colori è la differenza di luminosità tra il testo e il suo sfondo, misurata come rapporto da 1:1 (nessuna differenza) a 21:1 (nero su bianco).
  • Il livello AA delle WCAG 2 richiede almeno 4,5:1 per il testo normale e 3:1 per il testo grande, cioè circa 24 px normale o 18,66 px in grassetto.
  • Anche icone, bordi dei campi e altre parti di un’interfaccia che le persone devono vedere richiedono almeno 3:1 rispetto a ciò che le circonda.
  • Su bianco, #767676 è il grigio semplice più chiaro che supera 4,5:1 per il testo, e #777777 per un soffio non lo supera.
  • Su un gradiente il contrasto cambia da punto a punto, quindi devi verificare il punto peggiore dietro le parole, non il colore medio.
In questa pagina

Il contrasto dei colori è la differenza di luminosità tra il testo e il colore che ha dietro, e decide se le persone riescono a leggere le tue parole. Le Web Content Accessibility Guidelines (WCAG) lo misurano con un rapporto da 1:1, dove i due colori sono identici, a 21:1, nero su bianco. Per il livello AA, il testo normale richiede almeno 4,5:1 e il testo grande almeno 3:1. Tutto il resto di questa guida serve a raggiungere quei numeri senza rendere il design timido.

Il contrasto conta per tutti, non solo per chi ha una vista debole. Telefoni sotto il sole, proiettori fiochi, monitor economici e occhi stanchi riducono la differenza tra i colori. I design con contrasto sufficiente, semplicemente, vengono letti di più.

I rapporti di contrasto WCAG in parole semplici

Tre regole delle WCAG 2 coprono quasi ogni decisione di design. Vengono dai criteri di successo del W3C e sono quelle a cui si riferiscono la maggior parte degli audit e delle normative sull’accessibilità.

CosaLivello AALivello AAANote
Testo normale4,5:17:1Testo corrente, didascalie, etichette, pulsanti
Testo grande3:14,5:1Almeno 18 pt (circa 24 px), o 14 pt in grassetto (circa 18,66 px)
Icone e parti dell’interfaccia3:13:1Bordi dei campi, linee dei grafici che portano significato, icone senza etichetta
Logo e decorazioniNessunoNessunoI logotipi del brand e il testo puramente decorativo sono esenti
Il livello AA è l’obiettivo abituale. L’AAA è più severo e vale la pena per le letture lunghe.

Due dettagli mettono in difficoltà. Primo, «grande» dipende dalla dimensione effettiva, quindi un titolo da 24 px su un telefono che lo rimpicciolisce può smettere di contare come grande. Secondo, un pulsante disattivato è esente, ma un segnaposto grigio chiaro che le persone devono capire non lo è.

Come si calcola il rapporto di contrasto

Il rapporto confronta la luminanza relativa dei due colori: quanta luce emette ciascuno, pesata come la vede l’occhio. Il verde contribuisce di più, il rosso meno e il blu pochissimo, ed è per questo che un blu saturo può essere sorprendentemente scuro e un giallo sorprendentemente chiaro. La formula è (L1 + 0.05) / (L2 + 0.05), dove L1 è il colore più chiaro.

js
// WCAG 2 contrast ratio between two hex colours
const channel = (c) => {
  c /= 255
  return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4
}
const luminance = (hex) => {
  const [r, g, b] = [1, 3, 5].map((i) => channel(parseInt(hex.slice(i, i + 2), 16)))
  return 0.2126 * r + 0.7152 * g + 0.0722 * b
}
const contrast = (a, b) => {
  const [hi, lo] = [luminance(a), luminance(b)].sort((x, y) => y - x)
  return (hi + 0.05) / (lo + 0.05)
}

contrast('#767676', '#ffffff') // 4.54, passes for body text
contrast('#777777', '#ffffff') // 4.48, fails
L’intero calcolo sta in una dozzina di righe. Utile per controllare in blocco la palette di un brand.

Non serve calcolarlo a mano. Il verificatore di contrasto di WebAIM prende due codici esadecimali e ti dice quali livelli superano, e il selettore colore degli strumenti per sviluppatori di Chrome mostra il rapporto di qualsiasi testo ispezioni.

Coppie di colori che passano e che falliscono

I colori dei brand cadono spesso nel mezzo scomodo, troppo scuri per il testo scuro e troppo chiari per il testo bianco. Verdi medi, arancioni, rosa e azzurri sono i soliti sospetti. Ecco abbinamenti comuni, con i loro rapporti reali.

Testo su sfondoRapportoTesto normaleTesto grande
Bianco su viola #7c3aed5,7:1PassaPassa
Bianco su viola chiaro #8b5cf64,2:1Non passaPassa
Bianco su blu #2563eb5,2:1PassaPassa
Bianco su azzurro #3b82f63,7:1Non passaPassa
Bianco su verde #10b9812,5:1Non passaNon passa
Quasi nero #0b0b10 su verde #10b9817,7:1PassaPassa
Bianco su ambra #f59e0b2,2:1Non passaNon passa
Grigio #999999 su bianco2,9:1Non passaNon passa
Grigio #6b7280 su bianco4,8:1PassaPassa
Un piccolo spostamento può decidere: due blu quasi uguali all’occhio cadono ai lati opposti di 4,5:1.

Perché i gradienti rendono il contrasto più difficile

Uno sfondo a tinta unita ha un solo rapporto di contrasto. Un gradiente ne ha uno diverso in ogni punto. Il testo bianco che passa senza problemi sull’estremità scura di una sfumatura può fallire del tutto su quella chiara, e un titolo che attraversa il gradiente passa e non passa nella stessa riga.

Da mezzanotte a viola a rosalinear-gradient(90deg, #1f0b3a 0%, #7c3aed 55%, #f472b6 100%)
Il testo bianco ottiene 18:1 a sinistra, 5,7:1 sul viola e 2,7:1 all’estremità rosa. Un solo gradiente, tre verdetti.

La regola è semplice: verifica il punto più chiaro dietro il testo chiaro, o il punto più scuro dietro il testo scuro. Se il punto peggiore passa, passa l’intera riga. I colori medi e i campioni del contagocce presi dal centro ti trarranno in inganno.

Come correggere il contrasto su un gradiente

  1. 1

    Sposta le parole sull’estremità calma

    Metti il testo sulla parte più scura o più chiara del gradiente e lascia che la transizione luminosa avvenga lontano da esso.

  2. 2

    Restringi la gamma dietro il testo

    Tieni la parte del gradiente che sta dietro le parole entro una piccola gamma di luminosità. Il resto della tela può essere audace quanto vuoi.

  3. 3

    Aggiungi un velo morbido

    Una dolce sfumatura scura o chiara dietro il testo, come un gradiente da trasparente a nero al 30%, alza il contrasto senza un riquadro visibile.

  4. 4

    Più grande e più marcato

    Il testo grande richiede solo 3:1. Un peso maggiore e una dimensione più grande possono trasformare una riga che non passa in una che passa.

  5. 5

    Prova su un telefono vero

    Controlla il design alla luminosità massima e a quella bassa, all’aperto se puoi. I rapporti sono il minimo, non l’obiettivo.

css
.card {
  background: linear-gradient(90deg, #1f0b3a 0%, #7c3aed 55%, #f472b6 100%);
  color: #ffffff;
}
/* A soft scrim keeps white text above 4.5:1 across the pink end */
.card .text {
  background: linear-gradient(90deg, transparent 0%, rgb(31 11 58 / 0.55) 60%);
  padding: 1rem 1.25rem;
}
Il velo scurisce solo dove il gradiente si schiarisce, quindi il lato sinistro resta intatto.

Le parole corrono dritte sulla parte più luminosa dello sfondo e il loro contrasto cala.

Lo stesso design con la zona calma e scura spostata dietro le parole.

È l’idea alla base della leggibilità di Gradiently: un Mark sa dove sono le tue parole, sposta dietro di esse la sua zona più calma e a maggior contrasto e sceglie inchiostro chiaro o scuro per ogni riga dalla propria palette. Per altre tecniche che funzionano ovunque, leggi testo su un gradiente e testo leggibile sulle foto. Per le interfacce scure in particolare, vedi progettare per la modalità scura.

Le domande più frequenti

Qual è un buon rapporto di contrasto dei colori?

Almeno 4,5:1 per il testo normale e 3:1 per il testo grande rispetta il livello AA delle WCAG. Per le letture lunghe, 7:1 (livello AAA) è più comodo.

Cosa conta come testo grande nelle WCAG?

Testo di almeno 18 punti, circa 24 px, o di almeno 14 punti in grassetto, circa 18,66 px. Il testo grande richiede solo 3:1 al livello AA.

Qual è il grigio più chiaro che posso usare su bianco?

#767676 è il grigio semplice più chiaro che raggiunge 4,5:1 su bianco. #777777 misura 4,48:1 e non va bene per il testo corrente.

I logo devono rispettare i requisiti di contrasto?

No. Le WCAG esentano il testo che fa parte di un logo o di un nome di brand e il testo puramente decorativo. Tutto ciò che le persone devono leggere o usare conta comunque.

Come verifico il contrasto su uno sfondo a gradiente?

Misura il colore del testo rispetto al punto più chiaro dietro il testo chiaro, o al punto più scuro dietro il testo scuro. Se quel punto peggiore passa, passa l’intera riga.

Condividi questa guida

Scritto da GradientlyAccount Gradiently verificato

Il team dietro Gradiently, uno strumento di design costruito attorno ai Mark: gradienti vivi che fanno sembrare tuo tutto ciò che progetti.

Vedi il nostro profilo
Tutte le guide su Colore