0Pricing
HTML Academy · Lección

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 hablar
  • assertive — 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 pausa
  • aria-live="assertive" — interrumpe inmediatamente
  • aria-atomic="true" — anuncia toda la región
  • role="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

  1. aria-expanded y aria-controls para controles desplegables
  2. aria-selected y patrones de pestañas
  3. Regiones dinámicas: aria-live, aria-atomic y aria-relevant
  4. Pruebas con lectores de pantalla
← Volver a HTML Academy