Diferencia entre revisiones de «Principio 2/2.4 Navegable/2.4.3-B»

De WCAG Wiki
Sin resumen de edición
Sin resumen de edición
 
Línea 114: Línea 114:
|wcag_otras_herramientas_evaluacion=
|wcag_otras_herramientas_evaluacion=
<ul>
<ul>
<li>
<strong>Bookmarklet Forzar el foco:</strong><br/>
<html>
<div class="highlight-box">
Arrastra este botón a tu barra de marcadores y podrás ejecutarlo y forzar ver el foco en páginas que no se muestra el foco (util para ver si es orden de navegación es correcto). <br>
<a class="bookmarklet-button"
href="javascript:(function()%7Bdocument.body.appendChild(document.createElement('script')).src='https://cdn.jsdelivr.net/gh/pauljadam/bookmarklets@master/focus.js';var%20iframes=document.getElementsByTagName('iframe');for(i=0;i%3Ciframes.length;i++)%20%7Biframes%5Bi%5D.contentDocument.body.appendChild(document.createElement('script')).src='https://cdn.jsdelivr.net/gh/pauljadam/bookmarklets@master/focus.js';%7D%7D)();">
Forzar foco</a>
</div>
</html>
</li>
<li>'''Navegación con teclado''': interactuar con componentes dinámicos (p. ej. menús desplegables, modales, pestañas, acordeones) usando <kbd>Tab</kbd> y <kbd>Shift + Tab</kbd>, asegurando que el foco sigue un orden lógico y no pasa por elementos ocultos.</li>
<li>'''Navegación con teclado''': interactuar con componentes dinámicos (p. ej. menús desplegables, modales, pestañas, acordeones) usando <kbd>Tab</kbd> y <kbd>Shift + Tab</kbd>, asegurando que el foco sigue un orden lógico y no pasa por elementos ocultos.</li>
<li>'''Inspección del DOM''': comprobar que los elementos dinámicamente ocultos se gestionan correctamente (p. ej., usando <code>display:none</code>, <code>hidden</code>, <code>aria-hidden="true"</code>) para que no sean alcanzables con el foco.</li>
<li>'''Inspección del DOM''': comprobar que los elementos dinámicamente ocultos se gestionan correctamente (p. ej., usando <code>display:none</code>, <code>hidden</code>, <code>aria-hidden="true"</code>) para que no sean alcanzables con el foco.</li>

Revisión actual - 09:20 8 dic 2025

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 hacer de forma que el orden del foco sigue teniendo sentido y sin tabular por elementos ocultos.

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

No hay

Evaluación del criterio

Tipo de evaluación

Evaluación Manual

Procedimiento de evaluación

  1. Paso 1. Localizar todos los elementos de contenido dinámico de la página (p. ej., cuadros de diálogo, menús desplegables…).
  2. 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.
  3. 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 Web Developer Toolbar activando Information → Display Tab Index para visualizar el atributo tabindex y ayudar a identificar el origen del problema.

Resultado esperado

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

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

  • Bookmarklet Forzar el foco:
    Arrastra este botón a tu barra de marcadores y podrás ejecutarlo y forzar ver el foco en páginas que no se muestra el foco (util para ver si es orden de navegación es correcto).
    Forzar foco
  • 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> Formulario de Reserva - NO Accesible 3.3.2-C

⚠️ PROBLEMA 3.3.2-C: Este formulario NO tiene etiquetas ni instrucciones claras

Reserva de Hotel

⚠️ Problemas de este formulario:
  • 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> Formulario de Reserva - ACCESIBLE 3.3.2-C

✅ ACCESIBLE 3.3.2-C: Este formulario tiene etiquetas e instrucciones claras

Reserva de Hotel

Complete el siguiente formulario para reservar su estadía

Nota: Los campos marcados con * son obligatorios

Ingrese su nombre tal como aparece en su documento de identidad

Enviaremos la confirmación de reserva a este correo

Incluya el código de país (Ej: +34 para España)

¿Cuántas personas se alojarán?

Formato: DD/MM/AAAA (Ej: 15/02/2025)

Formato: DD/MM/AAAA (Ej: 20/02/2025)

Seleccione el tipo de habitación que prefiere

Si tiene un código promocional, ingréselo aquí

Indique cualquier necesidad especial o preferencia (cama extra, piso bajo, accesibilidad, etc.)

✅ Implementación correcta:
  • 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

Loading comments...