Halte aux hacks CSS IE
Attention : cet article a été rédigé en 2010, le contenu ou les éléments abordées peuvent être obsolète.
Autant pendant un temps ils n’avaient plus la côte, autant ces derniers mois je trouve qu’on lit trop d’articles sur les hacks CSS pour IE…
Que ce soit ici ou là ou encore là, on lit les louanges des * html
et autres *+html
, _
ou encore pire avec l’utilisation de \9
… mais wtf?!
Le principal problème lié à l’utilisation d’un hack CSS, c’est que son périmètre d’application n’est pas maîtrisé, étant donné qu’il exploite une faille, son comportement futur ne peut pas être contrôlé…
Imaginons un instant qu’IE corrige son interprétation des CSS, même si ce n’est pas leur genre… Ou encore que gecko ou webkit se retrouve impacté par l’une de ses failles, il récoltera alors les propriétés initialement prévue pour IE, pas sûr qu’il apprécie… En plus bien souvent les hacks rendent vos CSS invalides au validateur W3C.
Pour résumer ces hacks ne sont pas une solution pérenne. D’autant plus lorsqu’on peut exploiter une réelle feature
pour cibler différentes versions d’IE via les commentaires conditionnels (article en français). Et si comme moi, créer une CSS avec les règles spécifiques pour une version d’IE vous rebute, il existe depuis déjà longtemps la technique du <body>
conditionnel, un exemple :
J’utilise cette technique sur la plupart de mes sites depuis 2 ans et j’en suis ravi. Je l’ai découverte via ce post et ensuite via un article bien plus complet de Paul Irish.
L’inconvénient majeur que je trouvais aux commentaires conditionnels, c’était de devoir créer différentes CSS et de devoir dupliquer certains sélecteurs pour compenser certaines défaillances d’IE. Ca peut vite devenir compliqué à maintenir dans le temps.
Avec un <body>
conditionnel, j’édite mes conditions directement dans ma CSS :
Et comme dans l’absolu votre CSS ne devrait pas nécessiter de hacks, nous pourrions simplifier l’identifiant conditionnel à :
Ca vous laisse la possibilité de spécifier pour IE 6 et 7, ce qui est largement suffisant.
Voyons maintenant un petit exemple appliqué à Symfony :
Comme vous voyez, en plus des attributs liés à IE, je fais passer la culture et l’environnement de l’utilisateur. Cela permet de gérer d’éventuels background liés à la langue d’affichage. Et pour l’environnement, je m’en sers pour modifier le background du body d’un site pour son environnement de pré-production, cela permet au client de bien différencier les 2 sites.
Pour finir, c’est ok pour tout le monde ? Fini les hacks CSS, hein ? ;)