Addaw, ir a inicio Donar

Fallo común WCAG 2.2

F98Controles que solo funcionan con el dedo si hay pantalla táctil

Nombre oficial en el W3C: Fallo del criterio de conformidad 2.5.6 debido a que los controles interactivos solo pueden manejarse con el método de entrada táctil cuando se detecta una pantalla táctil

En pocas palabras

Este error ocurre cuando la web detecta una pantalla táctil y, por eso, solo responde al tacto. Quita los botones para el ratón o deja de escuchar el teclado. Pero muchos equipos táctiles también tienen ratón, teclado u otros productos de apoyo. La web debe funcionar con todos ellos a la vez.

Por qué es importante

Un portátil con pantalla táctil, una tableta con teclado o un móvil con un ratón por Bluetooth tienen varias formas de uso. Muchas personas con discapacidad prefieren el teclado, un ratón adaptado o un conmutador.

Si la web decide que «es un dispositivo táctil» y quita las flechas de un carrusel o solo atiende a eventos táctiles, esas personas se quedan sin poder usarla. Muchas veces el equipo de desarrollo ni lo nota, porque prueba con el ratón en un ordenador sin pantalla táctil.

Cómo evitarlo

  1. No dé por hecho que una pantalla táctil significa que solo se usará el dedo.
  2. Use eventos que sirven para todo: click o los eventos de puntero (pointerdown, pointerup), además de los de teclado.
  3. Si usa eventos táctiles (touchstart), manténgalos junto a los de ratón y teclado, no en su lugar.
  4. No oculte botones como «Anterior», «Siguiente» o «Cerrar» al detectar una pantalla táctil.
  5. Mantenga el manejo con teclado de los componentes, como las pestañas, también en equipos táctiles.

Cómo comprobarlo

  1. Use un equipo con pantalla táctil y conecte un ratón y un teclado. Una tableta con teclado o un portátil táctil sirven.
  2. Compruebe que puede usar todos los controles con el ratón y con el teclado, no solo con el dedo.
  3. Compare con un equipo sin pantalla táctil: los botones y controles visibles deben ser los mismos.
  4. En el código, busque comprobaciones como 'ontouchstart' in window y revise qué se quita en ese caso.

Ejemplo

El primer código deja sin respuesta al ratón y al teclado en equipos táctiles; el segundo funciona con todo.

// Incorrecto: con pantalla táctil, solo responde al dedo
if ('ontouchstart' in window) {
  boton.addEventListener('touchend', abrirMenu);
} else {
  boton.addEventListener('click', abrirMenu);
}

// Correcto: click funciona con dedo, ratón y teclado
boton.addEventListener('click', abrirMenu);
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 F98 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 que incluyen controles interactivos (como enlaces, campos de formulario o componentes personalizados complejos) y que pueden detectar la presencia de distintas modalidades de entrada.

Descripción

El objetivo de este fallo es describir las situaciones en las que los usuarios de dispositivos con pantalla táctil no pueden usar otras modalidades de entrada de las que disponen (como un ratón o un teclado adicionales o externos).

Existen varios métodos y heurísticas para que el contenido web determine si el dispositivo del usuario tiene pantalla táctil. Sin embargo, incluso cuando hay una pantalla táctil, los usuarios pueden disponer de otras modalidades de entrada. No tiene por qué ocurrir que el usuario vaya a interactuar con el contenido web (en exclusiva, o siquiera en absoluto) mediante la pantalla táctil.

Si, al detectarse una pantalla táctil, el contenido web está diseñado para manejarse exclusivamente mediante el tacto, estos usuarios no podrán manejar el contenido con sus otros mecanismos de entrada (posiblemente los que prefieren).

Ejemplos

Usar únicamente escuchadores de eventos JavaScript específicos del tacto cuando se detecta una pantalla táctil

Este tipo de planteamientos ha sido tradicionalmente popular en el desarrollo específico para «móviles», con el fin de que las interacciones con la pantalla táctil sean más inmediatas y rápidas de respuesta (debido a que las interacciones táctiles solían añadir un retardo de aproximadamente 300 ms entre la interacción de «toque» y el disparo del evento genérico click).


/* inferring the presence of a touchscreen based on
   support for the Touch Events API */
if (window.TouchEvent || ('ontouchstart' in window)) {
  /* set up event listeners for touch */
  target.addEventListener('touchend', ...);
  ...
}
else {
  /* set up event listeners for mouse/keyboard */
  target.addEventListener('click', ...);
  ...
}

/* inferring the presence of a touchscreen based on
   the CSS Media Queries 4 Interaction Media Features
   match for a "coarse" primary input mechanism */
if (window.matchMedia && window.matchMedia("(pointer:coarse)").matches) {
  /* set up event listeners for touch */
  target.addEventListener('touchend', ...);
  ...
}
else {
  /* set up event listeners for mouse/keyboard */
  target.addEventListener('click', ...);
  ...
}

De forma similar, el contenido web que omite escuchadores de eventos de teclado pertinentes o necesarios (por ejemplo, para la interacción correcta con el teclado en un componente complejo, como una interfaz de pestañas) cuando se detecta una pantalla táctil, bajo la suposición de que en un dispositivo táctil no hará falta la compatibilidad con el teclado.


/* inferring the presence of a touchscreen based on
   the navigator.maxTouchPoints property defined in
   the Pointer Events API */
if (window.PointerEvent && ('maxTouchPoints' in navigator) &&
    (navigator.maxTouchPoints > 0)) {
	/* no need to listen to keyboard - there's a touchscreen... */
	...
}
else {
	/* set up event listeners for keyboard interactions */
  target.addEventListener('keyup', ...);
  ...
}

Por lo general, estos planteamientos provocarán también un fallo del criterio de conformidad 2.1.1 Teclado, pero solo en las situaciones en las que además se haya detectado una interfaz de pantalla táctil.

Ocultar u omitir los controles para usuarios de ratón y teclado cuando se detecta una pantalla táctil

Contenido web que contiene componentes interactivos, como carruseles de contenido, con botones visibles para manejar el componente (como botones de anterior y siguiente, o una barra de desplazamiento o un control deslizante visibles). Estos controles visibles se ocultan u omiten cuando se detecta una pantalla táctil, bajo la suposición de que los usuarios simplemente usarán gestos táctiles para manejar los componentes, y no se ofrece entonces ninguna otra alternativa para los usuarios de teclado o ratón.

/* using CSS Media Queries 4 Interaction Media Features
   to hide particular elements in the page (such as a container
   with visible controls) when a "coarse" primary input is present */
@media (pointer: coarse) {
  #widget .controls { display: none; }
}

Según la implementación concreta, los autores pueden permitir interacciones con el ratón en los componentes que reproduzcan los gestos táctiles; por ejemplo, permitir que los usuarios de ratón también arrastren o deslicen los carruseles, en lugar de depender únicamente de controles de anterior y siguiente en los que hacer clic o de barras de desplazamiento. En esos casos, ocultar los controles cuando se detecta una pantalla táctil seguirá permitiendo a los usuarios manejar el componente con el ratón (a menos que esta interacción también se haya suprimido u omitido al detectar la pantalla táctil, como en el ejemplo anterior). Sin embargo, si los únicos controles del componente que podían manejarse con el teclado se han ocultado y no se ha ofrecido ninguna alternativa para los usuarios de teclado (como permitir el manejo con las teclas de cursor), esta situación seguiría fallando el criterio de conformidad 2.5.6.

Por lo general, estos planteamientos provocarán también un fallo del criterio de conformidad 2.1.1 Teclado y (según el gesto táctil que se espere que realice el usuario) del criterio de conformidad 2.5.1 Gestos del puntero.

Pruebas

Procedimiento

  1. Abrir el contenido en un dispositivo con pantalla táctil y al menos una modalidad de entrada adicional; esto incluye portátiles con pantalla táctil y dispositivos táctiles (teléfonos inteligentes o tabletas) con un teclado y un ratón externos emparejados.
  2. Comprobar que todos los controles interactivos pueden manejarse no solo con la pantalla táctil, sino también con los mecanismos de entrada adicionales (teclado y ratón).
  3. Si la presencia de la pantalla táctil ha hecho que no se muestren controles interactivos (en comparación con el mismo contenido visto en un dispositivo sin pantalla táctil), comprobar que existen controles o vías alternativos para que los usuarios de otros mecanismos de entrada adicionales puedan manejar el contenido.

Resultados esperados

  • Si la comprobación n.º 2 o la n.º 3 es falsa, el contenido falla el 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.

Solicitar una auditoría

Basado en la técnica F98 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.