La Real Academia Española define la especificidad como la cualidad y condición de ser específico, o lo que es lo mismo: concreto, determinado. En los últimos años, los expertos en CSS se han apropiado de este término para denominar la cualidad que hace que un estilo prime sobre otro cuando ambos deberían afectar a un mismo elemento.
El principio en el que se basa es simple: el elemento más específico gana. Parece claro que una clase definida específicamente para un elemento html (como p .intro { }
) prima sobre la definición general de ese elemento en la hoja de estilos (que sería p {}
). Pero, ¿y dos etiquetas html frente a un id? (como por ejemplo div p {} y ``#cabecera {}
), ¿por qué este elemento no sale como debería?. Esa es la clase de preguntas que responde la especificidad.
¿Cómo se calcula? Asignando un valor a cada tipo de elemento:
- Un selector HTML tiene una especificidad de 1.
- Dos selectores HTML tienen una especificidad de 2, es decir que se aplica siempre el selector con más elementos.
- Un selector de clase tiene una especificidad de 10.
- Dos selectores HTML con un selector de clase tienen una especificidad de 10 + 1 + 1.
- Un selector id tiene una especificidad de 100.
Una vez asignados estos valores, éstos se suman para calcular el total (véanse ejemplos en htmldog y csstricks ) o se comparan por separado (véase un ejemplo de esto último en Smashing Magazine).
Por último, os recomendamos esta simpática chuleta de especificidad CSS ambientada en Star Wars.