El selector CSS focus visible es una herramienta funcional que permite a los desarrolladores gestionar la apariencia de los indicadores de foco en los elementos web. Proporciona una forma de mostrar estilos de foco solo cuando un usuario interactúa a través de un teclado u otros dispositivos que no son punteros. Al implementar esto, te aseguras de que se mantengan los estándares de accesibilidad sin saturar la interfaz visual para los usuarios de ratón que no dependen de los estados de foco para la navegación.
¿Cuál es el propósito de Focus Visible?
Según MDN Web Docs, la pseudlase :focus-visible aplica indicadores de foco solo cuando las modalidades de entrada del usuario, como los teclados, indican que es necesario un estilo de enfoque visible. Esta distinción es importante para los diseñadores que desean evitar el anillo de enfoque predeterminado del navegador que aparece incluso cuando un usuario hace clic en un elemento con un ratón. A muchos usuarios les resulta molesto el contorno predeterminado cuando simplemente hacen clic en un sitio, pero los usuarios de teclado lo consideran obligatorio para seguir su progreso a través de elementos interactivos.

Cuando un desarrollador utiliza la pseudoclase estándar :focus, el navegador aplica el estilo para cada método de interacción. Esto a menudo lleva a los diseñadores a eliminar el contorno globalmente usando la regla outline: none, lo que crea una barrera significativa para la accesibilidad. El selector focus-visible resuelve este conflicto actuando como un guardián condicional. Mantiene tu interfaz limpia para los usuarios de ratón al tiempo que garantiza que los usuarios que solo usan el teclado reciban la retroalimentación visual que necesitan para entender dónde están en la página.
¿Por qué deberías usar esto en lugar del foco estándar?
La razón principal para adoptar este selector es equilibrar las opciones estéticas con los requisitos funcionales. Los estilos de foco estándar a menudo chocan con los sistemas de diseño modernos que dependen de estilos personalizados de botones y campos de entrada. Al usar :focus-visible, puedes escribir reglas CSS específicas que definan un indicador claro y de alto contraste para la navegación por teclado mientras dejas las interacciones del ratón intactas. Este enfoque evita el problema del ‘doble foco’ en el que un botón puede mostrar tanto un estado de desplazamiento como un contorno simultáneamente.
Considera el impacto en los usuarios que cambian entre métodos de entrada. Un usuario puede comenzar una tarea usando un trackpad y luego cambiar a atajos de teclado para completar un formulario complejo. Si tu CSS maneja el foco correctamente, la transición entre estos dos modos se sentirá natural y predecible. No estás añadiendo solo una opción estilística; estás proporcionando una guía estructural para los usuarios que dependen de la tecla Tab para moverse por tus páginas web de manera efectiva.

| Tipo de selector | Cuándo se aplica | Caso de uso |
|---|---|---|
| :focus | Cada evento de foco | Amplia retroalimentación visual |
| :focus-visible | Solo cuando la modalidad de entrada lo requiere | Foco de accesibilidad |
| :focus-within | Cuando el elemento hijo está enfocado | Resaltado de contenedores principales |
¿Cómo aplica Alien Road Focus Visible?
En Alien Road, integramos el selector focus-visible en nuestra biblioteca de componentes estándar para garantizar que cada compilación cumpla con las expectativas de accesibilidad. Durante un proyecto de cliente típico, nuestros desarrolladores primero definen un conjunto base de estilos de foco que se alinean con la identidad de marca. Nos aseguramos de que estos estilos se apliquen estrictamente al estado :focus-visible. Esto garantiza que cuando un usuario navega con la tecla Tab hacia un menú de navegación o un botón de llamada a la acción, aparezca un borde claro y de alto contraste.
Seguimos un proceso consistente para cada sitio que gestionamos. Primero, eliminamos el contorno predeterminado del navegador globalmente usando un reinicio base. Segundo, aplicamos un anillo de foco específico y altamente visible que solo se activa mediante la entrada del teclado. Tercero, realizamos una auditoría manual usando solo un teclado para verificar que cada elemento interactivo sea alcanzable. Este proceso elimina la ambigüedad del comportamiento predeterminado del navegador y nos permite controlar la experiencia del usuario hasta el último píxel.
Mejores prácticas para la implementación
- Define siempre un indicador de foco de alto contraste que destaque contra los colores de tu fondo.
- Evita usar solo cambios de color para el foco, ya que esto falla para los usuarios con daltonismo.
- Asegúrate de que tus anillos de foco tengan suficiente grosor, normalmente al menos 2 píxeles, para que se noten fácilmente.
- Prueba tu diseño con varios dispositivos de entrada para confirmar que el CSS se activa correctamente.
- Mantén el estilo de foco consistente en todo el proyecto para crear una experiencia predecible.
Errores comunes a evitar
Un error importante es eliminar por completo el contorno sin proporcionar un reemplazo. Aunque pueda verse más limpio en una captura de pantalla, hace que el sitio sea imposible de usar para muchas personas. Otro error común es usar colores de bajo contraste para el anillo de foco, como gris claro sobre fondo blanco, lo que frustra el propósito de tener un indicador en primer lugar. Debes asegurarte de que tus estilos de foco cumplan con los requisitos de contraste estándar.
Los desarrolladores también luchan ocasionalmente con conflictos de especificidad. Si tienes CSS heredado que apunta a :focus, puede anular tus nuevas reglas :focus-visible. Comprueba siempre las herramientas de desarrollo de tu navegador para ver qué estilo tiene prioridad. Usa el inspector para simular el estado :focus-visible, lo que te permite ver tus estilos en acción sin tener que tabular constantemente por toda tu página durante el ciclo de desarrollo.
Pasos para auditar tus estados de foco actuales
- Abre tu sitio web en un navegador moderno y usa la tecla Tab para navegar por todos los elementos interactivos.
- Verifica que cada enlace, botón y campo de entrada muestre un cambio visual claro cuando esté enfocado.
- Comprueba si el estilo de foco permanece visible cuando haces clic en un elemento con un ratón, y ajústalo si es necesario.
- Usa las herramientas de desarrollo del navegador para alternar el estado focus-visible y verificar tus propiedades CSS.
- Documenta cualquier estado de foco faltante en una hoja de cálculo para seguir tu progreso a través de la arquitectura del sitio.
Preguntas frecuentes
¿Funciona focus-visible en todos los navegadores?
Los navegadores modernos tienen un fuerte soporte para esta pseudoclase. Aunque algunos navegadores muy antiguos pueden no reconocerla, el enfoque estándar es utilizar una estrategia de mejora progresiva. Puedes proporcionar un estilo de foco básico para navegadores más antiguos y usar :focus-visible para ofrecer una experiencia más refinada para los navegadores modernos y compatibles que entienden el selector.
¿Puedo usar focus-visible con botones personalizados?
Sí, funciona perfectamente con botones personalizados, incluidos los creados con etiquetas div o span. Sin embargo, debes asegurarte de que tus elementos sean accesibles mediante teclado agregando un atributo tabindex. Una vez que el elemento se puede enfocar, el selector :focus-visible identificará correctamente cuándo el usuario lo ha seleccionado usando un teclado, lo que te permitirá darle estilo en consecuencia.
¿Cómo interactúa con box-shadow?
Puedes usar box-shadow para crear anillos de foco muy creativos y altamente visibles que no interfieren con el diseño. A diferencia de la propiedad outline, que a veces puede hacer que los elementos se desplacen o se muevan durante el foco, box-shadow permite que el indicador se siente fuera o dentro del elemento sin afectar el flujo del documento o los componentes circundantes.
¿Es focus-visible suficiente para la accesibilidad?
Aunque es una parte importante de la accesibilidad, es solo una pieza del rompecabezas. También debes asegurarte de que tu sitio tenga un orden de tabulación lógico, suficiente contraste de color para todo el texto y etiquetas HTML semánticas adecuadas. El indicador de foco es vital, pero funciona mejor cuando se combina con estas otras prácticas web fundamentales para una experiencia completa.
Por dónde empezar esta semana
Comienza identificando los cinco componentes interactivos más importantes de tu sitio web, como tu navegación principal, barra de búsqueda y botones de formulario de contacto. Aplica un estilo de foco distinto y de alto contraste a estos elementos usando la pseudoclase :focus-visible. Una vez que veas cómo esto mejora la experiencia de navegación, implementa la misma lógica en el resto de los componentes de tu sitio. Un estilo de foco consistente e intencional hará que tu sitio sea inmediatamente más profesional e inclusivo para tus visitantes.
Sigue leyendo: Diseño y desarrollo web · Diseño web