Pseudo clase CSS :has()
Las pseudo-clases de CSS sirven para seleccionar de manera precisa elementos de la página y ajustar estilos de manera específica ante diversas situaciones. Si trabajas con CSS seguro que las has utilizado muchas veces y las conocerás, siendo algunos ejemplos clásicos :hover, :focus y otros.
Hoy os traemos un nuevo selector que ya se encuentra disponible en Safari Technology Preview, pero que seguramente tardará poco en estar soportado en otros navegadores populares. Se trata de :has() y sirve para obtener elementos que tengan ciertas características indicadas en el ámbito de un selector dado.
Pseudo clase :has()
La pseudo-clase :has() nos sirve para seleccionar elementos que aplican a varios selectores a la vez, siendo alguno de ellos evaluados en el ámbito del selector principal. Para explicar este tipo de selector sería útil presentar primero un ejemplo.
p:has(img) { border: 1px solid #ccc; }
Como cualquier pseudo clase, :has() se utiliza sobre un selector determinado, llamémosle selector principal. Sin embargo, en este caso podemos ver que se indica además un selector adicional entre paréntesis. Finalmente la pseudo clase nos ofrecerá elementos donde tengamos el selector principal, pero solamente si el ámbito del selector principal concuerda con los selectores enviados por parámetro. Dado el ejemplo anterior, estaremos seleccionando párrafos (elementos etiquetados con
) que tengan dentro una imagen (una o varias etiquetas ). Sin embargo, nuestros selectores podrían ser todavía más precisos. Por ejemplo veamos el siguiente código:
p:has(> img) { border: 1px solid #ccc; }
En este caso obtendremos únicamente párrafos cuando éstos dispongan de una etiqueta como hija directa.
Selector padre
Las posibilidades de este nuevo selector son muy interesantes, ya que nos permite acceder a elementos padre de otros elementos, por eso esta pseudo clase se ha popularizado con el nombre de «parent selector» o selector padre en español. Para entender este punto veamos el siguiente ejemplo:
form:has(input:invalid) { background-color: #ffcccc; }
Esta regla de CSS permite encontrar todos formularios que tienen campos con validaciones HTML5 inválidas. Es decir, podemos encontrar todas las etiquetas