Fallo común WCAG 2.2
F85Diálogos y menús que se abren lejos del foco del teclado
Nombre oficial en el W3C: Fallo del criterio de conformidad 2.4.3 debido a usar diálogos o menús que no están junto a su control de activación en el orden de navegación secuencial
En pocas palabras
Este fallo ocurre cuando un botón abre una ventana de diálogo o un menú, pero el foco del teclado no va a él. La persona tiene que recorrer toda la página con el tabulador para llegar. También es fallo que, al cerrarlo, el foco salte al principio de la página en lugar de volver al botón.
Por qué es importante
El foco es el punto de la página que recibe lo que se pulsa en el teclado. Quien navega con teclado lo mueve elemento a elemento, en el orden del código. Si el diálogo está al final del código y el foco se queda en el botón, tiene que pasar por todos los enlaces que hay en medio.
Con un lector de pantalla, puede que ni se entere de que se ha abierto algo. Y si al cerrar el foco vuelve al inicio, pierde el sitio y tiene que buscar otra vez dónde estaba. En un formulario largo o en una tienda en línea, esto agota a cualquiera.
Cómo evitarlo
- Al abrir un diálogo, mueva el foco a su primer elemento útil, o al propio diálogo, con
focus(). - Use el elemento
dialogabierto conshowModal(). El navegador lleva el foco dentro sin código extra. - En los menús desplegables, coloque el menú en el código justo después de su botón. Así la siguiente pulsación de Tab entra en él.
- Al cerrar con «Cancelar», con la X o con Esc, devuelva el foco al botón que lo abrió.
- Si ese botón ya no existe, por ejemplo tras borrar un elemento, lleve el foco a un sitio lógico: el elemento siguiente o el anterior.
Cómo comprobarlo
- Abra cada diálogo y cada menú con el teclado (Intro o Espacio).
- Compruebe que el foco está dentro, o que entra con una sola pulsación de Tab.
- Ciérrelo con su botón o con Esc. Pruebe también una acción que lo cierre, como «Eliminar».
- Compruebe que el foco vuelve al botón que lo abrió, o a un elemento lógico cercano si ese botón ha desaparecido.
- Si el foco se pierde o vuelve al principio de la página, hay fallo.
Ejemplo
Diálogo de filtros que recibe el foco al abrirse y lo devuelve a su botón al cerrarse.
const boton = document.querySelector('#abrir-filtros');
const dialogo = document.querySelector('#filtros');
boton.addEventListener('click', () => {
dialogo.showModal(); // el foco entra en el diálogo
});
dialogo.addEventListener('close', () => {
boton.focus(); // al cerrar, vuelve al botón
});
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 F85 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
Todas las tecnologías.
Descripción
Este documento describe la condición de fallo que se produce cuando una página web abre un componente de interfaz de tipo diálogo o menú incrustado en la página de tal forma que resulta difícil de manejar para un usuario de teclado debido a su posición en el orden de navegación secuencial. Cuando el usuario abre el diálogo o el menú incrustado en la página activando un botón o un enlace, su siguiente acción será interactuar con ese diálogo o menú. Si el foco no se sitúa en el diálogo o el menú, o en un descendiente enfocable lógico de estos componentes, y el componente o uno de sus descendientes enfocables no es el siguiente en el orden de navegación secuencial, al usuario de teclado le resultará difícil manejar el diálogo o el menú.
Descartar un diálogo o un menú significa cerrarlo sin realizar ninguna acción en él. Por ejemplo: se abre un diálogo modal en una página web que muestra un formulario de suscripción a una lista de correo. El usuario descarta el diálogo pulsando un botón de «cerrar» o usando la tecla Escape.
A veces no es posible devolver el foco al control que el usuario activó para abrir un diálogo. Por ejemplo: una entrada de blog tiene una lista de etiquetas y cada etiqueta contiene un botón de eliminar. Al pulsar un botón de eliminar se abre un diálogo modal que pide al usuario que confirme la eliminación. Al confirmarla, la etiqueta se elimina, el diálogo modal se cierra y el foco se sitúa en la siguiente etiqueta de la lista. Situar el foco en un control distinto, pero lógico, no constituye un fallo del criterio de conformidad 2.4.3.
Ejemplos
Añadir un diálogo a la página al final del orden de navegación secuencial
Se crea un diálogo HTML no nativo, marcado al final del DOM (Document Object Model, modelo de objetos del documento). Se ha programado un script para mostrar el diálogo, pero no se ha añadido ningún script que mueva el foco hasta él. El diálogo se posiciona visualmente sobre el contenido de la página y el foco del usuario no se desplaza al diálogo. Como el diálogo se encuentra al final del DOM, está al final del orden de navegación con teclado. Puesto que no se gestiona el foco del usuario ni se proporciona un mecanismo de teclado que le permita desplazarse de inmediato al diálogo que acaba de abrir, el usuario tendrá que recorrer con el tabulador el resto de la página web antes de poder interactuar con el diálogo.
Situar el foco en el documento tras descartar un menú incrustado en la página
Cuando se descarta un menú, este se elimina o se oculta de la página web y el foco se sitúa en el documento. El usuario tiene que tabular desde el principio de la secuencia de navegación para llegar al punto desde el que se abrió el menú.
Pruebas
Procedimiento
Para cada menú o diálogo de una página web que se abre mediante un control de activación:
-
Activar el control de activación mediante el teclado.
- Comprobar si el foco se ha situado en el menú, en el diálogo o en un descendiente enfocable lógico del componente.
- Si no es así, comprobar si al avanzar el foco una posición en el orden de navegación secuencial este se sitúa en el menú o el diálogo.
-
Activar un control del menú o del diálogo que provoque su cierre. Puede ser un botón de cancelar o de eliminar, o cualquier otra acción que provoque cambios en la página y al mismo tiempo cierre el menú o el diálogo.
- Comprobar si el foco del teclado vuelve al control de activación.
- Si el propio control de activación se ha eliminado como resultado de la activación, comprobar si el foco se ha situado en el elemento interactivo inmediatamente anterior o posterior al control de activación eliminado, o en el lugar que resulte lógico.
Resultados esperados
- Si los dos puntos del paso 1 son falsos, se da esta condición de fallo y el contenido falla este criterio de conformidad.
- Si los dos puntos del paso 2 son falsos, se da esta condición de fallo y el contenido falla este criterio de conformidad.
Cómo lo comprobamos en ADDAW
Este error es uno de los que buscamos en cada auditoría de ADDAW. Se lo entregamos con capturas y la forma de corregirlo.
Basado en la técnica F85 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.