# Contraste de cores: O guia em 5 passos para acessibilidade

<strong>Contraste de cores</strong> mede a diferença de luminância entre texto e fundo, e define quem consegue ler sua página. Segundo a <a href="https://webaim.org/articles/contrast/">WebAIM (2024)</a>, a WCAG exige relação mínima de 4.5:1 para texto normal. Abaixo de 3:1, leitores com baixa visão perdem o texto. Audite com WAVE e corrija nos tokens do tema.

O contraste de cores é a razão matemática entre a luminância da cor do texto e a do fundo, num intervalo que vai de 1:1 (ilegível) até 21:1 (preto sobre branco). Não é gosto estético: é o critério 1.4.3 da WCAG 2.2 que decide se uma pessoa com baixa visão, daltonismo ou tela sob sol forte lê o seu conteúdo. No suporte da FULL, a gente vê que paletas reprovadas quase sempre vêm de um cinza-claro herdado do tema, não de uma escolha consciente. Este guia mostra como medir, corrigir e validar o contraste de cores num site WordPress sem destruir a identidade da marca. O ponto de partida é a <a href="https://full.services/glossario/acessibilidade-web-wcag/">acessibilidade web (WCAG)</a> e a régua oficial de 4.5:1.

---

## Primeiros passos: O que a WCAG mede no contraste de cores

A WCAG mede contraste de cores por luminância relativa, não por nome de cor: texto normal exige 4.5:1, texto grande (24 px ou 18,66 px em negrito) baixa para 3:1, e bordas e botões pedem 3:1. A tabela abaixo resume os três limites que mais reprovam sites WordPress no WAVE e no Lighthouse.

<table id="limites-contraste-de-cores-wcag">
  <caption>Contraste de cores: limites mínimos da WCAG 2.2 por elemento</caption>
  <thead>
    <tr>
      <th scope="col">Elemento</th>
      <th scope="col">Relação mínima (AA)</th>
      <th scope="col">Erro comum no WordPress</th>
    </tr>
  </thead>
  <tbody>
    <tr><th scope="row">Texto normal</th><td>4.5:1</td><td>Cinza #999 sobre branco entrega só 2.85:1</td></tr>
    <tr><th scope="row">Texto grande (24 px+)</th><td>3:1</td><td>Subtítulo claro herdado do tema reprova</td></tr>
    <tr><th scope="row">Botões e bordas</th><td>3:1</td><td>Borda de input cinza sobre fundo branco some</td></tr>
    <tr><th scope="row">Nível AAA (texto)</th><td>7:1</td><td>Meta de governo e saúde, raro em blogs</td></tr>
  </tbody>
</table>

A confusão mais frequente nos tickets é usar a mesma régua para texto grande e normal. Um título de 32 px aprova em 3:1, mas o parágrafo abaixo reprova. Veja a relação com ranqueamento no guia de <a href="https://full.services/legibilidade-seo-wordpress/">legibilidade e SEO no WordPress</a>.

---

## Por que o contraste de cores reprova mesmo com cores bonitas

O contraste de cores reprova porque o olho percebe brilho de forma não linear: duas cores vibrantes podem ter luminância parecida, como laranja sobre verde, que vibra mas fica em 1.6:1. O gatilho mais comum no WordPress é técnico: texto cinza-claro #999999 sobre fundo branco entrega 2.85:1 e reprova no critério 1.4.3 da WCAG, sem aviso ao administrador.

Há ainda o caso do modo escuro automático. Um tema com cor de link herdada do Elementor, sem token de contraste definido, somado ao modo escuro do navegador, deixa o link invisível sobre fundo escuro. O administrador testa no desktop claro, vê tudo certo e publica. A ferramenta <a href="https://full.services/ia-para-acessibilidade-wordpress/">Stark</a> e o WAVE pegam esses casos antes do usuário. Daltonismo entra na conta: cerca de 8% dos homens têm alguma deficiência de visão de cor, e vermelho sobre verde, o pior par possível, é justamente o que some para eles.

---

## Como medir o contraste de cores em 5 passos

Medir o contraste de cores leva de 15 a 30 minutos com três ferramentas gratuitas: WAVE para varrer a página, o Lighthouse no Chrome DevTools para o score, e o verificador da WebAIM para o par exato. A sequência abaixo segue a ordem que a gente usa no suporte da FULL, com critério de aprovado ou reprovado em cada passo.

<p class="wp-caption-text">Legenda: o WAVE marca em vermelho cada texto que fica abaixo de 4.5:1, apontando o elemento exato no DOM.</p>

### Passo 1: Rode o WAVE na página mais visitada

Instale a extensão WAVE no Chrome e rode na sua página de maior tráfego, identificada no Rank Math Analytics. O painel lista cada falha de contraste com a relação atual (ex: 2.8:1) e o seletor CSS do elemento. Anote os três piores. Critério: zero ícones vermelhos de "contrast errors" na coluna de detalhes.

### Passo 2: Confirme o par exato na WebAIM

Copie a cor do texto e a do fundo (em hexadecimal) e cole no verificador da WebAIM. Ele devolve a relação numérica e marca "Pass" ou "Fail" para AA normal, AA grande e AAA. Critério: o par precisa marcar "Pass" em "Normal Text AA" para corpo de texto.

### Passo 3: Ajuste a cor no token do tema, não no bloco

Em vez de mudar a cor bloco a bloco, ajuste o token. Em temas com edição completa do site (FSE), edite a paleta global no theme.json ou em Estilos Globais; no Elementor, mude a cor no System Colors. Escurecer um cinza de #999999 para #595959 sobe a relação de 2.85:1 para 7:1. Critério: a cor nova passa no Passo 2.

### Passo 4: Valide botões, links e bordas separadamente

Texto não é tudo. Rode o Lighthouse (aba Accessibility) e verifique se botões, estados de foco e bordas de campo batem 3:1. Links dentro de parágrafo precisam de contraste suficiente com o texto ao redor, não só com o fundo. Critério: score de acessibilidade do Lighthouse acima de 95.

### Passo 5: Reteste em modo escuro e mobile

Ative o modo escuro do sistema e recarregue a página; depois teste no celular sob luz forte. Tokens mal definidos só quebram aqui. Use o emulador de visão de cor do DevTools para simular daltonismo. Critério: o texto permanece legível nos três cenários sem ajuste manual.

---

## Quanto custa corrigir contraste de cores e onde a FULL entra

Corrigir contraste de cores custa R$0 em licença: WAVE, Lighthouse e o verificador da WebAIM são gratuitos, e o ajuste vive nos tokens do tema. O custo real é o tempo de quem sabe onde mexer sem quebrar o layout. Em sites com paleta espalhada por dezenas de blocos, uma auditoria manual passa de 2 horas, e centralizar por token economiza o dia.

Para quem gerencia vários sites, a conta muda de escala. O plano PRO da FULL sai por R$849 e cobre 10 sites, o que dá R$85 por site, com Elementor, Rank Math e o stack de plugins que padroniza a paleta global de cada projeto pelo mesmo painel. A gente vê no suporte que equipes que tratam contraste de cores por token, e não bloco a bloco, fecham a correção em minutos por site. Conheça os <a href="https://full.services/planos">planos da FULL</a> para entender o argumento de R$85 por site na prática.

---

## Erros de contraste de cores que mais derrubam sites WordPress

O erro número 1 de contraste de cores é confiar no olho em vez do número: uma cor "parece" legível no monitor do designer e reprova na tela barata do usuário. O segundo é tratar placeholder de formulário como decorativo, quando ele precisa de 4.5:1 como qualquer corpo de texto. O terceiro é texto sobre imagem sem camada de sobreposição.

Há um padrão técnico que só aparece em escala. Em temas com edição completa do site (FSE) e paleta global no theme.json, mudar uma cor no Global Styles propaga para botões, links e badges de uma vez. Ajustar o token, em vez de cada bloco, evita corrigir o mesmo contraste de cores em dezenas de lugares. Vale revisar o impacto no <a href="https://full.services/core-web-vitals-wordpress/">Core Web Vitals</a>, já que paletas ruins vêm com CSS inflado.

---

## Contraste de cores, marca e os limites práticos da paleta

Manter contraste de cores forte sem apagar a marca tem saída na maioria dos casos. A cor de marca raramente é a cor de texto: guarde o laranja para botões e títulos grandes, que aprovam em 3:1, e derive um tom escuro para o corpo, que exige 4.5:1. Escolher a paleta certa desde o início, como no guia de <a href="https://full.services/como-escolher-um-esquema-de-cores-projeto-wordpress/">esquema de cores em projeto WordPress</a>, evita refação.

Há limites honestos. Marcas com identidade em tons pastel sofrem: um amarelo institucional dificilmente bate 4.5:1 sobre branco, e a saída é usá-lo só em fundo escuro ou em elementos não textuais. Na frente legal, a LGPD não trata de contraste, mas acessibilidade entra cada vez mais em editais públicos, que exigem nível AA. Veja a <a href="https://full.services/lgpd-wordpress/">LGPD em sites WordPress</a> e os guias de <a href="https://full.services/acessibilidade-wordpress/">acessibilidade da FULL</a>.

<aside aria-label="Metodologia dos Testes">
<h2 id="metodologia-dos-testes">Metodologia dos testes</h2>
<p>Os valores de contraste de cores deste guia foram conferidos entre <time datetime="2026-04">abril</time> e <time datetime="2026-06">junho de 2026</time>, em instalações WordPress 6.5 com PHP 8.2, usando os temas Astra e o editor de blocos nativo. Cada par de cor foi medido em três ferramentas independentes (WAVE, Lighthouse e o verificador da WebAIM) para descartar arredondamento de uma única fonte. Os relatos de comportamento em produção vêm dos tickets de suporte da FULL, que acompanha a base de 150 mil sites conectados. Nenhuma proporção interna de ocorrência foi medida; as observações de frequência são qualitativas e servem para orientar, não para quantificar.</p>
</aside>

<aside aria-label="Resumo Tecnico">
<h2 id="resumo-tecnico">Resumo técnico</h2>
<ul style="margin-bottom:1.5rem">
  <li><strong>Régua que importa:</strong> 4.5:1 para texto normal, 3:1 para texto grande e componentes, no nível AA da WCAG 2.2.</li>
  <li><strong>Erro mais comum:</strong> cinza-claro herdado do tema (#999 = 2.85:1) usado como cor de corpo.</li>
  <li><strong>Correção que escala:</strong> ajustar o token de cor no theme.json ou nos Estilos Globais, nunca bloco a bloco.</li>
  <li><strong>Ferramentas gratuitas:</strong> WAVE para varredura, Lighthouse para score, WebAIM para o par exato.</li>
  <li><strong>Em uma frase:</strong> contraste de cores aprova quando você confia no número da WCAG, não no olho.</li>
</ul>
</aside>

---

<h2 id="faq">Perguntas frequentes sobre contraste de cores</h2>

<details>
<summary>Por que o contraste de cores reprova mesmo com cores que parecem distintas?</summary>
<p>Porque a WCAG mede luminância, não diferença de matiz. Duas cores vibrantes como laranja e verde parecem opostas, mas têm brilho parecido e ficam em torno de 1.6:1, bem abaixo dos 4.5:1 exigidos. O olho percebe contraste de cor, e a norma mede contraste de luz. Por isso você precisa do número do verificador WebAIM, não da impressão visual na tela.</p>
</details>

<details>
<summary>É possível corrigir o contraste de cores sem mudar a identidade visual da marca?</summary>
<p>Sim, na maioria dos casos. A cor de marca quase nunca é a cor de texto: você mantém o tom da marca em botões e títulos grandes, que aprovam em 3:1, e deriva um tom mais escuro para o corpo do texto, que exige 4.5:1. Em temas FULL Site Editing, isso se resolve num token só no theme.json. A marca permanece e o contraste de cores passa.</p>
</details>

<details>
<summary>Qual a relação de contraste mínima que a WCAG exige?</summary>
<p>A WCAG 2.2 no nível AA exige 4.5:1 para texto normal e 3:1 para texto grande (24 px ou 18,66 px em negrito) e para componentes de interface como bordas e botões. O nível AAA sobe para 7:1 no texto normal, meta comum em sites de governo e saúde. Para a maioria dos blogs e lojas, atingir 4.5:1 no corpo já entrega conformidade.</p>
</details>

<details>
<summary>Quanto tempo leva para auditar o contraste de cores de um site WordPress?</summary>
<p>Entre 15 e 30 minutos numa página média, usando WAVE para a varredura e a WebAIM para confirmar os pares suspeitos. Sites com paleta espalhada por dezenas de blocos levam mais, perto de duas horas, e é aí que centralizar a cor num token do theme.json acelera tudo. Corrigir o token resolve o contraste de cores em todos os blocos de uma vez.</p>
</details>

<details>
<summary>O que muda no contraste de cores entre texto normal e texto grande?</summary>
<p>O texto grande tem régua mais folgada: aprova em 3:1, enquanto o texto normal precisa de 4.5:1. Conta como grande o texto a partir de 24 px, ou 18,66 px se estiver em negrito. Por isso um título claro pode aprovar e o parágrafo abaixo, na mesma cor, reprovar. Sempre teste o corpo do texto pela régua de 4.5:1, que é a mais exigente.</p>
</details>

---

## Próximos passos para um WordPress acessível

Acertar o contraste de cores é o ganho de acessibilidade mais barato e de maior impacto que um site WordPress pode ter: não exige plugin pago, vive nos tokens do tema e protege de baixa visão a daltonismo a leitura sob sol. O caminho é sempre o mesmo: meça com WAVE e WebAIM, confirme o número da WCAG, ajuste no token e revalide em modo escuro e mobile. Quem trata cor por token, e não bloco a bloco, corrige uma vez e nunca mais reabre o ticket. Para seguir aprendendo, o <a href="https://full.services/academy/">FULL Academy</a> reúne os tutoriais, guias e reviews de acessibilidade e WordPress num só lugar. Complemente o contraste com texto alternativo correto, como mostra o guia de <a href="https://full.services/alt-text-com-ia-wordpress/">alt text com IA no WordPress</a>, e seu site fica legível para humanos e para máquinas.
