Gérer les modèles de boîtes CSS standard et Microsoft

En bref

Les dimensions apparentes des boîtes CSS diffèrent selon le modèle de boîte appliqué par le navigateur : modèle standard ou modèle Microsoft. Comment gérer alors les dimensions CSS ?


Rappelons tout d'abord qu'une boîte CSS est constituée :

Les propriétés CSS permettent de déterminer :

Dans chaque cas, il est possible de spécifier des dimensions gauche, droite, haut et bas différentes les unes des autres.

Deux interprétations divergentes des dimensions

Les aléas d'implémentation des normes CSS dans les navigateurs ont hélas conduit à la coexistence actuelle de deux modèles de boîtes différents : le modèle standard (celui du W3C) et un modèle propriétaire Microsoft, dû à IE 5 Windows. Ils diffèrent principalement par leur mode de calcul des dimensions apparentes des boîtes affichées par le navigateur.

Nous prendrons ici l'exemple des largeurs :

  1. Selon le modèle standard, la largeur apparente d'une boîte sera logiquement égale à la somme de :

    • la largeur spécifiée pour son contenu (propriété CSS width) ;

    • la largeur totale de son remplissage gauche/droite ;

    • la largeur totale de ses bordures gauche/droite.

    Une boîte ayant un contenu de 250 pixels, des padding latéraux de 20 pixels chacun et des bordures latérales de 5 pixels chacune occupera donc à l'écran une largeur totale de : 250 + 20 + 20 + 5 + 5 = 300 pixels.

  2. Le modèle de boîte Microsoft considère pour sa part que le remplissage et les bordures prennent place à l'intérieur de la zone de contenu. La largeur apparente d'une boîte sera alors égale à la seule largeur spécifiée pour contenu.

    La boîte précédente n'occupera donc à l'écran qu'une largeur de 250 pixels. Sa zone de contenu se trouvera réduite des dimensions de bordure et de remplissage, soit ici 50 pixels par rapport au modèle standard.

Pour comparer ces deux modèles, créons deux boîtes qui, dans le modèle standard, sont de même largeur apparente :

En CSS :

.jaune {
  background-color: #ffff00;
  width: 300px;
  padding: 0;
  border: 0;
}
.vert {
  background-color: #00ff00;
  width: 250px;
  padding: 0 20px;
  border-left: 5px solid #00ff00;
  border-right: 5px solid #00ff00;
}

En HTML :

<div class="jaune">Box 1</div>
<div class="vert">Box 2</div>

Le résultat affiché dépend du modèle de boîte appliqué :

Vous pouvez vérifier le modèle de boîte utilisé par votre navigateur sur cette page test-modèle de boîte.

Le DocType switching : forcer l'une ou l'autre interprétation des dimensions

Le résultat d'un positionnement précis de plusieurs boîtes adjacentes peut donc être très différent selon le calcul effectué. Comment savoir quel modèle de boîte sera appliqué par quel navigateur ?

Note : La présence d'un prologue XML (<?xml version="1.0"?>) fait basculer plusieurs navigateurs (Opera 7, MSIE 6 Windows) dans le modèle de boîte Microsoft, en dépit de la DTD XHTML

Gérer les dimensions dans MSIE 5.x

Reste le cas d'IE 5.x Windows : comment obtenir un résultat correct à partir de dimensions prévues pour le modèle de boîte standard, puisqu'il n'applique que son propre modèle ?

Tantek CELIK a mis au point une méthode de contournement devenue fameuse, le box model hack. Il exploite une erreur de parsing d'IE 5.x Windows, c'est à dire un défaut dans sa manière de lire la syntaxe CSS2. Ceci permet de :

La syntaxe à utiliser est :

.vert {
  background-color: #00ff00;
  padding: 0 20px;
  border-left: 5px solid #00ff00;
  border-right: 5px solid #00ff00;
width: 300px;
  voice-family: "\"}\"";
  voice-family:inherit;
  width: 250px;
}
html>body .vert {
  width: 250px;
}

Explication :

Si vous utilisez MSIE 5.x, vous pouvez vérifier le fonctionnement du box model hack dans cette seconde partie de la page test - box model hack.

Retour en haut de la page
Mandragor.org - Version 8.3