Verificatore del rapporto di contrasto WCAG
Scopra se un testo resta leggibile sul suo sfondo secondo le WCAG: #111827 su bianco raggiunge 17.74 a 1 e supera AA e AAA sia per il testo normale sia per quello grande. Un numero che le Sue segnalazioni di accessibilità possono citare. Gratis nel Suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Primo piano
- #111827
- Sfondo
- #ffffff
- Rapporto di contrasto
- 17,74
Questo verificatore del rapporto di contrasto WCAG prende due colori hex — primo piano e sfondo — e restituisce il rapporto di contrasto ufficiale usato dalle Web Content Accessibility Guidelines, insieme a chiari indicatori di superamento o mancato superamento AA e AAA sia per il testo normale sia per il testo grande. Designer, sviluppatori e revisori usano quel rapporto per decidere se testo del corpo, pulsanti, etichette e chrome dell'interfaccia restano leggibili per persone con visione ridotta o differenze nella percezione del colore. Il motore segue la formula di luminanza relativa WCAG 2.x: ogni canale hex viene linearizzato dallo sRGB, la luminanza è pesata con i coefficienti standard 0,2126, 0,7152 e 0,0722, e il rapporto di contrasto è (L più chiara + 0,05) diviso (L più scura + 0,05). Le soglie non sono arrotondate: il testo normale richiede almeno 4,5 per AA e 7 per AAA; il testo grande richiede almeno 3 per AA e 4,5 per AAA. I risultati sono deterministici, senza chiamate di rete, campionamento o scorciatoie legate alla data.
Cosa misura il rapporto di contrasto WCAG e cosa contiene la risposta
Il rapporto di contrasto è il numero unico che WCAG usa per descrivere quanto fortemente il testo si stacca dal suo sfondo, tenendo conto della percezione umana della luminanza invece di una semplice distanza RGB. Una coppia nero puro su bianco puro raggiunge ventuno a uno, il massimo teorico per colori sRGB opachi, mentre colori identici danno uno a uno e falliscono ogni criterio testuale.
Testo grande in termini WCAG significa almeno diciotto punti regolari o l'equivalente quattordici punti in grassetto; lo strumento non misura la dimensione del carattere in sé — applica solo le soglie per il testo grande così può mappare la matrice sulla Sua scala tipografica.
Non c'è scansione di pagine, parsing CSS, fusione di opacità o campionamento di gradienti: Lei fornisce due colori hex espliciti e riceve una matrice riproducibile adatta a CI di design token, backend di plugin Figma e commenti di ticket che devono citare un rapporto numerico invece di un'opinione da screenshot.
Come vengono letti gli input hex e come AA e AAA restano riproducibili
Entrambi i valori devono essere hex: cancelletto iniziale opzionale, tre cifre che si espandono a sei (#abc diventa #aabbcc) o sei cifre complete, senza distinzione tra maiuscole e minuscole. Suffissi alfa, funzioni rgb(), funzioni hsl(), colori CSS con nome e interi nudi vengono rifiutati con un messaggio che nomina il campo e mostra cosa è stato ricevuto, così un token sbagliato non diventa mai un fallimento silenzioso. Ogni colore è limitato a trentadue caratteri per mantenere economica la validazione e bloccare incidenti di incolla.
Dopo il parsing, i canali vengono linearizzati con la curva sRGB a tratti di WCAG — si divide per 12,92 sotto la soglia 0,04045, altrimenti si eleva ((c + 0,055)/1,055) alla potenza 2,4 — poi combinati nella luminanza relativa. Il rapporto usa la luminanza più chiara al numeratore; gli indicatori di superamento confrontano il rapporto in virgola mobile non arrotondato con 4,5, 7,0 e 3,0, così un 4,50 visualizzato non può nascondere un vero 4,499 che dovrebbe fallire AA.
Dove si collocano i controlli di contrasto nei sistemi di design, nelle revisioni UI e nella CI
I team di prodotto incontrano i requisiti di contrasto quando una palette di marca appare elegante su una slide di marketing ma fallisce sul testo del corpo su una card bianca, quando un tema dark mode viene generato da token chiari, o quando gli stakeholder legali e di conformità chiedono prove AA documentate prima del lancio.
Gli ingegneri collegano lo stesso contratto a controlli delle pull request che bloccano una modifica di token se l'AA del testo normale scende sotto 4,5 per i colori primari del corpo, oppure registrano lo stato AAA del testo grande per titoli hero che intenzionalmente si avvicinano di più alla superficie. Specialisti QA e di accessibilità usano il rapporto numerico nei bug report così gli sviluppatori possano correggere la coppia esatta invece di indovinare da uno screenshot.
I team di contenuti e marketing verificano che i codici hex di una campagna passino ancora quando posizionati su sfondi chiari o scuri del sito. Lo abbini a strumenti di conversione del colore quando ha bisogno di intermedi RGB o HSL, e ad audit di accessibilità a pagina intera quando deve scansionare markup dal vivo invece di due valori hex espliciti.
Casi d'uso
Revisione di design token e palette
Verifichi ogni coppia primo piano/sfondo di una palette di marca contro AA e AAA prima di bloccare i token per temi chiari e scuri.
Segnalazioni di bug di accessibilità
Allegi un rapporto di contrasto numerico e la matrice AA/AAA ai ticket così gli sviluppatori possano correggere la coppia hex esatta, non uno screenshot vago.
Domande frequenti
Quali sono le soglie AA e AAA usate qui?
Testo normale: AA ≥ 4,5 e AAA ≥ 7. Testo grande: AA ≥ 3 e AAA ≥ 4,5. Gli indicatori usano il rapporto non arrotondato; il rapporto visualizzato è arrotondato a due decimali.
Questo strumento scansiona il mio sito per problemi di contrasto?
No. Confronta solo due colori hex che Lei fornisce.
Perché una coppia ha fallito AA quando a me sembra a posto?
La percezione umana varia e la luce ambientale cambia. WCAG usa la luminanza relativa su sRGB linearizzato, non la vivacità percepita. Si fidi del rapporto numerico per i controlli di conformità, poi regoli i valori hex finché la matrice passa.
Quali formati di colore accetta il verificatore WCAG?
Solo colori esadecimali a tre o sei cifre, con o senza cancelletto iniziale, in maiuscolo o minuscolo. Nomi di colore, notazioni RGB o HSL e trasparenza vengono rifiutati, così un valore errato non risulta mai conforme.
Qual è il rapporto di contrasto più alto possibile?
Il nero puro sul bianco puro arriva a ventuno a uno, il massimo per i colori opachi a schermo. Due colori identici danno uno a uno e non superano alcun criterio per il testo.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/color/contrast \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"foreground":"#111827","background":"#ffffff"}'const res = await fetch("https://api.kit.forhosting.com/color/contrast", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"foreground": "#111827",
"background": "#ffffff"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/color/contrast",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"foreground": "#111827",
"background": "#ffffff"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/color/contrast", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"foreground":"#111827","background":"#ffffff"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"foreground":"#111827","background":"#ffffff"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/color/contrast", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"foreground": "#111827",
"background": "#ffffff"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.contrast",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_color_chars | 32 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Lo usi gratis nel browser per revisioni di palette e design token, oppure chiami l'API a $0.002 per richiesta riuscita quando ha bisogno della stessa matrice in CI, sistemi di design o gate di accessibilità automatizzati.
Cosa misura il rapporto di contrasto WCAG e cosa contiene la risposta
Questo verificatore normalizza ogni hex di input in una forma canonica minuscola #rrggbb e un'eco rgb(r, g, b), poi restituisce contrast_ratio arrotondato a due cifre decimali per la visualizzazione, più un oggetto wcag con i rami normal_text e large_text, ciascuno con i campi booleani aa e aaa. L'etichetta di metodo wcag_relative_luminance documenta che il percorso è la formula pubblicata di luminanza relativa, non un esperimento percettivo delta-E o APCA. Codici hex non validi, campi mancanti, valori non stringa e stringhe troppo lunghe vengono rifiutati con invalid_input e non vengono mai addebitati. Se ha bisogno di un audit completo del sito, abbini questo endpoint a uno scanner di accessibilità più ampio; questa pagina risponde solo alla domanda sui due colori con JSON stabile per esseri umani e macchine.
Come vengono letti gli input hex e come AA e AAA restano riproducibili
I campi preferiti sono foreground per il colore del testo o dell'icona e background per la superficie dietro di esso, ma sono accettati anche gli alias fg, color1, text e hex1 per il primo colore e bg, color2 e hex2 per il secondo, così moduli, query string e fogli di calcolo possono riusare lo stesso contratto senza rinominare colonne. Abbini il controllo gratuito nel browser di questa pagina con l'API a pagamento quando le pipeline dei sistemi di design hanno bisogno dello stesso risultato matematico senza reimplementare la matematica della luminanza in ogni linguaggio.
Dove si collocano i controlli di contrasto nei sistemi di design, nelle revisioni UI e nella CI
I designer possono incollare coppie hex da Figma o da un file JSON di token e leggere la matrice AA e AAA prima di fissare una scala di colori. In questa pagina il lavoro avviene interamente nel Suo browser; tramite l'API ogni ricerca riuscita costa $0.002, la validazione fallita non viene addebitata e nulla viene conservato dopo la restituzione della risposta. Questa separazione — esplorazione interattiva gratuita e API identica a pagamento — corrisponde al resto del catalogo tier A di KIT e Le permette di passare da un workshop sulla palette a una pipeline automatizzata senza cambiare il risultato matematico.
Casi di integrazione
Gate CI per i colori dell'interfaccia
Chiami l'API dalle pull request per far fallire le build quando le coppie hex del corpo o dei pulsanti scendono sotto l'AA per testo normale (4,5:1).
Domande tecniche
Quanto costa il verificatore del rapporto di contrasto WCAG?
È gratis nel browser in questa pagina. Tramite l'API una richiesta riuscita costa $0.002; gli input non validi non vengono addebitati.
Quali formati di colore sono accettati?
Solo hex: #RGB o #RRGGBB, con o senza il cancelletto iniziale, senza distinzione tra maiuscole e minuscole. rgb(), hsl(), colori con nome e hex alfa vengono rifiutati con invalid_input.