Il semble que dans IE, la largeur inclut la taille du rembourrage. tandis qu'en FF, la largeur ne l'est pas. Comment puis-je faire en sorte que les deux se comportent de la même manière?
Merci.
Il semble que dans IE, la largeur inclut la taille du rembourrage. tandis qu'en FF, la largeur ne l'est pas. Comment puis-je faire en sorte que les deux se comportent de la même manière?
Merci.
Réponses:
IE utilisait le modèle de boîte "border-box", plus pratique mais non standard . Dans ce modèle, la largeur d'un élément comprend le remplissage et les bordures. Par exemple:
#foo { width: 10em; padding: 2em; border: 1em; }
serait 10emlarge.
En revanche, tous les navigateurs redoutant les normes utilisent par défaut le modèle de boîte "content-box" . Dans ce modèle, la largeur d'un élément n'inclut ni le remplissage ni les bordures. Par exemple:
#foo { width: 10em; padding: 2em; border: 1em; }
sera en fait 16emlarge: 10em+ 2emrembourrage pour chaque côté, + 1embordure pour chaque bord.
Si vous utilisez une version moderne d'IE avec un balisage valide , un bon doctype et des en-têtes appropriés, elle respectera la norme. Sinon, vous pouvez forcer les navigateurs conformes aux normes modernes à utiliser "border-box" via:
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
La première déclaration est nécessaire pour Opera, la seconde est pour Firefox, la troisième est pour Webkit et Chrome.
Voici un test simple que j'ai effectué il y a des années pour tester la déclaration de taille de boîte prise en charge par votre navigateur: http://phrogz.net/CSS/boxsizing.html
Notez que Webkit (Safari et Chrome) ne prend en charge le padding-boxmodèle de boîte via aucune déclaration.
Une règle simple consiste à éviter d'utiliser la propriété padding / margin et width pour le même élément. ie Utilisez quelque chose de similaire à celui-ci
<div class="width-div">
<div class="padding-div">
...........
...........
</div>
</div>
Je suis tombé sur cette question et même si elle a quelques années, j'ai pensé que je pourrais ajouter ceci au cas où quelqu'un se heurterait à ce fil.
CSS3 a maintenant une propriété de taille de boîte. Si vous définissez, dites,
.bigbox {
box-sizing: border-box;
width: 1000px;
border: 5px solid #333;
padding: 10px;
}
votre classe aura une largeur de 1000 pixels au lieu de 1030 pixels. Ceci est, bien sûr, incroyablement utile pour quiconque utilise une bordure de la taille d'un pixel avec des divs liquides, car cela résout un problème par ailleurs insoluble.
Mieux encore, le dimensionnement de la boîte est pris en charge par tous les principaux navigateurs, à l'exception de IE7 et des versions antérieures. Pour inclure tous les éléments dans la dimension de largeur ou de hauteur, définissez le dimensionnement de la boîte sur border-box. Pour agréger autres éléments à la largeur et / ou à la hauteur, qui est la valeur par défaut, vous pouvez définir le dimensionnement de la boîte sur "content-box".
Je ne suis pas sûr de l'état actuel de la syntaxe du navigateur, mais j'inclus toujours les préfixes -moz et -webkit:
.bigbox{
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
Avez-vous déclaré un doctype? Quand j'ai commencé à coder html, j'ai eu ce problème, et c'était de ne pas avoir déclaré de doctype. Mon favori est:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...
</html>