5.1.1. —perdido, buscando el diseño ideal

!important en CSS (y en Internet Explorer 6 y anteriores)

!important permite ignorar las reglas de cascada y especificidad, y también sirve como hack en Internet Explorer 6 y anteriores.

!important

En CSS, !important funciona como una palabra clave para ignorar las reglas de cascada y especificidad. Cualquier definición que vaya acompañada de un !important tendrá mayor importancia que cualquier otra aunque esta última sea más especifica.

Fijensé que se coloca justo antes del ; que finaliza la definición.

p {
  color:green !important;
  color:red;
  }

En este caso, normalmente el texto debería ser de color rojo (porque color: red, al aparecer después de color: green, debería rectificarlo), pero !important obliga a que se ignoren las reglas de cascada (y el texto se mantiene verde). Ejemplo 1

Como dije antes, !important tiene mayor importancia que selectores más especificos.

p {
  color: green !important;
  }
  
p#foo {
  color: red;
  }

En este caso, un simple selector de elementos le gana a un selector de ID. Ejemplo 2

Más importante que !important

Cuando dos !important se enfrentan, se respetan reglas de cascada y especificidad.

p {
  color: red !important;
  color: green !important;
  }

En este caso, se respetan las reglas de cascada y la segunda definición reemplaza a la primera. Ejemplo 3

p {
  color: red !important;
  }

p#foo {
  color: green !important
  }

En este caso, se respetan las reglas de especificidad y la segunda definición reemplaza a la primera. Ejemplo 4

Otro hack: !important en Internet Explorer 6 y anteriores

Hasta la versión 6 inclusive, Internet Explorer ignora esta regla y considera a cualquier definición que incluya !important como una definición más.

p {
  color: green !important;
  color: red;
  }

Sólo en Internet Explorer 6 y anteriores, el texto será rojo. Ejemplo 5

Se supone que !important será implementado correctamente en Internet Explorer 7. The Web Standards Project: !important Fixed in Later IE7 Releases

Cuándo usarla

Como hemos visto, !important es demasiado poderoso, y un uso indiscriminado en la hoja de estilos puede llevar a un tremendo caos (por perder la cuenta de dónde habrá declarado alguno).

Los mejores usos que se les puede dar (dejando de lado el tema de hojas de estilos de usuarios) serían:

  • Cuando estamos seguros de no querer que cierta definición sea reemplazada.
  • Al momento de resolver errores en el renderizado. Si alguna propiedad está molestando y no sabemos dónde fue declarada, se puede probar redefinirla siempre. Por ejemplo, ¿algún elemento muestra un extraño margen? * {margin: 0 !important} para asegurarnos que no hemos dejado alguna declaración olvidada en otro lado.

Publicado el 15 de febrero de 2006 en las categorías CSS, Internet Explorer

13 comentarios. Agregá el tuyo →

Rodrigo

Cuando usas el selector universal, *, como ejemplo del post, me imagino que te referis a “inserte un elemento aquí”. Digo por que usar * {margin: 0 !important} es bastante peligroso (no dejaría especificar margenes a ningun elemento que aparezca luego en el CSS).

16 de febrero de 2006

Federico

Cuando la desesperación me gana, uso * para saber si es margin o padding. Después voy buscando qué elemento especificamente da problemas.

16 de febrero de 2006

Dam

Amo !important, uno de los usos que le doy es crear una hoja de estilos común para todos los browsers. En otras palabras, evitar que un browser use un margen determinado o un padding específico mientras que otro browser usa distintos valores.

Generalmente:

* {

background-color: transparent;
color: black;
font-family: Verdana, sans-serif;
font-size: small;
margin: 0;
padding: 0;
text-decoration: none

}

Es mi forma de empezar una hoja de estilos.

16 de febrero de 2006

Dam

Cuac, me olvidé los important!

16 de febrero de 2006

Federico

En realidad no hace falta que declares !important cuando querés resetear margenes y padding.

16 de febrero de 2006

Dam

Es que en realidad mi último comentario estuvo de más, pero no tenía ganas de volver a comentar, :P

17 de febrero de 2006

eduardo

excelente esto me ayudó bastante

19 de noviembre de 2007

Chubawka

fuiste un playboy maestro de la noche! viejo lobo !important

19 de diciembre de 2007

Eduardo

No entiendo por ejemplo aqui:
p {
color: green !important;
color: red;
}

si esto es equivalente a

p {
color: green
}

Para que usar !important???

23 de enero de 2008

Federico

Es verdad que es equivalente. La única intención del ejemplo es hacer equivocar a aquellos navegadores que no implementan !important, como Internet Explorer 6. Vos podés buscarle alguna utilidad a esa no funcionalidad. :)

23 de enero de 2008

Leo

Muy bueno eso del important, me salva la vida

¿existe una forma de poner important a toda una classe sin necesidad de ponersela a todos los elementos y no tener que hacer esto?:

.corrector {
color: blue ¡important;
background: red ¡important;
padding-top: 2px !important;
font-weight: bold !important;
}

Gracias

5 de mayo de 2008

Federico

No hasta donde tengo entendido.
Podrías tratar siendo más especifico con los selectores pero no creo que sea lo que buscas.

5 de mayo de 2008

Julio

Muy bueno el ejemplo :) gracias por estar a disposición de los desarrolladores, admiro la gente que postea sus conocimientos porque sí. Gracias nuevamente.

23 de mayo de 2008

Agregá tu comentario

Agregá tu comentario

© Federico Martín Panicobpm230 (arroba) gmail (punto) com