Especificidad en CSS

Cómo se calcula la puntuación de los selectores, cuándo gana una regla sobre otra y por qué conviene evitar !important.

Cuando dos o más reglas aplican al mismo elemento y definen la misma propiedad, el navegador usa la especificidad para decidir cuál gana.

La especificidad se puede entender como puntos: etiquetas (1), clases y atributos (10), id (100), estilos inline (1000).

!important rompe la cascada y dificulta el mantenimiento; úsalo solo en casos excepcionales.

Mantener selectores simples (sobre todo clases) facilita sobrescribir estilos cuando hace falta.

  • Selector más específico, más prioridad.
  • Cada tipo de selector aporta un peso. Se suele representar como (a, b, c): a = estilos inline e !important, b = id, c = clases, atributos y pseudoclases, d = etiquetas y pseudoelementos. En la práctica, piensa en: etiqueta = 1 punto, clase o atributo = 10 puntos, id = 100 puntos. Un selector #header .nav a tiene más especificidad que solo a.
  • Puedes consultar la [guía de especificidad en web.dev](https://web.dev/learn/css/specificity) y la [referencia en MDN](https://developer.mozilla.org/es/docs/Web/CSS/Specificity) para tablas detalladas.
  • Etiqueta (p, div): 1 punto.
  • Clase (.clase), atributo [href], pseudoclase (:hover): 10 puntos.

Cálculo de la especificidad

Selector más específico, más prioridad.

Cada tipo de selector aporta un peso. Se suele representar como (a, b, c): a = estilos inline e !important, b = id, c = clases, atributos y pseudoclases, d = etiquetas y pseudoelementos. En la práctica, piensa en: etiqueta = 1 punto, clase o atributo = 10 puntos, id = 100 puntos. Un selector #header .nav a tiene más especificidad que solo a.

Puedes consultar la [guía de especificidad en web.dev](https://web.dev/learn/css/specificity) y la [referencia en MDN](https://developer.mozilla.org/es/docs/Web/CSS/Specificity) para tablas detalladas.

  • Etiqueta (p, div): 1 punto.
  • Clase (.clase), atributo [href], pseudoclase (:hover): 10 puntos.
  • ID (#id): 100 puntos.
  • Estilo inline (style="..."): 1000 puntos.

!important

Gana sobre casi todo, pero complica el código.

Añadir !important a una declaración hace que esa regla tenga prioridad sobre otras del mismo origen, incluso con menor especificidad. El problema es que luego es muy difícil sobrescribir ese estilo sin usar otro !important, y el código se vuelve frágil. Úsalo solo en casos concretos (por ejemplo, utilidades de accesibilidad que deben ganar siempre).

Buenas prácticas

Selectores simples y predecibles.

Prefiere clases (.card, .btn) para aplicar estilos: son fáciles de entender y de sobrescribir. Evita depender de IDs para estilos (además el ID debe ser único en la página). No encadenes muchos selectores (.header .nav .list .item) si no es necesario; un solo nombre de clase suele ser suficiente.

CSS
06

Especificidad en CSS

Cómo se calcula la puntuación de los selectores, cuándo gana una regla sobre otra y por qué conviene evitar !important.

Código del tema: .btn.btn-primary { /* especificidad */ }

📘 Teoría

Cálculo de la especificidad

Selector más específico, más prioridad.

Cada tipo de selector aporta un peso. Se suele representar como (a, b, c): a = estilos inline e !important, b = id, c = clases, atributos y pseudoclases, d = etiquetas y pseudoelementos. En la práctica, piensa en: etiqueta = 1 punto, clase o atributo = 10 puntos, id = 100 puntos. Un selector #header .nav a tiene más especificidad que solo a.

Puedes consultar la guía de especificidad en web.dev y la referencia en MDN para tablas detalladas.

  • Etiqueta (p, div): 1 punto.
  • Clase (.clase), atributo [href], pseudoclase (:hover): 10 puntos.
  • ID (#id): 100 puntos.
  • Estilo inline (style="..."): 1000 puntos.
Ejemplo
p { color: gray; }           /* 1 punto */
.destacado { color: blue; }   /* 10 puntos */
#titulo { color: black; }     /* 100 puntos */

!important

Gana sobre casi todo, pero complica el código.

Añadir !important a una declaración hace que esa regla tenga prioridad sobre otras del mismo origen, incluso con menor especificidad. El problema es que luego es muy difícil sobrescribir ese estilo sin usar otro !important, y el código se vuelve frágil. Úsalo solo en casos concretos (por ejemplo, utilidades de accesibilidad que deben ganar siempre).

Buenas prácticas

Selectores simples y predecibles.

Prefiere clases (.card, .btn) para aplicar estilos: son fáciles de entender y de sobrescribir. Evita depender de IDs para estilos (además el ID debe ser único en la página). No encadenes muchos selectores (.header .nav .list .item) si no es necesario; un solo nombre de clase suele ser suficiente.

🧭 Visuales clave

Escala de especificidad

Te ayuda a comparar selectores sin recurrir a prueba y error.

Comparativa de especificidad entre etiqueta, clase y selector con ID.

Comparación paso a paso de especificidad

Explica el criterio correcto de desempate sin depender de intuiciones.

Comparación de selectores por columnas IDs, clases y elementos para decidir el ganador.

🧪 Aprende probando

Ejemplo Comparar especificidad Cambia los selectores y observa qué color gana.

🏁 Retos

Reto Reto: ganar con clase Haz que el párrafo sea azul usando un selector de clase más específico.
Reto Reto: evitar !important Sobrescribe el color con un selector más específico, sin !important.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre CSS.

Test de CSS

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .