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 1: Línea 1:
== '''2.4.3-B. Contenido dinámico''' ==
{{CriterioWCAG
<!-- 
|id_wcag_criterio=2.4.3
  Análisis interno:
|id_wcag_subcriterio=2.4.3-B
  Este criterio impacta principalmente a: Personas con discapacidad motriz y cognitiva 
|wcag_titulo_criterio=2.4.3-B. Contenido dinámico y orden del foco
  Problema grave: Si el orden del foco no se actualiza cuando el contenido cambia dinámicamente, los usuarios de teclado y lectores de pantalla pierden orientación y no pueden interactuar correctamente con el contenido, generando barreras graves.
|wcag_nivel=A
-->
|wcag_version=2.1
<html>
|wcag_principio=2_Operable
<!-- criterio 2.4.3-B -->
|wcag_principio_url=Principio_2
<article class="wcag-card">
|wcag_pauta=2.4_Navegacion_clara
   <section class="wcag-info">
|wcag_pauta_url=Principio_2/2.4_Navegacion_clara
    <ul>
|wcag_grupo=Navegación
      <li><span class="label">Nivel:</span><span class="value">A</span></li>
|wcag_subgrupo=Teclado_y_contenido
      <li><span class="label">Versión:</span><span class="value">2.2</span></li>
|wcag_subcriterio_url=Principio_2/2.4_Navegacion_clara/2.4.3-B
      <li><span class="label">Principio:</span><span class="value">2. Operable</span></li>
 
      <li><span class="label">Pauta:</span><span class="value">2.4 Proporcionar ayuda para navegar y buscar contenido</span></li>
|wcag_discapacidades=
      <li><span class="label">Categoría:</span><span class="value">Interacción</span></li>
<li class="discapacidad-item">
      <li><span class="label">Subcategoría:</span><span class="value">Orden del foco en contenido dinámico</span></li>
   [[Archivo:Motriz.png|20px|class=icon-discapacidad|alt=Discapacidad motriz]]
    </ul>
  <span class="discapacidad-texto">[[:Categoría:Discapacidad motriz|Motriz]]</span>
  </section>
  <span class="gravedad gravedad-grave">Barrera grave</span>
  <section class="wcag-users">
</li>
    <p>Usuarios más afectados</p>
<li class="discapacidad-item">
    <ul>
  [[Archivo:Sinvision.png|20px|class=icon-discapacidad|alt=Discapacidad visual total]]
      <li><img src="/images/0/06/Motriz.png" alt="Icono discapacidad motriz" class="icono-discapacidad" /> Personas con discapacidad motriz – <span class="gravedad">Barrera grave</span></li>
  <span class="discapacidad-texto">[[:Categoría:Discapacidad visual total|Visual total]]</span>
      <li><img src="/images/4/40/Cognitiva.png" alt="Icono discapacidad cognitiva" class="icono-discapacidad" /> Personas con discapacidad cognitiva – <span class="gravedad">Barrera grave</span></li>
  <span class="gravedad gravedad-grave">Barrera grave</span>
    </ul>
</li>
  </section>
<li class="discapacidad-item">
</article>
  [[Archivo:Bajavision.png|20px|class=icon-discapacidad|alt=Baja visión]]
</html>
  <span class="discapacidad-texto">[[:Categoría:Discapacidad baja visión|Baja visión]]</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>
</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=
[[Categoría:Discapacidad motriz]]
[[Categoría:Discapacidad visual total]]
[[Categoría:Discapacidad baja visión]]
[[Categoría:Discapacidad cognitiva]]
[[Categoría:Discapacidad auditiva]]
 
|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.
 
|wcag_descripcion_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.
 
|wcag_objetivo=
Asegurar que los usuarios que navegan con teclado y tecnologías de apoyo puedan mantener el contexto cuando el contenido cambia dinámicamente.
 
|wcag_importancia=
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.
 
|wcag_referencias=
<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>[https://www.w3.org/TR/wai-aria-practices/#kbd_general ARIA Authoring Practices — Keyboard Interaction]</li>
<li>[https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden MDN — aria-hidden]</li>
</ul>
 
|wcag_recursos=
<ul>
<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_pasos_evaluacion=
<ol class="paso-list">
<li>Identificar componentes dinámicos (modales, menús, tabs, sliders, alertas).</li>
<li>Navegar con teclado y comprobar orden lógico tras la interacción.</li>
<li>Verificar que el foco no llega a elementos ocultos o fuera de contexto.</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>
</ol>
 
|wcag_resultado_evaluacion=
El foco permanece en contenido visible, sigue orden lógico y respeta la interacción dinámica sin exponer elementos ocultos.
 
|wcag_ejemplo_evaluacion=
<div class="accessibility-card">
<strong>✅ Correcto: menú con foco gestionado</strong>
<pre class="wcag-codigo-html">
<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>
</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>
</div>
 
|wcag_otras_herramientas_evaluacion=
<ul>
<li>Pruebas manuales con teclado</li>
<li>Axe DevTools, Accessibility Insights</li>
<li>NVDA, JAWS, VoiceOver</li>
<li>Inspección DOM para elementos ocultos accesibles</li>
</ul>
}}

Revisión del 11:49 5 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 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...