not any empty
Por lo general, cuando queremos que las etiquetas de cierto tipo se vean de manera especial, les agregamos una clase y si deseamos excluir ciertos elementos, la pseudo-clase :not nos permite hacerlo fácilmente.
<p><a href="#" class="ejemplo">un enlace normal</a></p> <p><a href="#" class="ejemplo esteno">este enlace NO será rojo</a></p> <p><a href="#" class="ejemplo">otro enlace normal</a></p>
Por ejemplo, podríamos definir alguna clase general y luego, hacer que no se aplique en ciertos casos:
.ejempo:hover:not(.esteno) {color: red;}
Al colocar el cursor encima de cada enlace, el texto se verá de color rojo excepto el segundo:
La pseudo-clase :not nos permite ahorrar código; por ejemplo, si quisiéramos que todas las imágenes tuvieran un borde excepto aquellas cuya clase fuera .sinborde, podríamos tener estas dos reglas:
img {
border: 5px solid red;
}
img.sinborde {
border: none;
}
Esto funcionará perfectamente pero podríamos simplificarlo y establecer una sola regla:
img:not(.sinborde ) {
border: 5px solid red;
}
Otra forma de reducir el número de reglas es utilizar la pseudo-clase :any() que, por ahora, no está estandarizada pero puede usarse agregando prefijos (-moz y -webkit) sin problemas.
Lo que hace esta pseudo-clase es crear grupos de selectores que se escriben separados por comas.
Por ejemplo, supongamos que queremos que una serie etiquetas tenga un cierto color de fondo; podríamos escribir:
div, p, li {
background-color: grey;
}
Pero también podríamos escribirlo de este otro modo (sin olvarse del prefijo):
:any(div, p, li) {
background-color: grey;
}
La pseudo-clase :empty es muy interesante ya que selecciona los elementos que no contenga elementos internos (hijos) ni textos de ninguna clase.
.ejemplo:empty {
background-color: #ff0;
}
.ejemplo:empty::before {
content: "aca no hay nada";
font-size: 80%;
}
un texto
otro texto



