Es scheint, dass im IE die Breite die Auffüllgröße enthält. während in FF die Breite nicht. Wie kann ich dafür sorgen, dass sich beide gleich verhalten?
Vielen Dank.
Es scheint, dass im IE die Breite die Auffüllgröße enthält. während in FF die Breite nicht. Wie kann ich dafür sorgen, dass sich beide gleich verhalten?
Vielen Dank.
Antworten:
IE verwendete früher das bequemere, aber nicht standardmäßige "Border-Box" -Box-Modell. In diesem Modell umfasst die Breite eines Elements die Auffüllung und die Ränder. Zum Beispiel:
#foo { width: 10em; padding: 2em; border: 1em; }
wäre 10embreit.
Im Gegensatz dazu verwenden alle standardbedrohenden Browser standardmäßig das Box-Modell "Content-Box" . In diesem Modell ist die Breite eines Elements nicht Klotzen oder Grenzen umfasst. Zum Beispiel:
#foo { width: 10em; padding: 2em; border: 1em; }
wird tatsächlich 16embreit sein: 10em+ 2emPolsterung für jede Seite, + 1emRand für jede Kante.
Wenn Sie eine moderne Version des IE mit gültigem Markup , einem guten Doctype und entsprechenden Headern verwenden, entspricht dies dem Standard. Andernfalls können Sie moderne standardkonforme Browser zwingen, "Border-Box" zu verwenden, und zwar über:
* {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
Die erste Deklaration wird für Opera benötigt, die zweite für Firefox, die dritte für Webkit und Chrome.
Hier ist ein einfacher Test, den ich vor Jahren durchgeführt habe, um zu testen, welche Box-Sizing-Deklaration Ihr Browser unterstützt: http://phrogz.net/CSS/boxsizing.html
Beachten Sie, dass Webkit (Safari und Chrome) das padding-boxBox-Modell über keine Deklaration unterstützt.
Eine einfache Regel besteht darin, zu vermeiden, dass für dasselbe Element die Eigenschaften padding / margin und width verwendet werden. dh Verwenden Sie etwas Ähnliches
<div class="width-div">
<div class="padding-div">
...........
...........
</div>
</div>
Ich bin auf diese Frage gestoßen, und obwohl sie ein paar Jahre alt ist, dachte ich, ich könnte sie hinzufügen, falls jemand auf diesen Thread stößt.
CSS3 verfügt jetzt über eine Box-Sizing-Eigenschaft. Wenn Sie einstellen, sagen Sie,
.bigbox {
box-sizing: border-box;
width: 1000px;
border: 5px solid #333;
padding: 10px;
}
Ihre Klasse wird 1000px breit sein, anstatt 1030px. Dies ist natürlich unglaublich nützlich für alle, die einen pixelgroßen Rand mit flüssigen Divs verwenden, da dies ein ansonsten unlösbares Problem löst.
Noch besser ist, dass die Box-Größe von allen gängigen Browsern außer IE7 und darunter unterstützt wird. Um umfasst alle Elemente innerhalb der Breite oder Höhe Dimension - Set - Box-Sizing border-Box. Um andere Elemente auf die Standardbreite und / oder -höhe zu aggregieren , können Sie die Boxgröße auf "Inhaltsfeld" setzen.
Ich bin mir nicht sicher über den aktuellen Stand der Browsersyntax, aber ich füge immer noch die Präfixe -moz und -webkit hinzu:
.bigbox{
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
Haben Sie einen Doctype deklariert? Als ich anfing, HTML zu codieren, hatte ich dieses Problem, weil kein Doctype deklariert wurde. Mein Liebling ist:
<!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>