Principio 2/2.4 Navegable/2.4.3-B

De WCAG Wiki

2.4.3-B. Contenido dinámico y orden del foco

Discapacidades afectadas

Este criterio puede afectar a distintas personas con discapacidad. A continuación se indican las más relevantes.

Enunciado del criterio (Observatorio de Accesibilidad Web)

  • Si el contenido de una página se modifica dinámicamente, se debe garantizar que el orden del foco continúa siendo lógico y que no se tabula por elementos ocultos o no operables.

Comprensión del criterio

Descripción resumida

Cuando el contenido aparece, desaparece o cambia mediante scripts, el orden de tabulación se debe mantener lógico y el foco debe moverse al contenido visible y relevante.

Objetivo

Asegurar que los usuarios que navegan con teclado y tecnologías de apoyo puedan mantener el contexto cuando el contenido cambia dinámicamente.

Importancia de cumplir el criterio

Si el foco se mueve a elementos ocultos o deja zonas accesibles, los usuarios pueden perder orientación, no completar tareas o quedar atrapados fuera del flujo correcto de interacción.

Referencias WCAG

Recursos de apoyo

  • W3C ARIA Practices — gestión del foco
  • Axe DevTools
  • Accessibility Insights
  • Guías de foco para React, Vue, Angular

Evaluación del criterio

Tipo de evaluación

Evaluación Manual

Procedimiento de evaluación

  1. Identificar componentes dinámicos (modales, menús, tabs, sliders, alertas).
  2. Navegar con teclado y comprobar orden lógico tras la interacción.
  3. Verificar que el foco no llega a elementos ocultos o fuera de contexto.
  4. Comprobar uso correcto de aria-hidden y tabindex para ocultar elementos no visibles.
  5. En elementos emergentes, asegurar que el foco se confina al componente y regresa al origen al cerrarse.

Resultado esperado

El foco permanece en contenido visible, sigue orden lógico y respeta la interacción dinámica sin exponer elementos ocultos.

Ejemplo

✅ Correcto: menú con foco gestionado

<button id="openMenu">Menú</button>
<nav id="menu" hidden aria-hidden="true">
  <a href="#a">Opción A</a>
  <a href="#b">Opción B</a>
</nav>

<script>
const btn = document.getElementById('openMenu');
const menu = document.getElementById('menu');

btn.addEventListener('click', () => {
  menu.hidden = false;
  menu.setAttribute('aria-hidden','false');
  menu.querySelector('a').focus();
});
</script>

❌ Incorrecto: elementos ocultos tabulables

<div style="display:none;">
  <a href="#oculto">Entrada oculta</a>
</div>

Otras herramientas de evaluación

  • Pruebas manuales con teclado
  • Axe DevTools, Accessibility Insights
  • NVDA, JAWS, VoiceOver
  • Inspección DOM para elementos ocultos accesibles










Ejemplos accesibles y no accesibles creados por alumnos

Comentarios

A continuación se muestran comentarios sobre el criterio 2.4.3-B. Contenido dinámico y orden del foco

Loading comments...