Nuevos selectores
Selector :is()
Mediante la pseudoclase :is() podemos escribir selectores complejos de forma más compacta. Esta función recibe como argumentos una lista de selectores, y selecciona cualquier elemento que pueda ser seleccionado por un selector de esa lista. Esta pseudoclase antes se llamó :matches() y :any(). Veamos un ejemplo donde podemos abreviar una combinación de selectores
Con :is() la especificidad se calcula sumando la más alta de sus parámetros, siendo en el ejemplo anterior (0,2,0), cuando .container .list/.menu sería (0,2,0), y .container ul (0,1,1).
Selector :where()
La pseudoclase :where() recibe como argumento una lista de selectores y selecciona cualquier elemento que pueda ser seleccionado por un selector de esa lista. La diferencia se encuentra con la especificidad, donde :is() tiene por especificidad su valor más alto y :where() en cambio es 0, es decir, su especificidad es la que está fuera del where (.container).
Selector :has()
El selector :has() selecciona un elemento precedido, si sus hijos cumplen una serie de criterios.
Selector :not()
La pseudoclase :not() nos permite seleccionar todos los elementos que no cumplan los criterios indicados en sus parámetros.