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
 
(No se muestran 3 ediciones intermedias del mismo usuario)
Línea 4: Línea 4:
|wcag_titulo_criterio=2.4.3-B. Contenido dinámico y orden del foco
|wcag_titulo_criterio=2.4.3-B. Contenido dinámico y orden del foco
|wcag_nivel=A
|wcag_nivel=A
|wcag_version=2.1
|wcag_version=2.0
|wcag_principio=2_Operable
|wcag_principio=2_Operable
|wcag_principio_url=Principio_2
|wcag_principio_url=Principio_2
|wcag_pauta=2.4_Navegacion_clara
|wcag_pauta=2.4_Navegable
|wcag_pauta_url=Principio_2/2.4_Navegacion_clara
|wcag_pauta_url=Principio_2/2.4_Navegable
|wcag_grupo=Navegación
|wcag_grupo=Navegación
|wcag_subgrupo=Teclado_y_contenido
|wcag_subgrupo=Teclado_y_contenido
Línea 25: Línea 25:
</li>
</li>
<li class="discapacidad-item">
<li class="discapacidad-item">
   [[Archivo:Bajavision.png|20px|class=icon-discapacidad|alt=Baja visión]]
   [[Archivo:sordoceguera.png|20px|class=icon-discapacidad|alt=Discapacidad sordoceguera]]
   <span class="discapacidad-texto">[[:Categoría:Discapacidad baja visión|Baja visión]]</span>
   <span class="discapacidad-texto">[[:Categoría:Discapacidad sordoceguera|Sordoceguera]]</span>
  <span class="gravedad gravedad-moderada">Barrera moderada</span>
   –
</li>
<li class="discapacidad-item">
  [[Archivo:Cognitiva.png|20px|class=icon-discapacidad|alt=Discapacidad cognitiva]]
   <span class="discapacidad-texto">[[:Categoría:Discapacidad cognitiva|Cognitiva]]</span>
   <span class="gravedad gravedad-grave">Barrera grave</span>
   <span class="gravedad gravedad-grave">Barrera grave</span>
</li>
</li>
<li class="discapacidad-item">
 
  [[Archivo:Auditiva.png|20px|class=icon-discapacidad|alt=Discapacidad auditiva]]
  <span class="discapacidad-texto">[[:Categoría:Discapacidad auditiva|Auditiva]]</span> –
  <span class="gravedad gravedad-leve">Barrera leve</span>
</li>


|wcag_lista_discapacidades=
|wcag_lista_discapacidades=
[[Categoría:Discapacidad motriz]]
[[Categoría:Discapacidad motriz]]
[[Categoría:Discapacidad visual total]]
[[Categoría:Discapacidad visual total]]
[[Categoría:Discapacidad baja visión]]
[[Categoría:Discapacidad sordoceguera]]
[[Categoría:Discapacidad cognitiva]]
[[Categoría:Discapacidad auditiva]]


|wcag_texto_criterioOAW=
|wcag_texto_criterioOAW=
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.
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.


|wcag_descripcion_resumida=
|wcag_descripcion_resumida=
Línea 61: Línea 51:
|wcag_referencias=
|wcag_referencias=
<ul>
<ul>
<li><span lang="en">[https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html Understanding Success Criterion 2.4.3: Focus Order]</span></li>
<li><span lang="en">[https://www.w3.org/WAI/WCAG21/Techniques/client-side-script/SCR26 SCR26: Inserting dynamic content into the Document Object Model immediately following its trigger element]</span></li>
<li>[https://www.w3.org/TR/wai-aria-practices/#kbd_general ARIA Authoring Practices — Keyboard Interaction]</li>
<li><span lang="en">[https://www.w3.org/WAI/WCAG21/Techniques/client-side-script/SCR37 SCR37: Creating custom dialogs in a device independent way]</span></li>
<li>[https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden MDN — aria-hidden]</li>
<li><span lang="en">[https://www.w3.org/WAI/WCAG21/Techniques/failures/F85 F85: Failure due to using dialogs or menus that are not adjacent to their trigger control in the sequential navigation order]</span></li>
</ul>
</ul>


|wcag_recursos=
 
<ul>
|wcag_recursos= No hay
<li>W3C ARIA Practices — gestión del foco</li>
<li>Axe DevTools</li>
<li>Accessibility Insights</li>
<li>Guías de foco para React, Vue, Angular</li>
</ul>


|wcag_tipo_evaluacion=Manual
|wcag_tipo_evaluacion=Manual
Línea 78: Línea 63:
|wcag_pasos_evaluacion=
|wcag_pasos_evaluacion=
<ol class="paso-list">
<ol class="paso-list">
<li>Identificar componentes dinámicos (modales, menús, tabs, sliders, alertas).</li>
<li><span class="paso-badge">Paso 1.</span>
<li>Navegar con teclado y comprobar orden lógico tras la interacción.</li>
Localizar todos los elementos de contenido dinámico de la página (p. ej., cuadros de diálogo, menús desplegables…).
<li>Verificar que el foco no llega a elementos ocultos o fuera de contexto.</li>
</li>
<li>Comprobar uso correcto de <code>aria-hidden</code> y <code>tabindex</code> para ocultar elementos no visibles.</li>
 
<li>En elementos emergentes, asegurar que el foco se confina al componente y regresa al origen al cerrarse.</li>
<li><span class="paso-badge">Paso 2.</span>
Utilizar el teclado para acceder a dicho contenido. Debe comprobarse que:
<ul>
<li>a. El foco se encuentra dentro de dicho contenido.</li>
<li>b. Cuando se sigue tabulando, el foco avanza en una navegación secuencial dentro de dicho contenido.</li>
</ul>
</li>
 
<li><span class="paso-badge">Paso 3.</span>
Utilizar el teclado para salir de dicho contenido. Debe comprobarse que:
<ul>
<li>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.</li>
</ul>
<span class="paso-badge"> Nota: </span>
Si el comportamiento no es el adecuado, puede ser útil la herramienta <strong> [https://chromewebstore.google.com/detail/web-developer/bfbameneiokkgbdmiekhjnmfkcnldhhm?hl=es Web Developer Toolbar] </strong> activando <strong>Information → Display Tab Index</strong> para visualizar el atributo <code>tabindex</code> y ayudar a identificar el origen del problema.
</li>
</ol>
</ol>


Línea 90: Línea 90:
|wcag_ejemplo_evaluacion=
|wcag_ejemplo_evaluacion=
<div class="accessibility-card">
<div class="accessibility-card">
<strong>✅ Correcto: menú con foco gestionado</strong>
Menú con foco gestionado
 
<pre class="wcag-codigo-html">
<pre class="wcag-codigo-html">
<button id="openMenu">Menú</button>
<button id="openMenu">Menú</button>
Línea 108: Línea 109:
});
});
</script>
</script>
</pre>
</div>
<div class="accessibility-card">
<strong>❌ Incorrecto: elementos ocultos tabulables</strong>
<pre class="wcag-codigo-html">
<div style="display:none;">
  <a href="#oculto">Entrada oculta</a>
</div>
</pre>
</pre>
</div>
</div>
Línea 122: Línea 114:
|wcag_otras_herramientas_evaluacion=
|wcag_otras_herramientas_evaluacion=
<ul>
<ul>
<li>Pruebas manuales con teclado</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>Axe DevTools, Accessibility Insights</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>NVDA, JAWS, VoiceOver</li>
<li>'''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.</li>
<li>Inspección DOM para elementos ocultos accesibles</li>
<li>'''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.</li>
</ul>
</ul>
}}
}}

Revisión actual - 12:44 6 nov 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

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

Comentarios

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

Loading comments...