Principio 2/2.4 Navegable/2.4.3-B
2.4.3-B. Contenido dinámico y orden del foco
- Nivel: A
- Versión: 2.0
- Principio: 2_Operable
- Pauta: 2.4_Navegacion_clara
- Grupo: Navegación
- Subgrupo: Teclado_y_contenido
Discapacidades afectadas
Este criterio puede afectar a distintas personas con discapacidad. A continuación se indican las más relevantes.
-
Motriz –
Barrera grave
-
Visual total –
Barrera grave
-
Sordoceguera
–
Barrera grave
Enunciado del criterio (Observatorio de Accesibilidad Web)
- Si el contenido de una página se modifica dinámicamente se debe hacer de forma que el orden del foco sigue teniendo sentido y sin tabular por elementos ocultos.
Comprensión del criterio
Descripción resumida
Objetivo
Importancia de cumplir el criterio
Referencias WCAG
Recursos de apoyo
Evaluación del criterio
Tipo de evaluación
Procedimiento de evaluación
- Paso 1. Localizar todos los elementos de contenido dinámico de la página (p. ej., cuadros de diálogo, menús desplegables…).
- Paso 2.
Utilizar el teclado para acceder a dicho contenido. Debe comprobarse que:
- a. El foco se encuentra dentro de dicho contenido.
- b. Cuando se sigue tabulando, el foco avanza en una navegación secuencial dentro de dicho contenido.
- Paso 3.
Utilizar el teclado para salir de dicho contenido. Debe comprobarse que:
- a. El foco se sitúa en el elemento usado para abrir el diálogo o bien en el siguiente elemento de la página.
Nota: Si el comportamiento no es el adecuado, puede ser útil la herramienta [https://chromewebstore.google.com/detail/web-developer/bfbameneiokkgbdmiekhjnmfkcnldhhm?hl=es Web Developer Toolbar activando Information → Display Tab Index para visualizar el atributo
tabindexy ayudar a identificar el origen del problema.
Resultado esperado
Ejemplo ilustrativo
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>
Otras herramientas de evaluación
- Navegación con teclado: interactuar con componentes dinámicos (p. ej. menús desplegables, modales, pestañas, acordeones) usando Tab y Shift + Tab, asegurando que el foco sigue un orden lógico y no pasa por elementos ocultos.
- Inspección del DOM: comprobar que los elementos dinámicamente ocultos se gestionan correctamente (p. ej., usando
display:none,hidden,aria-hidden="true") para que no sean alcanzables con el foco. - Pruebas de cambios de estado: abrir/cerrar componentes y verificar que el foco se mueve al contenido visible relevante y vuelve al punto lógico al cerrar.
- Lectores de pantalla: (NVDA, JAWS, VoiceOver) confirmar que el contenido dinámico se anuncia adecuadamente y que el orden del foco no se rompe al interactuar.
Ejemplos accesibles y no accesibles creados por alumnos
<!DOCTYPE html>
Reserva de Hotel
- No hay etiquetas
<label>para ningún campo - Algunos placeholders son ambiguos ("Código" - ¿qué código?)
- No se indica qué campos son obligatorios
- No hay instrucciones sobre el formato esperado
- El select dice "Selecciona" pero ¿seleccionar qué?
- Un campo no tiene ni placeholder ni etiqueta (campo de email)
- No hay indicación de formato de fecha específico
- No se explica para qué sirve cada campo
<!DOCTYPE html>
Reserva de Hotel
Complete el siguiente formulario para reservar su estadía
- Cada campo tiene una etiqueta
<label>clara asociada - Los campos obligatorios están claramente marcados con *
- Hay instrucciones específicas sobre formato y contenido esperado
- Los selectores tienen opciones descriptivas, no ambiguas
- Se explica el propósito de cada campo cuando no es obvio
- Se proporcionan ejemplos en los placeholders
- Hay una nota inicial explicando la convención de campos obligatorios
- Se usan atributos ARIA apropiados (aria-required, aria-describedby)
Comentarios
A continuación se muestran comentarios sobre el criterio 2.4.3-B. Contenido dinámico y orden del foco
