Regiones dinámicas: aria-live, aria-atomic y aria-relevant
Anuncie actualizaciones asíncronas a las tecnologías de asistencia
Regiones dinámicas: aria-live, aria-atomic y aria-relevant es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.
¿Qué son las regiones dinámicas?
Una región dinámica es una sección de la página cuyo contenido se actualiza dinámicamente. Los lectores de pantalla supervisan las regiones dinámicas y anuncian los cambios automáticamente, sin que el usuario tenga que mover el foco.
Creación de una región dinámica
Añada aria-live a un elemento contenedor:
<!-- 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>Resumen de los valores de aria-live
Los tres niveles de aria-live:
off— no se realizan anuncios (valor predeterminado para regiones no dinámicas)polite— se anuncia cuando el usuario hace una pausa al hablarassertive— se anuncia inmediatamente e interrumpe el discurso actual
aria-atomic en profundidad
aria-atomic controla qué se anuncia cuando cambia el contenido:
<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 qué cambios del DOM activan los anuncios:
<!-- 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 -->Roles predefinidos de regiones dinámicas
Algunos roles establecen aria-live implícitamente:
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 carga con una región dinámica
Anuncie los estados de carga y finalización:
<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>Comentarios del envío del formulario
Región dinámica para el estado del envío de un formulario:
<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>Cantidad de resultados de búsqueda
Anuncie dinámicamente los resultados de búsqueda:
<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>Antipatrones de las regiones dinámicas
Evite estos errores en las regiones dinámicas:
- No cree y destruya regiones dinámicas; manténgalas persistentes con contenido inicial vacío
- No coloque regiones dinámicas dentro de áreas con aria-hidden
- No utilice assertive para actualizaciones rutinarias; resulta muy disruptivo
- No anuncie actualizaciones con demasiada frecuencia (limite la frecuencia de los recuentos de resultados de búsqueda)
Pruebas de regiones dinámicas
Cómo probar los anuncios de las regiones dinámicas:
- Active VoiceOver (Mac: Cmd+F5) o NVDA (Windows: Ctrl+Alt+N)
- Active la actualización y escuche el anuncio
- Verifique el tiempo: polite espera y assertive interrumpe
- Compruebe que axe DevTools no señale problemas en las regiones dinámicas
Comprobación rápida
¿Qué rol establece implícitamente aria-live assertive y aria-atomic true?
Resumen: regiones dinámicas
Aspectos esenciales de las regiones dinámicas:
aria-live="polite"— espera a que el usuario haga una pausaaria-live="assertive"— interrumpe inmediatamentearia-atomic="true"— anuncia toda la regiónrole="alert"= assertive + atomic; role="status" = polite + atomic- Mantenga las regiones dinámicas persistentes; borre el contenido y vuelva a establecerlo
Preguntas frecuentes
¿La lección «Regiones dinámicas: aria-live, aria-atomic y aria-relevant» es gratis?
Sí — el texto completo de «Regiones dinámicas: aria-live, aria-atomic y aria-relevant» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Regiones dinámicas: aria-live, aria-atomic y aria-relevant»?
Anuncie actualizaciones asíncronas a las tecnologías de asistencia Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar HTML Academy?
No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Regiones dinámicas: aria-live, aria-atomic y aria-relevant»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de HTML Academy?
Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- aria-expanded y aria-controls para controles desplegables
- aria-selected y patrones de pestañas
- Regiones dinámicas: aria-live, aria-atomic y aria-relevant
- Pruebas con lectores de pantalla