Técnica Scripts de cliente WCAG 2.2
SCR31Resaltar con JavaScript el elemento que tiene el foco
Nombre oficial en el W3C: Usar scripts para cambiar el color de fondo o el borde del elemento que tiene el foco
En pocas palabras
El foco es la marca que indica qué elemento está activo al navegar con teclado. Esta técnica usa JavaScript para cambiar el fondo o el borde de enlaces, botones y campos cuando reciben el foco, y lo quita cuando lo pierden. Así el indicador se ve mucho mejor. Hoy suele bastar con CSS, usando :focus o :focus-visible.
Por qué es importante
Quien navega con teclado necesita ver en todo momento dónde está. El contorno que pone el navegador por defecto a veces es fino, gris o casi invisible sobre ciertos fondos.
Sin un foco visible, la persona no sabe qué enlace se activará al pulsar Intro. Es como usar el ratón sin ver el puntero.
Cómo se hace
- Escuche los eventos
focusinyfocusout(ofocusybluren cada elemento). - Cuando un elemento reciba el foco, añádale una clase que cambie el fondo, el borde o el contorno con buen contraste.
- Cuando lo pierda, quite la clase para que recupere su aspecto habitual.
- Aplíquelo a todos los elementos interactivos: enlaces, botones, campos y controles personalizados.
- Hoy lo más sencillo es hacerlo solo con CSS, por ejemplo
a:focus-visible { outline: 3px solid #000; }. Use el script cuando necesite más control.
Cómo comprobarlo
- Recorra toda la página con la tecla Tab, de principio a fin.
- En cada parada, compruebe que se ve con claridad qué elemento tiene el foco.
- Pulse Mayús + Tab para retroceder. El resaltado debe desaparecer del elemento que pierde el foco.
- Revíselo sobre fondos claros y oscuros, como la cabecera o el pie de página.
Ejemplo
Fondo amarillo y contorno negro en cualquier elemento que recibe el foco.
<style>
.con-foco { background: #ffd200; outline: 2px solid #000; }
</style>
<script>
document.addEventListener('focusin', function (e) {
e.target.classList.add('con-foco');
});
document.addEventListener('focusout', function (e) {
e.target.classList.remove('con-foco');
});
</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 SCR31 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
HTML, CSS, scripts
Descripción
El propósito de esta técnica es permitir que el autor utilice JavaScript para aplicar CSS, con el fin de hacer el indicador del foco más visible de lo que sería normalmente. Cuando un elemento recibe el foco, se cambia su color de fondo o su borde para distinguirlo visualmente. Cuando el elemento pierde el foco, recupera su estilo habitual. Esta técnica puede usarse en cualquier agente de usuario HTML compatible con scripts y CSS, independientemente de que admita o no la pseudoclase :focus.
Ejemplos
En este ejemplo, cuando el enlace recibe el foco, su fondo se vuelve amarillo. Cuando pierde el foco, se elimina el amarillo. Tenga en cuenta que, si el enlace tuviera un color de fondo de partida, en el script se usaría ese color en lugar de "".
<script>function toggleFocus(el) {
el.style.backgroundColor = el.style.backgroundColor=="yellow" ? "inherit" : "yellow";
}
</script>
...
<a href="example.html"
onfocus="toggleFocus(this)" onblur="toggleFocus(this)">focus me</a>
...
Pruebas
Procedimiento
- Recorrer con la tecla de tabulación cada elemento de la página.
- Comprobar que el indicador del foco es visible.
Resultados esperados
- La comprobación n.º 2 es verdadera.
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.
Basado en la técnica SCR31 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.