CodeForge

Maquetación Web Dinámica / CSS3 fundamentos: la piel

Especificidad y cascada: quién gana y por qué

Teoría20 min20 XP

"Le puse el color y no cambia nada." Todo desarrollador ha dicho esa frase, y la causa casi siempre es la misma: otra regla más específica está ganando. Hoy aprendes las reglas del juego — y no vuelves a perder una pelea contra tu propio CSS.

La cascada: el sistema de decisión

Cuando varias reglas declaran la misma propiedad sobre el mismo elemento, el navegador decide en este orden:

  1. Origen e importancia: tus estilos le ganan a los del navegador.
  2. Especificidad: el selector más específico gana.
  3. Orden: a igual especificidad, gana la regla que aparece más abajo.

El punto 2 es el que causa el 90% de las confusiones, así que vamos a calcularlo con precisión.

La calculadora 0-0-0

Todo selector tiene un puntaje de tres cifras — (ids, clases, elementos):

SelectorPuntajePor qué
p0-0-11 elemento
.destacado0-1-01 clase
p.destacado0-1-11 clase + 1 elemento
nav ul li a0-0-44 elementos
#cabecera .menu a1-1-11 id + 1 clase + 1 elemento

Se compara de izquierda a derecha, como números: 1-0-0 le gana a 0-9-9. Un id vale más que cualquier cantidad de clases; una clase más que cualquier cantidad de elementos. Los atributos ([type="email"]) y las pseudo-clases (:hover, las verás en el módulo 9) cuentan como clases.

Compruébalo — el orden de las reglas en el CSS está invertido a propósito:

Aunque p está de última en el archivo (y el orden favorece a lo último), la especificidad se evalúa ANTES que el orden: cada párrafo obedece a su selector más específico.

La estrategia profesional

La conclusión práctica de todo esto es contraintuitiva: los profesionales mantienen la especificidad BAJA y plana — casi todo con clases simples (0-1-0). Así, sobreescribir es trivial (otra clase más abajo) y nunca necesitas escaladas. La especificidad alta no es poder: es rigidez.

Tienes 'nav ul li a { color: blue; }' y '.enlace { color: green; }' sobre el mismo enlace. ¿De qué color queda?

Mini-reto

Abre DevTools en cualquier página, selecciona un elemento y mira el panel Styles: las propiedades tachadas son reglas que PERDIERON la cascada. Pasa el mouse sobre un selector y DevTools te muestra su especificidad exacta. Acabas de encontrar el arma definitiva para depurar CSS.

Qué sigue

Ya sabes quién gana entre reglas que compiten. Falta el otro mecanismo silencioso del CSS: la herencia — por qué algunos estilos "se contagian" a los hijos y otros no.