ARIA significa Accessible Rich Internet Applications. Ela complementa a acessibilidade quando
o HTML nativo não é suficiente, mas usada errado pode piorar a experiência de quem depende de tecnologias assistivas.
Pronto para narrar. As vozes disponíveis dependem do navegador e do sistema.
Abertura de impacto
ARIA dá voz ao comportamento invisível
O HTML semântico define a estrutura. O ARIA entra quando a interface fica rica, dinâmica e
interativa demais para ser explicada apenas com tags nativas.
Regra Mestre:
Primeiro use HTML semântico. Só depois use ARIA quando necessário. Nenhum ARIA é melhor
que ARIA ruim.
HTML antes de ARIA
No ARIA is better than bad ARIA
Se existe uma tag nativa para resolver o problema, use a tag nativa.
button, nav, main, header e
footer já carregam função acessível sem precisar de role extra.
<!-- Mestre: HTML nativo correto -->
<button type="button">Salvar</button>
<!-- Amador: tenta transformar div em botão -->
<div role="button">Salvar</div>
Erro grave:
Usar role="button" em uma div quando poderia usar
button. A div não tem foco, teclado e comportamento nativo por padrão.
Nome acessível
role, aria-label, aria-labelledby e aria-describedby
role
Define a função do elemento quando o HTML nativo não resolve.
aria-label
Fornece um nome acessível invisível, útil em botões apenas com ícone.
aria-labelledby
Aponta para o ID de outro elemento que já contém o nome visível.
aria-describedby
Conecta o elemento a uma descrição adicional ou instrução de uso.
<button type="button" aria-label="Abrir menu de navegação">
☰
</button>
<section aria-labelledby="titulo-recursos">
<h2 id="titulo-recursos">Recursos acessíveis</h2>
</section>
<input id="usuario" name="usuario" aria-describedby="dica-usuario">
<p id="dica-usuario">Use entre 4 e 16 caracteres.</p>
Use entre 4 e 16 caracteres. Esta dica é ligada ao campo por aria-describedby.
Estados dinâmicos
aria-hidden, aria-expanded, aria-controls, aria-live e aria-current
aria-hidden: oculta conteúdo decorativo da árvore de acessibilidade.
aria-expanded: informa se um painel está aberto ou fechado.
aria-controls: conecta o botão ao painel controlado.
aria-live: anuncia atualizações dinâmicas sem recarregar a página.
aria-current: indica o item atual em navegações ou paginações.
Este painel é controlado pelo botão com aria-controls. Em um projeto com JavaScript, o valor de aria-expanded deve alternar entre true e false.
Região com aria-live="polite": mensagens importantes podem ser anunciadas sem recarregar a página.
Erro crítico:
Declarar aria-expanded="false" e nunca atualizar via JavaScript quando o painel abre.
O leitor de tela ouvirá um estado mentiroso.
Landmarks
Roles de região e por que tags nativas são melhores
Landmarks ajudam usuários de leitores de tela a saltar por grandes regiões da página:
banner, navigation, main, complementary e contentinfo. Mas, na maioria dos casos, as tags
nativas já entregam isso.
<header> equivale ao papel de banner em contexto global.
<nav> equivale a navigation.
<main> equivale a main.
<aside> equivale a complementary.
<footer> equivale a contentinfo.
Não polua o código:
Evite <nav role="navigation"> ou <main role="main">
sem necessidade. O elemento já possui semântica nativa.
Método Mestre
Boas práticas para ARIA
Use HTML semântico antes de qualquer ARIA.
Não use ARIA para aparência visual.
Não use role em elemento que já possui semântica nativa equivalente.
Garanta nome acessível claro para botões de ícone.
Use aria-labelledby quando já existe um título visível.
Use aria-describedby para dicas, mensagens e instruções extras.
Use aria-hidden apenas em conteúdo decorativo.
Nunca use aria-hidden em elementos focáveis.
Atualize estados ARIA com JavaScript quando a interface mudar.
Teste com teclado e DevTools de acessibilidade.
Pense sempre em função, nome e estado.
Evite aria-live em excesso.
Desafio Mestre
Página Acessível com ARIA
Missão: criar o arquivo pagina-acessivel-aria.html
usando ARIA com responsabilidade, sem substituir HTML semântico nativo.
Requisitos obrigatórios
Doctype HTML5 e html lang="pt-BR".
Head completo com charset, viewport, title e meta description.
Body com header, nav, main, section, aside e footer.
H1 com “Página Acessível com ARIA”.
Section introdutória explicando o que é ARIA.
Nav interno com links para pelo menos 4 seções.
Uso prioritário de HTML semântico antes de ARIA.
Pelo menos um botão com aria-label útil.
Pelo menos uma section usando aria-labelledby corretamente.
Pelo menos um campo ou bloco usando aria-describedby corretamente.
Pelo menos um ícone decorativo com aria-hidden="true".
Pelo menos um botão de painel expansível com aria-expanded e aria-controls.
Pelo menos uma área de mensagem dinâmica com aria-live.
Pelo menos um link atual usando aria-current="page".
Explicação clara da diferença entre HTML semântico e ARIA.
Explicação clara da diferença entre role, aria-label, aria-labelledby e aria-describedby.
Lista com pelo menos 10 boas práticas para ARIA.
Erros que reprovam:
Usar ARIA para consertar HTML ruim.
Usar role="button" em div quando poderia usar button.
Usar aria-hidden="true" em elemento focável.
Declarar estado ARIA falso e não atualizar.
Usar aria-label genérico ou incoerente.
Duplicar landmarks sem rótulo claro.
Quiz com gabarito
15 perguntas para provar domínio
O que significa ARIA? Accessible Rich Internet Applications.
Regra número 1 do ARIA? Se puder usar HTML nativo, não use ARIA.
Para que serve role? Descrever a função de um elemento.
O que faz aria-label? Define texto como nome acessível.
Diferença entre aria-label e aria-labelledby? O primeiro recebe texto direto; o segundo aponta para um ID.
Quando usar aria-describedby? Para descrições ou instruções adicionais.
Para que serve aria-hidden="true"? Esconder elementos decorativos de tecnologias assistivas.
O que indica aria-expanded? Se o conteúdo está aberto ou fechado.
O que aria-live faz? Anuncia atualizações dinâmicas.
Diferença entre polite e assertive? Polite aguarda; assertive interrompe.
O que aria-current="page" sinaliza? Que o link representa a página atual.
ARIA altera visual? Não.
ARIA substitui HTML semântico? Nunca.
O que é nome acessível? Como o leitor de tela identifica o elemento.
Qual arquivo do desafio? pagina-acessivel-aria.html.
GitHub
Registre sua página acessível
git status
git add .
git commit -m "aula-30: cria pagina acessivel com aria"
git push
git status: valida os arquivos criados.
git add .: adiciona sua página acessível.
git commit: documenta que você domina ARIA.
git push: publica seu conhecimento no portfólio global.
Resumo Mestre
ARIA dá voz ao que é invisível
ARIA é uma camada semântica para tecnologias assistivas. Usada com sabedoria, melhora interfaces
ricas e dinâmicas. Usada com erro, pode destruir a acessibilidade. O Mestre usa ARIA apenas depois
de esgotar o poder do HTML semântico.
Nota final: 10/10 Supremo.
Esta aula está no nível Mestre dos Mestres porque ensina acessibilidade como arquitetura de sistemas:
função, nome, estado, semântica nativa, ARIA responsável e respeito real ao usuário final.