Addaw, ir a inicio Donar

Fallo común Fallos comunes WCAG 2.2

F55Fallo de los criterios de conformidad 2.1.1, 2.4.7, 2.4.13 y 3.2.1 debido a usar scripts para quitar el foco cuando se recibe

En resumen

Algunos desarrollos llaman a blur() en el evento onfocus para que no se vea el recuadro del foco, porque les parece poco estético. El resultado es que el elemento nunca conserva el foco y solo puede manejarse con el ratón, lo que deja fuera a quienes navegan con teclado y rompe además el indicador visible del foco. Si no gusta el estilo del foco, debe personalizarse con CSS, nunca eliminarse.

Ejemplo práctico

Aparece en botones de herramientas, carruseles y menús en los que, para que no se vea el contorno del foco, un script llama a blur() en cuanto el control recibe el foco.

Así no: Botones que pierden el foco al recibirlo

Cada botón ejecuta this.blur() en el evento focus. Con el ratón funcionan, pero al llegar con Tab el foco desaparece de inmediato: no se ve dónde está y Intro o Espacio no activan nada. Con NVDA en modo exploración puede parecer que funciona; hay que probarlo con Tab.

<style>
  .herramientas button { background: #744E9A; color: #FFFFFF; border: 0; padding: 8px 12px; border-radius: 4px; font-size: 1rem; cursor: pointer; }
</style>
<div class="herramientas">
  <button type="button" onfocus="this.blur()" onclick="cambiar(-2)">Reducir texto</button>
  <button type="button" onfocus="this.blur()" onclick="cambiar(2)">Ampliar texto</button>
</div>
<p id="texto" style="font-size: 16px">El plazo de inscripción en las escuelas deportivas municipales termina el 30 de octubre.</p>
<script>
  function cambiar(px) {
    const p = document.getElementById('texto');
    const nuevo = parseInt(p.style.fontSize, 10) + px;
    p.style.fontSize = Math.min(26, Math.max(12, nuevo)) + 'px';
  }
</script>
Captura de pantalla del ejemplo incorrecto: Botones que pierden el foco al recibirlo
Así se ve el ejemplo incorrecto.

La demostración contiene, a propósito, el error de accesibilidad que se explica.

Así sí: Botones que conservan el foco con un indicador propio

Se elimina el onfocus="this.blur()" y, si el contorno predeterminado no encaja con el diseño, se sustituye por uno propio con :focus-visible, que solo aparece al navegar con teclado. El foco permanece en el botón hasta que el usuario lo mueve.

<style>
  .herramientas button { background: #744E9A; color: #FFFFFF; border: 0; padding: 8px 12px; border-radius: 4px; font-size: 1rem; cursor: pointer; }
  .herramientas button:focus-visible { outline: 3px solid #0B2239; outline-offset: 2px; }
</style>
<div class="herramientas">
  <button type="button" onclick="cambiar(-2)">Reducir texto</button>
  <button type="button" onclick="cambiar(2)">Ampliar texto</button>
</div>
<p id="texto" style="font-size: 16px">El plazo de inscripción en las escuelas deportivas municipales termina el 30 de octubre.</p>
<script>
  function cambiar(px) {
    const p = document.getElementById('texto');
    const nuevo = parseInt(p.style.fontSize, 10) + px;
    p.style.fontSize = Math.min(26, Math.max(12, nuevo)) + 'px';
  }
</script>

Pruébelo aquí:

Cómo comprobarlo

Teclado

  1. Recorrer todos los elementos interactivos con Tab y Mayús+Tab.
  2. Al llegar a cada uno, esperar un momento sin tocar nada y comprobar que el foco sigue en él.
  3. Pulsar Intro o Espacio y comprobar que el control se activa.

Lector de pantalla (NVDA o VoiceOver)

  1. Navegar con Tab (no con las flechas del modo exploración) hasta cada botón.
  2. Comprobar que el lector anuncia el control y no se queda en silencio o vuelve a leer el documento.

Debería anunciar: «Ampliar texto, botón»

Herramientas del navegador

  1. Abrir las herramientas de desarrollo (F12) y, en la Consola, crear una expresión en vivo (icono del ojo) con document.activeElement.
  2. Navegar con Tab y comprobar que la expresión muestra el botón y no body.
  3. En Elementos > Escuchadores de eventos, buscar manejadores de focus o focusin que llamen a blur().

Validación automática

  1. axe DevTools, WAVE y Lighthouse no detectan este fallo, porque depende de lo que hace el script en tiempo de ejecución.
  2. Como apoyo, buscar en el código fuente blur() dentro de manejadores de focus, mousedown o click.

Errores frecuentes en auditorías

  • Usar onfocus="this.blur()" en los enlaces de carruseles o pestañas para ocultar el contorno del foco.
  • Llamar a blur() después de cada clic para quitar el contorno: con teclado, el foco vuelve al inicio del documento tras activar el botón.
  • Campos de solo lectura o de fecha que ejecutan blur() al recibir el foco para evitar el teclado del móvil, lo que impide llegar a ellos con Tab.
  • Scripts de menús desplegables que mueven el foco a otro elemento en cuanto un enlace lo recibe.

Técnica completa: traducción al español del texto del W3C

Aplicabilidad

Se aplica a todo el contenido que admite scripts.

Notas sobre la compatibilidad con agentes de usuario y tecnologías de asistencia

  • No se indica ninguna.

Descripción

El contenido que normalmente recibe el foco cuando se accede a él con el teclado puede perderlo por la acción de un script. Esto se hace a veces cuando quien diseña considera que el indicador del foco del sistema resulta poco estético. Sin embargo, el indicador del foco del sistema es una parte importante de la accesibilidad para quienes usan el teclado. Además, esta práctica quita el foco del contenido por completo, lo que significa que el contenido solo puede manejarse con un dispositivo apuntador como el ratón.

Ejemplos

<input type="submit" onFocus="this.blur();">
<a onFocus="this.blur()" href="Page.html"><img src="myImage.gif"></a>
<a href="link.html" onfocus="if(this.blur)this.blur();">Link Phrase</a>

Pruebas

Procedimiento

  1. Usar el teclado para verificar que se puede llegar a todos los elementos interactivos mediante el teclado.
  2. Comprobar que, cuando el foco se sitúa en cada elemento, el foco permanece ahí hasta que el usuario lo mueve.

Resultados esperados

  • Si la comprobación n.º 2 es falsa, se da esta condición de fallo y el contenido falla el criterio de conformidad.

Cómo lo comprobamos en ADDAW

Este fallo es uno de los que buscamos en cada auditoría de accesibilidad de ADDAW: lo documentamos con capturas y el código afectado, indicamos el criterio que incumple y la técnica suficiente con la que se corrige. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica F55 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital