Vous le savez sans doute déjà, Microsoft, dans ses navigateurs maintenant non maintenus (IE 5.0 et IE 5.5 pour Windows), avait incorrectement implémenté le modèle de boite. En substance, les marges et padding
n'avaient pas le même comportement dans IE (antérieur à 6.0) et les spécifications du W3C. Le problème est corrigé dans IE 6.0, qui dispose d'un mode Strict, qui est bien plus conforme. Tout cela est largement documenté dans un article d'OpenWeb intitulé Gérer les modèles de boîtes CSS standard et Microsoft.
La principale solution au problème est l'utilisation du fameux Box Model Hack de Tantek. Mais cela ne convient pas forcément à tout le monde. C'est là qu'entrent en scène Batiste Bieler et son script PHP. L'avantage est de mettre le développeur Web dans un monde quasiment parfait, en fournissant une couche d'abstraction coté serveur pour limiter le problème. L'inconvénient est que le script est limité (unités forcément homogènes), et qu'il nécessite de faire des pages dynamiques. Dans tous les cas, l'idée est intéressante.
Mise à jour du 10/09/2004 : changement d'URL pour le script de Batiste.
4 réactions
1 De Sylvain - 19/12/2003, 00:36
L'idée est bonne en effet, mais apparemment il n'est possible de la mettre en oeuvre que si on possède quelques connaissances en PHP.
Alors tant qu'à faire, autant utiliser un système de négociation selon le navigateur. On teste la valeur de $_SERVER['HTTP_USER_AGENT'] pour savoir quelle version de quel navigateur utilise le visiteur du site, et puis selon le cas on envoie une feuille de style pour les navigateurs gérant le modèle de boîte standard, et une autre pour les navigateurs utilisant le modèle de boîte Microsoft.
Certes, cela oblige à maintenir 2 feuilles de style. Mais après tout elles sont presque identiques, il n'y a que quelques mesures de padding, de border ou de margin à modifier. Mais au moins on n'utilise pas de hacks disgracieux.
Qu'en pensez-vous ?
2 De JMF - 19/12/2003, 09:51
Malheureusement grâce aux développeurs bloquant leurs sites à certains navigateurs, ces derniers permettent de plus en plus de les faire passer pour n'importe quel navigateur. Généralement il se font passer pour IE afin de ne pas se voir interdire l'accès à un site. (Je ne cautionne pas, je constate simplement)
Résultat, se baser sur le User Agent pour connaitre l'agent utilisé est assez peu fiable et ne doit donc pas être utilisé dans des situations stratégiques comme le choix d'une feuille de style.
Bien qu'étant loin de la perfection, les hacks, de par le fait qu'ils se basent sur les capacités (ou les incapacités) des navigateurs, ne sont pas sujets à ce genre de problèmes et sont par conséquent une moins mauvaise solution à mes yeux.
Bien évidemment la seule bonne solution serait que tous les navigateurs utilisés possèdent une implémentation correcte des standards mais là je rêve, j'en ai conscience.
3 De Batiste Bieler - 19/12/2003, 10:35
Ouais en effet, la solution PHP souffre d'imperfection car un navigateur peut se faire passer pour un autre. Le hack CSS reste la solution ultime pour une compatibilité maximum mais ...
Serait il possible de détecter plus précisement les navigateurs. Le but ici est juste de savoir si l'on est en présence de IE5.x ...
Ne pourrait-on pas utiliser une fonctionnalité MS pour détecter avec une meilleur fiabilité avec quel navigateur l'utilisateur surfe ?
4 De thibaut allender - 20/12/2003, 17:18
"Ne pourrait-on pas utiliser une fonctionnalité MS..."
tu veux dire un bug ?
personnellement j'utilise le hack "underscore" par exemple :
position: fixed;
_position: absolute;
le 2e n'est pris en compte que par IE
pour les elements plus complexes, je fais un css qui incorpore du php et se base sur le user-agent