Regiões dinâmicas: aria-live aria-atomic aria-relevant
Anuncie atualizações assíncronas às tecnologias assistivas.
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 falarassertive— 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árioaria-live="assertive"— interrompe imediatamentearia-atomic="true"— anuncia a região inteirarole="alert"= assertive + atomic; role="status" = polite + atomic- Mantenha as regiões dinâmicas persistentes; limpe e depois defina o conteúdo
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
- aria-expanded e aria-controls para alternâncias
- aria-selected e padrões de abas
- Regiões dinâmicas: aria-live aria-atomic aria-relevant
- Testes com leitores de tela