Menu

!important en CSS: cómo funciona y cuándo usarlo

!important hace que una declaración gane a las declaraciones normales, sea cual sea su especificidad. Aprende exactamente a qué le gana, qué le gana a él, cómo funciona la especificidad por debajo y las formas más limpias de ganar un conflicto de estilos.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Qué hace !important

Agregar !important después de un valor hace que esa declaración gane a todas las declaraciones normales de la misma propiedad en el mismo elemento. La especificidad del selector y el orden en el código dejan de importar.

Sin !important, ganaría el selector de ID y el texto sería azul. Borra !important en el editor para verlo.

Sintaxis

selector {
  property: value !important;
}

Va después del valor y antes del punto y coma. Se aplica solo a esa declaración, no a toda la regla. También funciona en las propiedades abreviadas (margin: 0 !important; hace importantes los cuatro lados) y en un atributo style.

Qué le gana a qué

Para los estilos que escribe el autor de la página, del más débil al más fuerte:

NivelDeclaraciónEjemplo
1Declaración normal en una hoja de estilop { color: blue; }
2Declaración normal en un atributo style<p style="color: blue">
3!important en una hoja de estilop { color: blue !important; }
4!important en un atributo style<p style="color: blue !important">

Dentro de un mismo nivel decide la especificidad y después el orden en que aparecen las declaraciones: gana la posterior.

Este es el único uso cotidiano legítimo de !important: sobrescribir un estilo en línea que no puedes editar, como uno que escribe un widget de terceros.

Cuando dos declaraciones son !important

!important contra !important vuelve a las reglas de siempre: gana la especificidad más alta y, si empatan, gana la declaración posterior.

Así es como escala !important: en cuanto una regla lo usa, la regla que debe sobrescribirla también tiene que usarlo, y la especificidad empieza a subir otra vez.

La especificidad de CSS en una tabla

La especificidad es el peso de un selector. Cuenta tres números:

ColumnaQué cuentaSelector de ejemploEspecificidad
ASelectores de ID#nav(1,0,0)
BClases, atributos, pseudoclases.btn, [type="text"], :hover(0,1,0) cada uno
CSelectores de tipo, pseudoelementosp, ::before(0,0,1) cada uno
ninguna*, combinadores (>, +, ~, espacio)*, ul > lino suman nada

Compara primero la columna A; solo si hay empate mira la B y después la C. Así, #nav a (1,0,1) le gana a .menu .item .link a (0,3,1): un ID pesa más que cualquier cantidad de clases.

Entender esta tabla es lo que te permite evitar !important: la mayoría de los problemas de "mi CSS no se aplica" son una regla más específica en otro lugar, visible en el panel Styles de DevTools con tu declaración tachada.

Alternativas más limpias

  • Iguala la especificidad y apóyate en el orden. Carga tu hoja de estilo después de la de la librería y usa un selector al menos igual de específico.
  • Baja la especificidad de la otra regla con :where(). Todo lo que va dentro de :where() cuenta como cero, así que los estilos base escritos con él son fáciles de sobrescribir.
  • Usa una variable CSS como punto de entrada. Un componente que lee var(--btn-bg) se puede personalizar sin pelear con sus selectores. Consulta variables CSS.

Poner !important desde JavaScript

element.style.color = 'red !important' no funciona: el valor es inválido y se ignora. Usa setProperty con un tercer argumento:

el.style.setProperty('color', '#f59e0b', 'important');

Errores comunes

  • Ponerlo en el lugar equivocado. color: !important red; es inválido; va después del valor.
  • Usarlo en @keyframes. Las declaraciones marcadas con !important dentro de keyframes se ignoran.
  • Resolver todos los conflictos con él. Busca en DevTools la regla que gana e iguala o baja su especificidad.
  • Esperar que afecte a otra propiedad. color: red !important no hace nada con background.
  • Olvidar que el !important en línea le gana al tuyo. Ninguna regla de las hojas de estilo de la página puede sobrescribir style="color: red !important"; cambia el atributo en sí, por ejemplo con JavaScript.

Preguntas frecuentes

¿Qué hace !important en CSS?

Le da a una declaración prioridad sobre todas las declaraciones normales de la misma propiedad en el mismo elemento, sin importar la especificidad del selector ni el orden. Se escribe después del valor: color: red !important;.

¿Cómo se sobrescribe un !important?

Con otra declaración !important que tenga mayor especificidad, o la misma especificidad y una posición posterior en la hoja de estilo. Un style en línea con !important le gana a cualquier !important de una hoja de estilo.

¿!important sobrescribe los estilos en línea?

Sí. Una declaración de una hoja de estilo con !important le gana a una declaración normal en un atributo style. No le gana a una declaración en línea que también esté marcada con !important.

¿Usar !important es una mala práctica?

Si se usa para ganar una pelea de especificidad, sí: la siguiente sobrescritura también necesita !important y la hoja de estilo se vuelve difícil de cambiar. Es razonable en clases utilitarias que siempre deben aplicarse (como .hidden), para sobrescribir estilos en línea de terceros y en hojas de estilo del usuario.

¿Cómo se calcula la especificidad en CSS?

Cuenta tres columnas: selectores de ID; luego clases, atributos y pseudoclases; luego selectores de tipo y pseudoelementos. Compara columna por columna desde el principio, así que #nav a (1,0,1) le gana a .menu .item a (0,2,1). El selector universal * y los combinadores no suman nada.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR