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?
Sie müssen wahrscheinlich den standardkonformen Modus aktivieren. Ohne Code zu sehen, kann ich Ihnen jedoch keine weitere Anleitung geben.
Jeff Hubbard
Antworten:
307
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.
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
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:
Wie diese Antwort hat so viele positive Stimmen, wenn die gleiche Antwort wie die akzeptierte, die geschrieben wurde, 3 Jahre zuvor ist?
Dippas
1
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"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"lang="en">
...
</html>
Für diejenigen, die immer noch das Problem haben würden, stellte jQuery zwei Eigenschaften zur Verfügung outerWidth ()und innerWitdh ()um die Breite eines Objekts mit oder ohne Rahmen zu kennen ...
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
10em
breit.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
16em
breit sein:10em
+2em
Polsterung für jede Seite, +1em
Rand 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:
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-box
Box-Modell über keine Deklaration unterstützt.quelle
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
quelle
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,
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:
quelle
Haben Sie einen Doctype deklariert? Als ich anfing, HTML zu codieren, hatte ich dieses Problem, weil kein Doctype deklariert wurde. Mein Liebling ist:
quelle
Für diejenigen, die immer noch das Problem haben würden, stellte jQuery zwei Eigenschaften zur Verfügung
outerWidth ()
undinnerWitdh ()
um die Breite eines Objekts mit oder ohne Rahmen zu kennen ...quelle