Introdução: acessibilidade primeiro
Este mini curso coloca acessibilidade no centro do front-end development. Aqui, acessibilidade não é etapa final: ela orienta decisões de HTML, CSS, JavaScript, conteúdo e testes.
Objetivo: construir interfaces utilizáveis por pessoas com diferentes capacidades, dispositivos, contextos e preferências de navegação.
- Perceptível: informação visível, legível e com contraste adequado.
- Operável: tudo funciona com teclado, foco e controles claros.
- Compreensível: estrutura lógica, rótulos e feedback de estado.
- Robusto: compatível com tecnologias assistivas e navegadores.
Trilha de estudo com foco em acessibilidade
Sequência sugerida para estudar em blocos de 30 a 60 minutos:
- Entenda os princípios da WCAG e os níveis A, AA e AAA.
- Pratique HTML semântico com landmarks, títulos e formulários acessíveis.
- Aplique CSS inclusivo com foco visível, contraste e redução de movimento.
- Implemente JavaScript acessível com ARIA, eventos de teclado e anúncios de estado.
- Faça auditoria manual e automatizada do projeto final.
Dica: ao codar cada componente, pergunte: "isso funciona com teclado? está claro para leitor de tela?"
Base A11y: padrões e parâmetros
Para front-end acessível, use WCAG 2.2 como referência principal. Em projetos reais, o alvo mais comum é nível AA.
Princípios POUR
- Perceptível: conteúdo precisa ser percebido por diferentes sentidos.
- Operável: navegação por teclado e foco consistente.
- Compreensível: linguagem clara, previsibilidade e mensagens de erro úteis.
- Robusto: HTML válido, semântica adequada e suporte a tecnologias assistivas.
Parâmetros práticos para aplicar no dia a dia
- Contraste de cor adequado para texto e elementos interativos.
- Estrutura semântica com ordem de títulos e landmarks.
- Todos os controles alcançáveis por teclado.
- Estados claros: foco, hover, erro, sucesso e carregamento.
- Preferências de usuário respeitadas, como redução de movimento.
Meta recomendada: WCAG 2.2 AA
Checklist mínimo: teclado + foco + contraste + semântica + feedback
Módulo 1: HTML Acessível
Use HTML semântico antes de pensar em ARIA. A regra é: elemento nativo correto primeiro, ARIA como complemento quando necessário.
Estrutura semântica essencial
- <header>, <nav>, <main>, <footer> para landmarks de navegação.
- <h1>...<h6> em ordem lógica, sem pular níveis sem necessidade.
- <button> para ações e <a> para navegação.
- <label> associado a cada campo de formulário.
Exemplo correto de botão e link
<button type="button">Salvar</button>
<a href="/perfil">Ir para perfil</a>
Exemplo acessível de formulário
<form>
<label for="email">E-mail</label>
<input id="email" type="email" required>
<p id="ajuda-email">Use seu e-mail principal.</p>
<input aria-describedby="ajuda-email" id="email2" type="email">
<button type="submit">Enviar</button>
</form>
Checklist HTML: idioma da página definido, skip link, landmarks, rótulos, textos alternativos e nomes acessíveis para botões.
Módulo 2: CSS Inclusivo
CSS acessível garante legibilidade e previsibilidade visual para mais pessoas, incluindo baixa visão, daltonismo e sensibilidade a movimento.
Boas práticas essenciais
- Contraste adequado entre texto e fundo.
- Indicador de foco sempre visível com
:focus-visible. - Evitar depender apenas de cor para transmitir informação.
- Suporte a
prefers-reduced-motionpara reduzir animações.
Exemplo com foco visível e contraste
a:focus-visible,
button:focus-visible {
outline: 3px solid #0ea5e9;
outline-offset: 3px;
}
body {
color: #1f2937;
background: #ffffff;
}
Exemplo de redução de movimento
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.001ms !important;
transition-duration: 0.001ms !important;
}
}
Módulo 3: JavaScript Acessível
No JavaScript, o foco é manter estados acessíveis: abrir e fechar componentes com semântica correta, anunciar mudanças e garantir suporte total a teclado.
Padrões recomendados
- Atualizar
aria-expandedem menus e painéis colapsáveis. - Mover foco para o próximo elemento relevante após uma ação.
- Anunciar mudanças importantes em região com
aria-live. - Fechar painéis com tecla
Escape.
Exemplo: botão com estado ARIA
const botao = document.getElementById('menuBtn');
const menu = document.getElementById('menu');
botao.addEventListener('click', () => {
const aberto = menu.classList.toggle('aberto');
botao.setAttribute('aria-expanded', String(aberto));
});
Exemplo: anúncio de atualização
const status = document.getElementById('status');
status.textContent = 'Preferências atualizadas com sucesso.';
Lembrete: interatividade acessível depende de semântica, teclado e estado anunciado.
Seção detalhada: acessibilidade aplicada neste site
A própria página do curso implementa recursos de acessibilidade em HTML, CSS e JavaScript. Abaixo está o que foi aplicado e por que cada item importa.
1. Estrutura semântica e navegação
- Idioma definido com
lang="pt-BR"para pronúncia correta em leitores de tela. - Landmarks com
header,nav,mainefooter. - Skip link no topo para pular direto ao conteúdo principal.
- Hierarquia de títulos para navegação por headings.
2. Operação por teclado
- Menu e painel usam botões nativos e podem ser acionados por teclado.
Escapefecha menu e painel de acessibilidade.- Atalho
Alt + Aalterna o painel de acessibilidade. - Ao abrir o painel, o foco é movido para a primeira opção.
3. Estados ARIA e feedback
aria-expandedindica se menu e painel estão abertos.aria-controlsconecta o botão ao painel correspondente.aria-live="polite"anuncia mudanças de tema e preferências.- Links externos informam "abre em nova aba" para leitores de tela.
4. Preferências visuais e sensoriais
- Alternância de tema claro e escuro.
- Modo de alto contraste.
- Opção de texto maior.
- Foco reforçado com contorno mais espesso.
- Links sublinhados para reforço visual.
- Redução de movimento via sistema e configuração manual.
5. Persistência e consistência
- Preferências são salvas no navegador para manter a experiência entre visitas.
- Existe botão para restaurar padrões de acessibilidade.
6. Checklist de conformidade prática (nível AA)
- Navegável por teclado sem bloqueios.
- Foco sempre visível e com contraste.
- Informações de estado disponíveis visualmente e por tecnologia assistiva.
- Estrutura semântica consistente em todas as seções.
- Respeito a preferências de movimento e contraste.
Projeto guiado: landing page acessível
Construa uma página simples aplicando acessibilidade desde o início:
- Estruture landmarks semânticos e títulos em ordem.
- Adicione skip link e menu operável por teclado.
- Garanta contraste e foco visível em todos os elementos interativos.
- Implemente painel de preferências com ARIA e anúncio de status.
- Audite com teste manual e ferramenta automatizada.
Meta: publicar uma página útil, inclusiva e validada com checklist de acessibilidade.
Exercícios de acessibilidade
Pratique com desafios focados em inclusão real:
- Transforme um menu feito com
divem navegação semântica acessível. - Adicione labels e mensagens de erro claras a um formulário.
- Implemente foco visível em botões e links usando
:focus-visible. - Crie um botão de abrir e fechar com
aria-expanded. - Adicione uma região
aria-livepara feedback de sucesso. - Faça teste completo de teclado: Tab, Shift+Tab, Enter, Espaço e Escape.
Autoavaliação: se qualquer pessoa consegue navegar sem mouse e entender os estados da interface, você está no caminho certo.
Recursos essenciais de acessibilidade
Materiais de referência para desenvolvimento front-end acessível: