Los artículos sin foco
Hace un tiempo estuve enredado con una web donde teníamos una serie de artículos al que el usuario podía acceder mediante enlaces, típico de las webs de noticias. La idea era que el artículo hiciera su aparición estelar tipo SPA, sin que cambiase la URL ni el título de la página (otro fallo de accesibilidad, quedarse con el título de la página principal en toda la app).
A alguien se le encendió la lucecita y en producción, al hacer la auditoría, me topé con algo así:
<a onclick="showArticle(id)" title="noticia de última hora">noticia de última hora</a>
Pero aquí está el problema del plan, los enlaces eran como fantasmas de teclado: cualquier enlace que no tenga atributo href
, pierde el foco del teclado y su funcionalidad con la tecla Enter. Es decir, si el usuario va tabulando, se saltaba la sección entera de noticias. Además, cuando se trata de webs con contenido similar, por ejemplo una secuencia de artículos, se suele envolver cada enlace a contenido con un encabezado para que la navegación sea más fluida.
Pero espera... No quiero poner href, qué hago?
- Añade el atributo
tabindex
a los enlaces para que puedan recibir enfoque y maneja el eventoEnter
utilizando JavaScript. - Convierte el enlace en un botón utilizando el elemento
button
con el rol adecuado (link
otab
) según el contexto de la página.
Es también importante que el usuario se entere de que se ha cargado el artículo. En esa web en particular, el artículo aparecía arriba del todo de la página sin enfocarse. Eso significa que cualquier usuario sin visión que utilice lector de pantalla, ni se va a dar cuenta de que ha aparecido el artículo por arte de magia. Para evitar eso, asigna tabindex -1 al encabezado del artículo (sí, hay que meter un encabezado también!) y llama a la función focus() una vez esté cargado. de esta manera, le ahorras al usuario tener que desplazarse arriba a la vez que le indicas que el artículo se ha cargado.
Conclusión
Si vas a hacer un enlace, haz un enlace. Esto significa que es esencial respetar la semántica y las funcionalidades nativas de HTML para asegurar una experiencia accesible y optimizada para todos los usuarios. No me vale que uses un enlace por el truquito visual y que luego no le des la funcionalidad que merece.