Addaw, ir a inicio Donar

Técnica CSS WCAG 2.2

C45Usar la pseudoclase CSS :focus-visible para indicar el foco del teclado

En resumen

Esta técnica consiste en definir estilos de foco propios con la pseudoclase :focus-visible, que los navegadores aplican cuando se navega con el teclado pero no, en general, al pulsar con el ratón. Permite ofrecer un indicador del foco muy visible a quienes usan el teclado sin molestar a quienes usan el puntero. Es suficiente solo si los estilos elegidos hacen realmente visible el foco.

Ejemplo práctico

Es habitual que diseño pida quitar el anillo de foco porque «aparece al hacer clic» en los botones de una ficha de producto. La pseudoclase :focus-visible permite mostrar un indicador claro a quien navega con teclado sin mostrarlo con cada clic del ratón.

Así no: Se elimina el contorno con :focus

La regla .btn:focus { outline: none; } quita el indicador en todos los casos, también al navegar con Tab: no se sabe qué botón tiene el foco. Para notarlo, pulse Tab dentro del ejemplo.

<style>
  .btn { font: inherit; padding: 10px 18px; margin-right: 8px; border: 0; border-radius: 6px; background: #744E9A; color: #fff; cursor: pointer; }
  .btn:focus { outline: none; }
</style>
<h2>Zapatillas de montaña Sierra</h2>
<p>89,90 € · Envío gratuito</p>
<button type="button" class="btn">Añadir a la cesta</button>
<button type="button" class="btn">Guardar en favoritos</button>
Captura de pantalla del ejemplo incorrecto: Se elimina el contorno con :focus
Así se ve el ejemplo incorrecto.

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

Así sí: Indicador marcado con :focus-visible

Se sustituye la regla por .btn:focus-visible con un contorno de 3 px en #0B2239 separado del botón, con contraste alto frente al fondo blanco. Al pulsar Tab se ve claramente el botón con el foco; al hacer clic con el ratón, el navegador normalmente no lo muestra.

<style>
  .btn { font: inherit; padding: 10px 18px; margin-right: 8px; border: 0; border-radius: 6px; background: #744E9A; color: #fff; cursor: pointer; }
  .btn:focus-visible { outline: 3px solid #0B2239; outline-offset: 3px; }
</style>
<h2>Zapatillas de montaña Sierra</h2>
<p>89,90 € · Envío gratuito</p>
<button type="button" class="btn">Añadir a la cesta</button>
<button type="button" class="btn">Guardar en favoritos</button>

Pruébelo aquí:

Cómo comprobarlo

Teclado

  1. Recorrer la página con Tab y Mayús+Tab sin usar el ratón.
  2. Comprobar que cada enlace, botón y campo muestra un indicador del foco visible y fácil de distinguir del estado normal y del estado «hover».
  3. Hacer clic con el ratón en un botón y, a continuación, pulsar Tab: el indicador debe aparecer en cuanto se usa el teclado.

Herramientas del navegador

  1. Abrir las herramientas de desarrollo (F12), seleccionar el botón y, en la pestaña Estilos, usar «:hov» para forzar los estados :focus y :focus-visible.
  2. Comprobar que existe una regla con estilos visibles para :focus-visible (o para :focus) y que ninguna otra regla posterior aplica outline: none sin alternativa.
  3. Buscar en las hojas de estilo outline: none u outline: 0 y revisar cada caso.

Validación automática

  1. axe DevTools, WAVE y Lighthouse no comprueban si el indicador del foco es visible; Lighthouse lo incluye solo como revisión manual.
  2. La comprobación es siempre manual, con teclado.

Errores frecuentes en auditorías

  • Reinicios de CSS o temas que incluyen *:focus { outline: none; } y dejan toda la web sin indicador del foco.
  • Indicadores de foco de 1 px o de un color casi igual al del fondo, que técnicamente existen pero no se distinguen.
  • Definir :focus-visible solo para botones y olvidar enlaces, campos de formulario y componentes personalizados con tabindex.
  • Mostrar el foco solo con un cambio de color del texto, sin contorno ni subrayado, difícil de percibir.

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

Aplicabilidad

Todas las tecnologías que admiten CSS.

Descripción

El objetivo de esta técnica es proporcionar estilos personalizados a los elementos interactivos cuando reciben el foco del teclado. En este ejemplo, esto se consigue mediante la pseudoclase CSS :focus-visible.

Los estilos definidos con la pseudoclase habitual :focus se aplican siempre que un elemento tiene el foco, con independencia de cómo lo haya recibido. En cambio, los agentes de usuario aplican heurísticas y lógica adicionales para decidir cuándo mostrar los estilos de :focus-visible; en particular, los navegadores siempre muestran estos estilos cuando el usuario navega con el teclado, pero por lo general no los muestran como resultado de una interacción con el ratón o el puntero (con la excepción de los elementos que también admiten entrada por teclado, como los elementos <input>). Esto permite a los autores ofrecer una indicación visible del foco muy marcada a los usuarios de teclado, sin imponérsela a los usuarios de ratón o puntero, que quizá no la quieran ni la necesiten (por ejemplo, porque les distrae visualmente).

Esto satisface el requisito de proporcionar un modo de funcionamiento en el que el indicador del foco del teclado sea visible.

Esta técnica solo es suficiente si utiliza estilos que proporcionen un indicador del foco visible.

Puede haber situaciones en las que los usuarios de ratón o puntero también se beneficien de disponer de un indicador del foco visible, aunque no hayan dado el foco a un elemento con el teclado. Aunque no es un requisito normativo, los autores deberían plantearse igualmente proporcionar un estilo :focus explícito para estos casos.

Ejemplos

Usar CSS :focus-visible para indicar el foco del teclado

En este ejemplo tenemos un control <button> estándar en el HTML.

De forma predeterminada, en todos los navegadores modernos, este botón no muestra ninguna indicación del foco cuando se activa con el ratón o el puntero. Los navegadores muestran su contorno o indicación del foco predeterminados cuando el usuario da el foco al botón con Tab.

Para hacer más destacada esta indicación del foco, usamos el selector de pseudoclase :focus-visible para definir un estilo de foco más deliberado y pronunciado.

Ejemplo práctico: Usar CSS :focus-visible para indicar el foco del teclado.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,
              initial-scale=1, shrink-to-fit=no">
  <title>Using CSS :focus-visible to
         provide keyboard focus indication</title>
  <style>
    /* Specific :focus-visible styles */
    :focus-visible {
      outline: 5px solid red;
    }
    …
  </style>
</head>
<body>
  …
  <button>Example button</button>
  …
</body>
</html>

Pruebas

Procedimiento

Para cada componente de la interfaz de usuario que pueda recibir el foco del teclado:

  1. Dar el foco al componente de la interfaz con el teclado (por lo general, navegando hasta el componente con Tab/Shift+Tab).
  2. Comprobar que, una vez que el componente ha recibido el foco, hay un indicador del foco visible.

Resultados esperados

  • La comprobación n.º 2 es verdadera.

Recursos

  1. CSS Selectors Level 4 - :focus-visible pseudo-class (especificación de la pseudoclase).
  2. MDN - :focus-visible pseudo-class (documentación de referencia).

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. 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 C45 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