CodeForge

Maquetación Web Dinámica / Pseudo-clases y pseudo-elementos: el arsenal secreto

Estados: :hover, :focus-visible, :active y compañía

Teoría18 min20 XP

Una interfaz sin estados es un maniquí: bonita pero muerta. Los estados — el botón que responde al mouse, el input que muestra dónde estás escribiendo — son la mitad de la sensación de "calidad" de un sitio. Este módulo abre con ellos, y con la distinción que separa al maquetador moderno: :focus vs :focus-visible.

Los estados del ciclo de interacción

estados.css

:focus vs :focus-visible: la distinción que importa

:focus se activa con CUALQUIER foco — también el clic del mouse. Durante años eso produjo anillos de foco tras cada clic, y la "solución" de la época fue el crimen de accesibilidad más común de la web: outline: none — que dejó a los usuarios de teclado navegando a ciegas.

:focus-visible es la reconciliación: el navegador aplica el anillo SOLO cuando el foco llegó por teclado (o cuando el usuario lo necesita). Mouse: sin anillo. Tab: anillo bien visible. Nadie pierde.

Los estados de los enlaces: el orden LVHA

Los enlaces suman :visited (ya lo visitaste) y son sensibles al ORDEN de las reglas — misma especificidad, gana la última (cascada, módulo 3). El orden que funciona: Link, Visited, Hover, Active ("LoVe-HAte" como mnemónico clásico):

lvha.css

Y dos estados de formulario que ya usaste sin nombrarlos: :checked (el checkbox hack del módulo 8 — lo explotaremos a fondo en el reto final) y :disabled con su primo :enabled.

¿Por qué :focus-visible es mejor que :focus para el anillo de foco?

Mini-reto

Dale a tu periódico el kit completo: hover con color-mix (módulo 4) en botones y enlaces, :focus-visible con anillo del acento en TODO lo interactivo, :active con scale(0.97). Luego suelta el mouse y navega la portada entera con Tab — si siempre sabes dónde estás, aprobaste.

Qué sigue

Estados dominados. La próxima lección selecciona por POSICIÓN: first-child, last-child y el poderoso :nth-child con sus fórmulas an+b — cebrear tablas y ritmar galerías sin tocar el HTML.