La especificidad es la manera mediante la cual los navegadores deciden qué valores de una propiedad CSS son más relevantes para un elemento y, por lo tanto, serán aplicados. La especificidad está basada en las reglas de coincidencia que están compuestas por diferentes tipos de selectores CSS.

Tenemos 4 espacios, y cada uno de ellos comienza en 0: 0 0 0 0. El espacio más a la izquierda es el más importante, y el más a la derecha es el menos importante.Funciona como los números en el sistema decimal: 1 0 0 0 es mayor que 0 1 0 0.El primer espacio, el más a la derecha, es el menos importante.Incrementamos este valor cuando tenemos un selector de elemento. Un elemento es un nombre de etiqueta. Si tienes más de un selector de elemento en la regla, incrementas el valor almacenado en este espacio en consecuencia.

Ejemplos:

p {} /* 0 0 0 1 */

span {} /* 0 0 0 1 */

p span {} /* 0 0 0 2 */

p > span {} /* 0 0 0 2 */

div p > span {} /* 0 0 0 3 */

El segundo espacio se incrementa por 3 cosas:

– selectores de clase
– selectores de pseudo-clase
– selectores de atributos (los aprenderemos muy pronto)
Cada vez que una regla cumple con uno de esos, incrementamos el valor de la segunda columna desde la derecha.

Ejemplos:

.name {} /* 0 0 1 0 */
.users .name {} /* 0 0 2 0 */
[href$='.pdf'] {} /* 0 0 1 0 */
:hover {} /* 0 0 1 0 */

Esto es lo que sucede cuando combinas selectores «espacio 2» con selectores «espacio 1»:


div .name {} /* 0 0 1 1 */
a[href$='.pdf'] {} /* 0 0 1 1 */
.pictures img:hover {} /* 0 0 2 1 */
"Espacio 3" contiene lo más importante que puede afectar la especificidad de tu CSS en un archivo CSS: el id.

Cada elemento puede tener asignado un atributo id, y podemos usarlo en nuestra hoja de estilo para apuntar al elemento.

Ejemplos:

#name {} /* 0 1 0 0 */
.user #name {} /* 0 1 1 0 */
#name span {} /* 0 1 0 1 */

«Espacio 4» se ve afectado por estilos en línea. Los estilos en línea son reglas CSS definidas en el HTML mismo, utilizando el atributo style.

Cualquier estilo en línea tendrá precedencia sobre cualquier regla definida en un archivo CSS externo, o dentro de la etiqueta style en el encabezado de la página.

Ejemplo:

<p style="color: red">Test</p> /* 1 0 0 0 */

Incluso si otra regla en el CSS define el color, esta regla de estilo en línea se aplicará.

Excepto por un caso: si se usa !important, lo que llena «espacio 5».

Una nota sobre !important
La especificidad no importa si una regla termina con !important:

p {   font-size: 20px !important; }

Esa regla tendrá precedencia sobre cualquier regla con más especificidad.

Agregar !important en una regla CSS hará que esa regla sea más importante que cualquier otra regla, según las reglas de especificidad.

La única manera de que otra regla tome precedencia es tener !important también, y tener una especificidad más alta en los otros espacios menos importantes.

Generalmente, !important no debería tener lugar en tus archivos CSS. A veces lo uso para pruebas rápidas, para averiguar por qué una regla no se aplica. Si no aparece con !important, hay un problema en algún lugar.

por Dan Iel

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *