Acessibilidade total: WCAG, ARIA e ferramentas de validação

Acessibilidade total: WCAG, ARIA e ferramentas de validação
Introdução
A web deixou de ser um privilégio de poucos e se tornou o principal canal de comunicação, informação e comércio. Contudo, ainda há milhões de pessoas que enfrentam barreiras digitais por causa de deficiências visuais, auditivas, motoras ou cognitivas. Garantir que um site seja acessível não é apenas uma questão de conformidade legal; é um imperativo ético e de negócio, pois aumenta o alcance, melhora o SEO e fortalece a reputação da marca.
Este artigo apresenta um caminho prático para desenvolvedores que desejam construir aplicações inclusivas. Vamos explorar:
Os princípios e níveis de conformidade da WCAG 2.1. Como usar ARIA (Accessible Rich Internet Applications) de forma correta. Ferramentas de validação automática e de avaliação manual. Exemplos de código reais que podem ser copiados e colados no seu projeto.
Ao final, você terá um checklist pronto para aplicar imediatamente em qualquer página web.
1. Entendendo as diretrizes WCAG 2.1
A Web Content Accessibility Guidelines (WCAG) é mantida pelo W3C e define requisitos para tornar o conteúdo web mais acessível. A versão 2.1, atualmente a mais adotada, está organizada em quatro princípios, conhecidos pelo acrônimo POUR:
| Princípio | Descrição |
|---|---|
| Perceptível | A informação e os componentes da UI devem ser apresentáveis aos sentidos dos usuários. |
| Operável | Os componentes de interface devem ser navegáveis e acionáveis por todos. |
| Compreensível | O conteúdo deve ser fácil de entender e usar. |
| Robusto | O código deve ser compatível com tecnologias assistivas atuais e futuras. |
Cada princípio possui critérios de sucesso distribuídos em três níveis de conformidade:
| Nível | Significado |
|---|---|
| A | Requisitos mínimos; falhas podem impedir totalmente o acesso. |
| AA | Requisitos intermediários; atendem à maioria das necessidades de usuários com deficiência. |
| AAA | Requisitos avançados; garantem a melhor experiência possível. |
Para a maioria dos projetos comerciais, o objetivo é conformidade AA, que equilibra esforço de desenvolvimento e benefício ao usuário.
1.1 Principais critérios de sucesso (AA)
| Critério | Exemplo prático |
|---|---|
| 1.4.3 Contraste (mínimo) | Texto com contraste ≥ 4,5:1 em relação ao fundo. |
| 1.4.4 Redimensionamento de texto | Texto pode ser ampliado até 200 % sem perda de conteúdo. |
| 2.1.1 Teclado | Todos os recursos funcionam via teclado (Tab, Enter, Space). |
| 2.4.3 Ordem de foco | A sequência de foco segue a ordem visual lógica. |
| 3.3.2 Rótulos ou instruções | Campos de formulário apresentam instruções claras. |
2. ARIA: atributos que dão voz ao HTML
HTML semântico já oferece muita acessibilidade, mas aplicações modernas (SPA, componentes customizados) muitas vezes precisam de informações adicionais para leitores de tela. É aí que entram os atributos ARIA (Accessible Rich Internet Applications).
2.1 Quando usar ARIA
| Situação | Solução recomendada |
|---|---|
Elemento customizado (ex.: | Use role apropriado e adicione tabindex="0" para torná‑lo focável. |
| Estado dinâmico (ex.: menu aberto/fechado) | Use atributos como aria-expanded, aria-controls. |
| Informação de erro | Aplique aria-live="polite" para que a mensagem seja anunciada. |
| Agrupamento de campos | Use fieldset + legend ou aria-labelledby. |
Dica: Sempre prefira HTML semântico antes de recorrer ao ARIA. O ARIA deve ser usado para complementar, nunca substituir.
2.2 Principais atributos ARIA
| Atributo | Função | Exemplo |
|---|---|---|
role | Define o papel do elemento (ex.: button, navigation). | |
aria-label | Rótulo textual oculto para leitores de tela. | |
aria-describedby | Associa descrição adicional. | |
aria-live | Define como mudanças dinâmicas são anunciadas. | |
aria-hidden | Oculta elemento da árvore de acessibilidade. | |
3. Ferramentas de avaliação automática e manual
A validação de acessibilidade deve acontecer em duas frentes:
3.1 Ferramentas automáticas
| Ferramenta | Onde usar | Principais recursos |
|---|---|---|
| Lighthouse (Chrome DevTools) | Navegador Chrome | Relatório de acessibilidade, pontuação e sugestões. |
| axe‑core (npm) | Integração CI/CD | API JavaScript para varredura programática. |
| WAVE (online) | Site https://wave.webaim.org | Visualiza problemas diretamente na página. |
| Pa11y (CLI) | Linha de comando | Gera relatórios em JSON, HTML ou CSV. |
Exemplo: Integrando axe-core em um projeto Node.js
npm install axe-core puppeteer
// axe-test.js
const puppeteer = require('puppeteer');
const axe = require('axe-core');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://seusite.com');
// Injeta axe no contexto da página
await page.addScriptTag({ path: require.resolve('axe-core') });
// Executa a varredura
const results = await page.evaluate(async () => {
return await axe.run({
runOnly: {
type: 'tag',
values: ['wcag2aa']
}
});
});
console.log('Violations:', results.violations.length);
results.violations.forEach(v => {
console.log(✖ ${v.id}: ${v.description});
v.nodes.forEach(n => console.log(' →', n.target));
});
await browser.close();
})();
Resultado: O script exibe no console todas as violações encontradas, permitindo que a equipe corrija antes do deploy.
3.2 Avaliação manual
| Atividade | Ferramenta | Como fazer | |-----------|------------|------------| | *Leitor de


