Guide
Contraste de cores para acessibilidade: WCAG 2.1, APCA e o que realmente implementar
WCAG 4,5:1 é o piso legal. Também é uma fórmula falha. Aqui está o quadro moderno.
By Buğra SözeriPublished
O WCAG 2.1 exige proporção de contraste de 4,5:1para texto de corpo regular e 3:1 para texto grande (18pt+ regular ou 14pt+ negrito). A fórmula é o padrão legal de fato nos EUA (relevante para a ADA), UE (EAA) e na maior parte do mundo. Ela também tem falhas bem documentadas que geraram uma substituição (APCA) que não entrou no WCAG 2.2. Este guia explica o quadro prático atual.
A fórmula de contraste WCAG 2.x
Definida no WCAG 2.0 (2008) e inalterada até 2.2:
contraste = (L_claro + 0,05) / (L_escuro + 0,05)
onde L = luminância relativa (0-1) de cada cor, computada em sRGB de luz linearOs resultados variam de 1:1 (cores idênticas) a 21:1 (branco puro em preto puro).
Limiares WCAG (para conformidade AA, o alvo padrão):
- 4,5:1 — texto de corpo, ícones, controles de formulário.
- 3:1 — texto grande (≥ 18pt ou ≥ 14pt negrito), componentes de UI.
- AAA é mais rigoroso: 7:1 corpo, 4,5:1 grande.
Onde a fórmula está errada
Três problemas documentados:
- Insensibilidade de meia-tonalidade. A fórmula dá pontuações de contraste iguais a pares de meia-tonalidade (p. ex., cinza sobre cinza) que parecem muito diferentes na percepção real.
- Sem detectar matiz. Matizes de luminância igual (vermelho e verde no mesmo brilho) pontuam contraste 1:1, mas usuários daltônicos podem discriminá-los mal de qualquer forma.
- Peso de fonte ignorado.Fontes finas precisam de mais contraste do que fontes em negrito no mesmo tamanho; o WCAG não dá crédito pelo peso além do limiar binário de “texto grande”.
APCA: a substituição que não entrou no WCAG 2.2
APCA (Accessible Perceptual Contrast Algorithm — Algoritmo de Contraste Perceptual Acessível) é a métrica de contraste de próxima geração proposta e rejeitada. Desenvolvido por Andrew Somers para o rascunho de trabalho WCAG 3.0. Leva em conta as questões acima e é dramaticamente mais preciso em relação a dados de estudos de usuários reais.
As pontuações APCA variam de −108 a +106. Positivo significa texto escuro em fundo claro; negativo significa o contrário. Limiares:
- Lc 75 — texto de corpo (substitui o 4,5:1 do WCAG).
- Lc 60 — texto grande ou títulos (substitui 3:1).
- Lc 45 — texto não-conteúdo (decorativo, linhas de copyright).
O que usar em 2026
Abordagem de duas vias:
- Passe o WCAG 2.1 AA no mínimo. É o padrão legal. Use a fórmula de proporção padrão, mire em 4,5:1 corpo / 3:1 grande. Ferramentas:
npm i wcag-contrastpara programático, DevTools do navegador para ad-hoc. - Use APCA como verificação de sanidade. Quando o WCAG passa, mas o resultado parece subjetivamente fraco, o APCA geralmente o sinaliza. APCA está disponível como
apca-w3(npm) e em ferramentas dedicadas.
Recomendações concretas
- Texto de corpo: mirar em
#1a1a1a(cinza escuro) no branco dá ~17:1 — agradável, claramente legível. - Texto desabilitado / placeholder:o WCAG isenta “componentes de UI inativos” da regra de 4,5:1, mas os usuários ainda precisam ler os placeholders. Mire em 3:1 mínimo.
- Botões: o texto do botão vs fundo do botão deve atingir 4,5:1. A borda do botão vs fundo da página deve atingir 3:1.
- Indicadores de foco: o contorno de foco deve atingir 3:1 em relação ao fundo adjacente.
- Modo escuro: a fórmula WCAG é simétrica; os números se traduzem. Mas o APCA é assimétrico — o modo escuro tende a precisar de tokens de design ligeiramente diferentes do modo claro para a mesma qualidade percebida.
O que ignorar
- Não use contraste como único sinal para estado. Estados de erro precisam de contraste e outro sinal (um ícone, texto).
- Não mire em AAA reflexivamente. AA é o teto de design para a maioria dos produtos.
- Não confie em rampas de cores geradas automaticamente sem verificação crítica. Verifique cada par adjacente.
O fluxo de trabalho pragmático
No momento do design: use o verificador de contraste WCAG em sua ferramenta de design (Figma, Sketch, Adobe XD todos têm plugins). Atinja os mínimos 4,5:1 / 3:1.
No momento do código: faça lint de seus tokens de design contra WCAG. Falhe na CI em regressões.
No momento do QA: testes reais com leitor de tela e navegação por teclado.
Exemplo: uma cor de marca que “passa”
Azul-petróleo da marca #3aa6a0 em fundo branco. Contraste WCAG: 2,99:1 — falha no AA para texto de corpo (precisa de 4,5:1) e falha no limiar de 3:1 para texto grande por pouco. Pontuação APCA: Lc 52.
Escurecendo o azul-petróleo um passo para #2f8682: WCAG 4,52:1 (passa no AA para corpo), APCA Lc 67 (passa no APCA para texto grande, marginal para corpo). Uma mudança de um dígito hexadecimal move o componente de reprovação para aprovação.
Erros comuns
- Testando apenas contra branco. Cada par precisa de sua própria verificação. Um sistema de tokens que exige verificação de contraste por par captura o que os olhos perdem.
- Ignorando texto sobre imagens. Títulos sobre fotografias quase sempre falham em algum lugar da imagem. Soluções: uma sobreposição semi-transparente escura sob o texto, uma sombra de texto, ou reposicionar o texto em um painel sólido.
- Confiando em estados de hover para legibilidade. Se o estado de repouso falha, o hover não o salva.
- Usando
rgba()com alfa baixo para texto. Texto translúcido herda o que está atrás dele. Use valores hex opacos para texto.
Para as mecânicas de espaço de cor subjacentes que a fórmula lineariza, veja nosso guia de formatos de cores CSS.
Frequently asked questions
- Qual proporção de contraste o WCAG 2.1 AA exige para texto de corpo?
- O WCAG 2.1 AA exige uma proporção de contraste de 4,5:1 para texto normal (abaixo de 18 pt / 14 pt negrito) e 3:1 para texto grande (18 pt+ ou 14 pt+ negrito).
- Como calcular a proporção de contraste entre duas cores?
- Proporção de contraste = (L_claro + 0,05) / (L_escuro + 0,05), onde L é a luminância relativa em sRGB linear. Converta hex para sRGB, linearize usando a gama IEC 61966, depois aplique a fórmula de luminância antes de dividir.
- Qual é a diferença entre os níveis de contraste AA e AAA do WCAG?
- AA exige 4,5:1 para texto (3:1 para texto grande) e é o mínimo legal na maioria das jurisdições. AAA exige 7:1 para texto (4,5:1 para grande) e é recomendado para contextos de legibilidade críticos.
- A fórmula de contraste do WCAG funciona para todas as deficiências visuais?
- Não — a fórmula WCAG 2.x é baseada apenas em luminância e não leva em conta daltonismo ou valores de baixo contraste dentro de valores de luminância semelhantes. O algoritmo APCA (proposto para WCAG 3.0) se correlaciona melhor com a legibilidade no mundo real.
- Existe uma cor de fundo CSS que passa 4,5:1 contra texto preto e branco?
- Nenhuma cor única alcança 4,5:1 contra ambos simultaneamente. Você deve escolher um primeiro plano por fundo e verificar com uma ferramenta de verificação de contraste.
- Quando o European Accessibility Act exige conformidade com WCAG?
- O European Accessibility Act (Diretiva 2019/882) exigiu que produtos e serviços digitais cobertos atendessem ao WCAG 2.1 AA até 28 de junho de 2025.
Related
Published May 16, 2026