Addaw, ir a inicio Donar

Técnica Scripts de cliente WCAG 2.2

SCR28Permitir plegar los menús que se repiten en cada página

Nombre oficial en el W3C: Usar un menú expandible y contraíble para evitar bloques de contenido

En pocas palabras

Los menús largos que se repiten en todas las páginas pueden llevar un botón para plegarlos y desplegarlos. Al plegarlos, sus enlaces dejan de recibir el foco y el lector de pantalla no los lee. Así la persona se salta ese bloque y llega antes al contenido principal.

Por qué es importante

Quien navega con teclado tiene que pulsar Tab en cada enlace del menú antes de llegar al contenido. En un menú de 40 enlaces, eso le ocurre en cada página que visita.

El lector de pantalla (programa que lee en voz alta lo que hay en la pantalla) también lee el mismo menú una y otra vez. Un menú plegable permite saltarlo con una sola pulsación.

Cómo se hace

  1. Ponga un botón (<button>) justo antes del bloque repetido, con un texto claro como «Índice de la guía».
  2. Indique su estado con aria-expanded="true" o "false". Relacione el botón con el bloque mediante aria-controls.
  3. Al plegar, oculte el bloque de verdad con el atributo hidden o con display: none. Así sus enlaces no reciben el foco ni se leen.
  4. Al desplegar, el contenido debe aparecer justo después del botón, en un orden de lectura lógico.
  5. Valore recordar la preferencia de la persona entre páginas, por ejemplo con localStorage.
  6. Esta técnica se puede combinar con un enlace «Saltar al contenido principal».

Cómo comprobarlo

  1. Busque el control que pliega y despliega el bloque repetido. Debe alcanzarse con Tab y activarse con Intro o Espacio.
  2. Pliegue el bloque y pulse Tab. El foco no debe pasar por ninguno de sus enlaces.
  3. Con un lector de pantalla, compruebe que el bloque plegado no se lee y que el botón se anuncia como «contraído».
  4. Despliegue el bloque y compruebe que sus enlaces aparecen justo después del botón.

Ejemplo

Índice de una guía que se repite en cada página y se pliega con un botón.

<button type="button" aria-expanded="true" aria-controls="indice">
  Índice de la guía
</button>
<ul id="indice">
  <li><a href="/guia/requisitos">Requisitos</a></li>
  <li><a href="/guia/plazos">Plazos</a></li>
</ul>
<script>
var boton = document.querySelector('[aria-controls="indice"]');
boton.addEventListener('click', function () {
  var abierto = boton.getAttribute('aria-expanded') === 'true';
  boton.setAttribute('aria-expanded', String(!abierto));
  document.getElementById('indice').hidden = abierto;
});
</script>
Ver el texto completo del W3C (traducción al español)

Esta es una traducción no oficial al español de la técnica SCR28 de Techniques for WCAG 2.2, del W3C. Puede contener errores. El único documento oficial y normativo es la versión original en inglés, publicada en el sitio web del W3C.

Aplicabilidad

Tecnologías que proporcionan scripts en el lado del cliente.

Descripción

Esta técnica permite a los usuarios saltarse el material repetido colocándolo en un menú que puede expandirse o contraerse bajo el control del usuario. El usuario puede saltarse el material repetido contrayendo el menú. El usuario acciona un control de la interfaz de usuario para ocultar o eliminar los elementos del menú. La sección de recursos enumera varias técnicas para menús, barras de herramientas y árboles, cualquiera de las cuales puede usarse para proporcionar un mecanismo que permita saltar la navegación.

Pueden implementarse enfoques similares usando scripts en el lado del servidor y recargando una versión modificada de la página web.

Ejemplos

Mostrar y ocultar un índice de contenidos

El índice de contenidos de un conjunto de páginas web se repite cerca del principio de cada página web. Un botón situado al principio del índice permite al usuario eliminarlo de la página o restaurarlo.

...
<script>
let tocToggle = document.querySelector(".toc-toggle");
let toc = document.querySelector("#toc");
tocToggle.addEventListener("click", toggle, false);
function toggle(e){
  let elm = e.currentTarget;
  if(elm.getAttribute("aria-expanded") === "false"){
    elm.setAttribute("aria-expanded", "true");
  }
  else{
    elm.setAttribute("aria-expanded", "false");
  }
}
</script>
...
<button aria-controls="toc" aria-expanded="true" class="toc-toggle" type="button">
  Toggle Table Of Contents
</button>
<nav aria-labelledby="toc-header" id="toc">
  <h2 id="toc-header">Table of Contents</h2>
  <ul>
    <li><a href="#sec1">Section 1</a></li>
    <li><a href="#sec2">Section 2</a></li>
    <li><a href="#sec3">Section 3</a></li>
    <li><a href="#sec4">Section 4</a></li>
  </ul>
</nav>
...

Ejemplo práctico de este código: Mostrar y ocultar un índice de contenidos con un botón.

Pruebas

Procedimiento

  1. Comprobar que algún control de la interfaz de usuario permite expandir o contraer el contenido repetido.
  2. Comprobar que, cuando el contenido está expandido, se incluye en el contenido determinable por software en un lugar lógico del orden de lectura.
  3. Comprobar que, cuando el contenido está contraído, no forma parte del contenido determinable por software.

Resultados esperados

  • Todas las comprobaciones anteriores son verdaderas.

Recursos

Cómo lo comprobamos en ADDAW

En cada auditoría de ADDAW revisamos esta técnica página a página y le entregamos los errores con capturas y la forma de corregirlos.

Solicitar una auditoría

Basado en la técnica SCR28 del W3C (WCAG 2.2). Explicación y ejemplos: ADDAW. Traducción no oficial del texto del W3C © W3C, licencia de documentos del W3C. ¿Ha visto un error? Escríbanos.