HTML5 Mestre dos Mestres • Aula Suprema 30

ARIA — Acessibilidade Avançada

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.

NARRAÇÃO MESTRE

Narrador Mestre

Ouça a aula, revise blocos e estude com foco.

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

  1. O que significa ARIA? Accessible Rich Internet Applications.
  2. Regra número 1 do ARIA? Se puder usar HTML nativo, não use ARIA.
  3. Para que serve role? Descrever a função de um elemento.
  4. O que faz aria-label? Define texto como nome acessível.
  5. Diferença entre aria-label e aria-labelledby? O primeiro recebe texto direto; o segundo aponta para um ID.
  6. Quando usar aria-describedby? Para descrições ou instruções adicionais.
  7. Para que serve aria-hidden="true"? Esconder elementos decorativos de tecnologias assistivas.
  8. O que indica aria-expanded? Se o conteúdo está aberto ou fechado.
  9. O que aria-live faz? Anuncia atualizações dinâmicas.
  10. Diferença entre polite e assertive? Polite aguarda; assertive interrompe.
  11. O que aria-current="page" sinaliza? Que o link representa a página atual.
  12. ARIA altera visual? Não.
  13. ARIA substitui HTML semântico? Nunca.
  14. O que é nome acessível? Como o leitor de tela identifica o elemento.
  15. 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.