Calcular contraste de cores WCAG
Esta calculadora compara uma cor de primeiro plano com uma cor de fundo pelo método de luminância relativa do WCAG.
Executar grátis
Ela retorna a luminância de cada cor, a razão de contraste resultante e indicadores claros de aprovação AA e AAA para textos normais e grandes. Você pode usá-la para revisar tokens de design, validar cores da interface antes do lançamento ou incluir uma verificação de acessibilidade repetível em um fluxo automatizado. As entradas são cores hexadecimais explícitas, os cálculos são determinísticos e formatos inválidos geram um erro útil. A ferramenta no navegador atende verificações individuais; cada chamada pela API custa US$ 0,002.
Entenda os valores retornados pela calculadora
O resultado começa normalizando as duas entradas como cores hexadecimais minúsculas de seis dígitos; assim, uma forma curta como #fff sempre aparece como #ffffff. Em seguida, informa a luminância relativa do primeiro plano e do fundo. A luminância relativa varia de zero para preto a um para branco e é derivada dos canais sRGB linearizados, ponderados para representar a sensibilidade diferente do olho à luz vermelha, verde e azul. A razão de contraste compara a luminância mais clara com a mais escura e varia de 1:1, em cores idênticas, a 21:1, em preto e branco. A razão exibida é arredondada para duas casas decimais, mas cada decisão de aprovação usa o valor integral, sem arredondamento. Essa diferença impede que um valor exibido como 4.50 seja aprovado quando o valor real ainda está abaixo de 4.5. A resposta agrupa quatro valores booleanos para textos normais e grandes, facilitando tanto a apresentação a designers quanto a validação de políticas em testes automatizados.
Forneça cores válidas e interprete AA e AAA
Informe primeiro plano e fundo como cores hexadecimais de três ou seis dígitos, com ou sem o sinal de cerquilha inicial. Valores como #123, 123, #112233 e AABBCC são aceitos e normalizados. Nomes de cores CSS, expressões rgb() e hsl(), valores hexadecimais de quatro ou oito dígitos com alfa, textos vazios e valores que não sejam strings são rejeitados, pois opacidade e composição exigem contexto adicional. Para texto normal, o nível WCAG AA requer no mínimo 4.5:1 e AAA exige 7:1. Para texto grande, AA requer 3:1 e AAA exige 4.5:1. Em geral, texto grande significa pelo menos 18 pontos em peso normal ou 14 pontos em negrito, mas a capacidade não inspeciona tipografia; ela informa as duas matrizes para que sua aplicação escolha a adequada. Um resultado aprovado constitui apenas uma parte da avaliação e não comprova que toda a interface seja acessível.
Use os resultados nos fluxos de design e entrega
Comece pelos tokens reais de primeiro plano e fundo usados no componente, e não por cores coletadas de uma captura de tela compactada. Em uma revisão manual, compare texto corrido, texto secundário, links, rótulos de botões, dicas de formulários, indicadores de foco e estados desabilitados com todas as superfícies em que aparecem. Em um design system, mantenha uma matriz pequena de pares aprovados e chame a API sempre que a paleta mudar. Uma verificação de integração contínua pode rejeitar um par proposto quando o nível AA de texto normal for falso, enquanto permite uma combinação decorativa ou de título grande segundo uma regra documentada. Armazene as cores normalizadas e a razão junto ao teste para que revisores reproduzam o achado. Cada chamada automatizada custa US$ 0,002; entradas inválidas retornam erro. O algoritmo não usa rede, aleatoriedade ou hora atual, portanto o mesmo par sempre produz o mesmo resultado. Para transparências, gradientes, fotografias ou estados interativos, determine primeiro as cores renderizadas ou utilize uma auditoria no navegador com o contexto completo.
Casos de uso
Revisar tokens de design
Compare tokens de texto e superfície antes de publicar um tema claro ou escuro.
Proteger solicitações de alteração
Reprove uma verificação automática quando um par alterado deixar de atender ao nível de texto exigido.
Documentar achados de acessibilidade
Inclua cores normalizadas, luminâncias e uma razão reproduzível em um chamado ou relatório de auditoria.
Perguntas frequentes
Quais formatos de cor você pode usar?
Use cores hexadecimais de três ou seis dígitos, com ou sem cerquilha inicial. Alfa, nomes, rgb() e hsl() não são aceitos.
Quais limites do WCAG são aplicados?
Texto normal usa 4.5:1 para AA e 7:1 para AAA. Texto grande usa 3:1 para AA e 4.5:1 para AAA.
A aprovação considera a razão arredondada?
Não. A razão só é arredondada para exibição; os indicadores comparam o valor integral calculado com cada limite.
Um par aprovado torna a página compatível com WCAG?
Não. Ele confirma apenas o contraste das duas cores opacas fornecidas. Uma avaliação completa de acessibilidade considera muitos outros fatores.
Quanto custa uma chamada de API?
Cada chamada de API custa US$ 0,002. Você também pode usar a calculadora no navegador para verificações interativas individuais.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/color/contrast-ratio-wcag \
-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-ratio-wcag", {
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-ratio-wcag",
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-ratio-wcag", 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-ratio-wcag", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"foreground": "#111827",
"background": "#ffffff"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "color.contrast_ratio_wcag",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |