HTML Academy · Aula

Regiões dinâmicas: aria-live aria-atomic aria-relevant

Anuncie atualizações assíncronas às tecnologias assistivas.

Aula 3 de 413 etapas

Regiões dinâmicas: aria-live aria-atomic aria-relevant é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

O que são regiões dinâmicas?

Uma região dinâmica é uma seção da página cujo conteúdo é atualizado dinamicamente. Os leitores de tela monitoram as regiões dinâmicas e anunciam as alterações automaticamente, sem que o usuário precise mover o foco.

Criando uma região dinâmica

Adicione aria-live a um elemento contêiner:

<!-- Polite: announce when user is idle -->
<div aria-live="polite" id="notifications"></div>

<!-- Inject text to announce: -->
<script>
document.getElementById('notifications').textContent = '5 new messages';
// Screen reader announces: '5 new messages' when user pauses
</script>

Recapitulação dos valores de aria-live

Os três níveis de aria-live:

  • off — nenhum anúncio (padrão para regiões que não são dinâmicas)
  • polite — anuncia quando o usuário faz uma pausa ao falar
  • assertive — anuncia imediatamente e interrompe a fala atual

aria-atomic em detalhes

aria-atomic controla o que é anunciado quando o conteúdo é alterado:

<div aria-live="polite" aria-atomic="false">  <!-- default -->
  Items in cart: <span id="count">3</span>
</div>
<!-- Only the changed span is announced: '4' -->

<div aria-live="polite" aria-atomic="true">
  Items in cart: <span id="count">3</span>
</div>
<!-- The entire div is announced: 'Items in cart: 4' -->

<!-- aria-atomic="true" gives more context but is more verbose -->

Valores de aria-relevant

aria-relevant especifica quais alterações do DOM disparam anúncios:

<!-- Default: additions text -->
<div aria-live="polite" aria-relevant="additions text">

<!-- Announce removals too: -->
<div aria-live="polite" aria-relevant="removals">

<!-- Announce everything: -->
<div aria-live="polite" aria-relevant="all">

<!-- Values: additions, removals, text, all
     'additions' = added nodes announced
     'removals' = removed nodes announced
     'text' = text content changes announced -->

Papéis predefinidos de regiões dinâmicas

Alguns papéis definem aria-live implicitamente:

  • role="alert" — aria-live="assertive" + aria-atomic="true"
  • role="status" — aria-live="polite" + aria-atomic="true"
  • role="log" — aria-live="polite"
  • role="timer" — aria-live="off"
  • role="marquee" — aria-live="off"

Estado de carregamento com região dinâmica

Anuncie os estados de carregamento e conclusão:

<div role="status" aria-live="polite" aria-atomic="true" id="load-status">
  <!-- empty initially -->
</div>

<script>
async function loadData() {
  document.getElementById('load-status').textContent = 'Loading...';
  const data = await fetchData();
  renderResults(data);
  document.getElementById('load-status').textContent =
    `${data.length} results loaded.`;
}
</script>

Retorno do envio do formulário

Região dinâmica para o estado do envio do formulário:

<form id="contact-form" novalidate>
  <input type="email" name="email">
  <button type="submit">Subscribe</button>
</form>

<div role="status" aria-live="polite" id="form-status"></div>

<script>
form.addEventListener('submit', async (e) => {
  e.preventDefault();
  const status = document.getElementById('form-status');
  status.textContent = 'Submitting...';
  await submitForm(new FormData(form));
  status.textContent = 'Thank you! You are now subscribed.';
});
</script>

Contagem dos resultados da pesquisa

Anuncie dinamicamente os resultados da pesquisa:

<label for="search">Search</label>
<input type="search" id="search">

<div role="status" aria-live="polite" aria-atomic="true" id="results-count"></div>
<div id="results"></div>

<script>
let debounceTimer;
search.addEventListener('input', () => {
  clearTimeout(debounceTimer);
  debounceTimer = setTimeout(() => {
    const results = filterResults(search.value);
    renderResults(results);
    document.getElementById('results-count').textContent =
      `${results.length} results for "${search.value}"`;
  }, 300);
});
</script>

Antipadrões de regiões dinâmicas

Evite estes erros com regiões dinâmicas:

  • Não crie e destrua regiões dinâmicas — mantenha-as persistentes, com o conteúdo inicial vazio
  • Não coloque regiões dinâmicas dentro de áreas aria-hidden
  • Não use assertive para atualizações rotineiras — isso é muito perturbador
  • Não anuncie atualizações com frequência excessiva (controle a frequência das contagens dos resultados da pesquisa)

Testando regiões dinâmicas

Como testar os anúncios de regiões dinâmicas:

  • Ative o VoiceOver (Mac: Cmd+F5) ou o NVDA (Windows: Ctrl+Alt+N)
  • Dispare a atualização e ouça o anúncio
  • Verifique o tempo: polite aguarda, assertive interrompe
  • Verifique se o axe DevTools não sinaliza problemas nas regiões dinâmicas

Verificação rápida

Qual papel define implicitamente aria-live como assertive e aria-atomic como true?

Recapitulação: regiões dinâmicas

Elementos essenciais das regiões dinâmicas:

  • aria-live="polite" — aguarda uma pausa do usuário
  • aria-live="assertive" — interrompe imediatamente
  • aria-atomic="true" — anuncia a região inteira
  • role="alert" = assertive + atomic; role="status" = polite + atomic
  • Mantenha as regiões dinâmicas persistentes; limpe e depois defina o conteúdo
Grátis para começar

Aprenda HTML com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
40
Aulas
159

Perguntas Frequentes

A aula “Regiões dinâmicas: aria-live aria-atomic aria-relevant” é grátis?

Sim — o texto completo de “Regiões dinâmicas: aria-live aria-atomic aria-relevant” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Regiões dinâmicas: aria-live aria-atomic aria-relevant”?

Anuncie atualizações assíncronas às tecnologias assistivas. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Regiões dinâmicas: aria-live aria-atomic aria-relevant”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. aria-expanded e aria-controls para alternâncias
  2. aria-selected e padrões de abas
  3. Regiões dinâmicas: aria-live aria-atomic aria-relevant
  4. Testes com leitores de tela
← Voltar para HTML Academy