Software is like sex... It's better when it's free.

Blog - Hacker IE6 w3cement parlant

Hacker IE6 w3cement parlant

Cela faisait un bon moment que je voyais au milieu des css le mot-clé !important; sans réellement m'y intéresser pour finalement m'apercevoir qu'il constitue une merveilleuse façon de hacker IE6, le tout en respectant les normes w3c.

Sur de gros projets web, vous avez sans doute déjà dû rencontrer des problèmes de styles css qui ne s'appliquaient pas comme vous le désiriez, avant de vous rendre compte que vous appliquiez ce style dans le vent car il était redéfini un peu plus loin, ce dernier écrasant le 1er style.

Pour pallier à ça, je mettais en place beaucoup d'héritage de styles afin de limiter le risque de surcharges css. Le mot clé !important sert justement à prioriser l'application d'un style sur un autre. C'est ainsi que si un attribut est défini avec le mot clé !important en fin de définition et que ce même attribut est redéfini plus bas ou dans une feuille de style externe, il ne sera plus écrasé. 

Là où ça devient très bon avec notre cher IE6, éternel démon de l'implémentation xHTML / CSS, c'est que ce bon vieux browser ne connaît pas ce mot-clé. Alors qu'en fait-il ? Il l'ignore pardi ! Nous pouvons donc, à partir du moment où le mot-clé respecte les normes, profiter de cette inconnaissance, pour hacker IE6 :)

Allez un bon petit css est plus efficace qu'un long discours.

html, body, p, form, fieldset, table, {
  margin:0;
  padding:0;
}
body{
  background-color:#FFF;
  font-family: Verdana, Arial, Helvetica, sans-serif;
  font-size:11px;
}
ol, ul{
  list-style: none;
}
div#fakeDiv{
  display:block;
  width:300px;
  height:300px;
  background-image:url(../Img/test.png) !important; /* non-sucky browser */
  background-image:url(../Img/test.gif); /* IE6 */
  background-repeat:no-repeat;
}

Ce qui permet d'offrir une image transparente de très bonne qualité en PNG sur les navigateurs connaissant le mot-clé !important et une de moins qualité en GIF sur IE6 et inférieurs ; le tout sans passer par des <!--[IF lt IE 7]> ou des PNG fix.

Cet exemple est extensible à n'importe quel problème css récurrents sur IE6, notamment les double margin, padding négatifs, transparence, etc.

Tags:  csshackie6microsoftw3c.
Posté le Mardi 28 avril 2009 22:25:08

Commentaires :

joe, le mardi 09 juin 2009 11:56:51
Re-Hello,

en effet ce n'est pas valid W3C, mais dans certains cas (au niveau CSS, jamais en HTML) , car malheureusement IE6 persiste, je passe outre ces normes mais ça reste vraiment exceptionnel.

Bon courage ^_^
LBIE, le mardi 09 juin 2009 11:14:31
Salut Joe,

Merci pour l'astuce, je ne connaissais pas.
Je viens de regarder, cela marche au poil ; seul truc dérangeant, cela n'est pas valide w3c, !important oui ;)

Bon dev !
Joe, le mardi 09 juin 2009 11:05:19
Hello,

il y a aussi cette possibilité :

background:url(..); /* nav normaux ! */
_background:url(..); /* IE6 */

Comme ça on peut encore passer outre le !important !

Bon courage ^^.