:has() para decisiones de layout y estado
Selecciona el elemento actual cuando se cumple una condición interna.
Durante años CSS no podía seleccionar un padre según su contenido. :has() resuelve eso y habilita patrones que antes requerían JavaScript.
La forma mental correcta es: elemento:has(condición). Si la condición se cumple, se estiliza el elemento principal.
En .card:has(img) no seleccionas la imagen, seleccionas la tarjeta por su contenido. En formularios, form:has(:invalid) permite feedback global de estado.
- Sintaxis:
elemento:has(selector). - Casos típicos: tarjetas con/sin media, menús con submenú, formularios con errores.
- Puedes combinar
:has()con:not():article:not(:has(img)). - Acota el alcance por componente:
.checkout-form:has(:invalid)suele ser mejor que reglas globales. - Compatibilidad: soporte sólido en navegadores modernos; revisa Can I Use.