
Acessibilidade Web (a11y) para Desenvolvedores: Além do Texto Alternativo

Acessibilidade web, ou a11y, não é um "extra" ou uma tarefa de conformidade para o final do projeto; é um pilar da engenharia de software ética e de alta qualidade. Com a chegada do WCAG 2.2, as exigências técnicas subiram de nível, focando não apenas em leitores de tela, mas em uma experiência inclusiva para usuários com diversas necessidades motoras e cognitivas.
Dominar esses padrões significa escrever um código mais limpo, semântico e robusto. O que se segue é um mergulho técnico nas melhores práticas de implementação, indo além das tags básicas e explorando o verdadeiro poder do ARIA e das auditorias automatizadas.
1. O Framework Mental: POUR
As diretrizes do WCAG (Web Content Accessibility Guidelines) são baseadas em quatro princípios fundamentais, conhecidos pelo acrônimo POUR. Se você entender isso, não precisará decorar as mais de 80 regras de sucesso.
Perceivable (Perceptível)
A informação não pode ser invisível para os sentidos do usuário.
- Exemplo: Um vídeo sem legendas é imperceptível para surdos. Um gráfico que usa apenas cores (verde para bom, vermelho para ruim) é imperceptível para daltônicos.
Operable (Operável)
O usuário deve conseguir interagir com a interface.
- Exemplo: Se um modal só fecha clicando no "X" com o mouse e não responde à tecla
ESC, ele não é operável para quem tem deficiência motora e usa apenas teclado.
Understandable (Compreensível)
A interface deve ser previsível.
- Exemplo: Um formulário que muda de contexto automaticamente quando você foca num input (ex: submit automático no focus) é confuso e imprevisível.
Robust (Robusto)
O conteúdo deve ser interpretado confiavelmente por uma grande variedade de user agents (navegadores, leitores de tela, braille displays).
- Exemplo: Usar HTML válido e padrões ARIA garante que o site funcione no Chrome de hoje e no leitor de tela JAWS de 5 anos atrás.
2. A Primeira Regra do ARIA

WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) é um conjunto de atributos especiais (role, aria-*) que adicionam semântica a elementos que não a têm nativamente.
Mas a regra número 1 do ARIA é: Não use ARIA.
Sempre que houver um elemento HTML nativo que faça o trabalho, use-o.
Errado:
<div role="button" onClick="...">Enviar</div>Certo:
<button onClick="...">Enviar</button>O elemento <button> nativo já vem com:
- Focabilidade via teclado (
Tab). - Acionamento via
EntereSpace. - Comunicação correta para leitores de tela ("Botão, Enviar").
Ao usar uma <div>, você precisa reimplementar tudo isso com JavaScript e ARIA. É trabalho inútil e propenso a falhas.
3. Padrões ARIA Comuns e Como Implementar
Às vezes, o HTML não basta. Para componentes complexos como Abas (Tabs) ou Modais, precisamos de ARIA.
Caso de Estudo: O Modal Acessível
Um modal visualmente é apenas uma div flutuante. Para um cego, ele precisa ser muito mais.
<div role="dialog" aria-modal="true" aria-labelledby="modal_title" aria-describedby="modal_desc">
<h2 id="modal_title">Confirmar Exclusão</h2>
<p id="modal_desc">Tem certeza que deseja apagar este item?</p>
<button>Cancelar</button>
<button>Confirmar</button>
</div>
Checklist de Engenharia:
- Focus Trap: Quando o modal abre, o foco do teclado deve ficar preso dentro dele. O
Tabnão pode escapar para a página de fundo. - Return Focus: Quando o modal fecha, o foco deve voltar para o botão que abriu o modal. Se o foco for resetado para o
<body>(topo da página), o usuário perde o contexto. - Hiding Background: O conteúdo atrás do modal deve receber
aria-hidden="true"para que o leitor de tela não o leia acidentalmente.
Labels Invisíveis (aria-label vs sr-only)
Muitas vezes temos botões que são apenas ícones (ex: um ícone de lixeira).
- Abordagem 1:
aria-label<button aria-label="Excluir Item"><IconTrash /></button>Isso sobrescreve qualquer texto dentro do botão para o leitor de tela. - Abordagem 2: Classe
.sr-only(Screen Reader Only)<button><span class="sr-only">Excluir Item</span><IconTrash aria-hidden="true" /></button>Essa classe CSS esconde o texto visualmente (width: 1px, height: 1px, overflow: hidden) mas o mantém no DOM acessível. É geralmente a abordagem mais robusta e compatível com SEO.
4. Novidades do WCAG 2.2 (2023)
A atualização 2.2 trouxe critérios focados em mobilidade e cognição.
Focus Not Obscured (AA)
Quando um elemento recebe foco (via Tab), ele não pode estar escondido por outro elemento (como um sticky header ou um banner de cookies). O usuário precisa ver onde está focando.
Target Size (Minimum) (AA)
Áreas clicáveis (botões, links) devem ter pelo menos 24x24 pixels CSS. Isso evita que usuários com tremores nas mãos (ou dedos grossos em telas pequenas) cliquem no lugar errado. O ideal (AAA) continua sendo 44x44px.
Redundant Entry (A)
Se você pede uma informação ao usuário (ex: Endereço de Entrega), não peça a mesma informação novamente (Endereço de Cobrança) sem oferecer uma opção de "Usar o mesmo endereço". Isso ajuda usuários com dificuldades cognitivas ou de memória de curto prazo.
Mitos de Acessibilidade
| Mito | Realidade |
|---|---|
| Acessibilidade é cara | Corrigir no final é caro. Fazer certo desde o início custa quase zero. |
| Acessibilidade deixa o design feio | Contraste e tipografia legível são pilares do bom design universal. |
| Leitores de tela leem CSS `display: none` | Não. `display: none` e `visibility: hidden` removem o elemento da árvore de acessibilidade. |
| Validadores automáticos pegam tudo | Ferramentas como Lighthouse pegam apenas ~30% dos erros. Teste manual é obrigatório. |
5. Ferramentas de Teste
Não confie apenas no seu olhar. Use a tecnologia.
Toolkit do Desenvolvedor Acessível
- NVDA (Windows): Leitor de tela gratuito e open-source. A maioria dos cegos no mundo usa este ou o JAWS. Teste seu site com ele.
- VoiceOver (Mac/iOS): Já vem instalado no seu MacBook. Pressione
Cmd + F5agora e tente navegar nesta página. - axe DevTools: Extensão de navegador que encontra erros de contraste e ARIA automaticamente.
- Tabbing: Simplesmente desconecte seu mouse e tente usar seu site apenas com
Tab,Shift+Tab,EntereSpace.
Conclusão
Acessibilidade não é caridade; é qualidade de engenharia. Um site acessível é um site semanticamente correto, compatível com diversas tecnologias e preparado para o futuro. Ao adotar essas práticas, você não está apenas ajudando pessoas com deficiência; você está criando uma web melhor para todos (incluindo você mesmo, quando estiver tentando usar o celular sob o sol forte ou com uma mão ocupada).
Glossário Técnico
- WCAG (Web Content Accessibility Guidelines): O padrão internacional de acessibilidade web.
- WAI-ARIA: Especificação técnica para tornar aplicações web ricas (SPAs) acessíveis.
- Screen Reader (Leitor de Tela): Software que converte texto e estrutura HTML em fala sintética ou braille.
- Focus Trap: Técnica de prender o foco do teclado dentro de um container (como um modal) até que ele seja fechado.
- DOM Order vs Visual Order: A ordem dos elementos no código HTML deve seguir a ordem lógica de leitura, mesmo que o CSS mude a posição visual. O Screen Reader lê o DOM, não o CSS.
- Skip Link: Um link oculto no topo da página ("Pular para o conteúdo") que permite a usuários de teclado ignorar menus de navegação repetitivos.
Referências
- W3C. Web Content Accessibility Guidelines (WCAG) 2.2. A especificação oficial.
- W3C WAI. ARIA Authoring Practices Guide (APG). A "bíblia" de como implementar componentes com ARIA.
- Heydon Pickering. Inclusive Components. Blog e livro excelente sobre padrões de interface acessíveis.
- Google Web Fundamentals. Accessibility.
- Marcy Sutton. Testing Web Accessibility. Recursos de uma das maiores experts da área.
