DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Die CSS-Eigenschaft box-sizing steuert, wie das Box-Modell für das Element, auf das sie angewendet wird, behandelt wird.
.module {
box-sizing: border-box;
}
Eine der gängigsten Verwendungen ist die Anwendung auf alle Elemente der Seite, einschließlich Pseudo-Elementen
*, *::before, *::after {
box-sizing: border-box;
}
Dies wird oft als „universelles Box-Sizing“ bezeichnet und ist eine gute Arbeitsweise! Die (wörtliche) width, die Sie festlegen, ist die Breite, die Sie erhalten, ohne dass Sie mentale Berechnungen durchführen und die Komplexität verwalten müssen, die sich aus Breiten ergibt, die aus mehreren Eigenschaften stammen. Wir haben hier sogar einen Tag des Bewusstseins für Box-Sizing.
Werte
content-box: der Standardwert. Breiten- und Höhenwerte beziehen sich nur auf den Inhalt des Elements. Der Innenabstand und der Rahmen werden außerhalb der Box hinzugefügt.padding-box: Breiten- und Höhenwerte beziehen sich auf den Inhalt und den Innenabstand des Elements. Der Rahmen wird außerhalb der Box hinzugefügt. Derzeit unterstützt nur Firefox den Wertpadding-box.border-box: Breiten- und Höhenwerte beziehen sich auf den Inhalt, den Innenabstand und den Rahmen.inherit: erbt das Box-Sizing des übergeordneten Elements.
Beispiel
Dieses Beispielbild vergleicht die Standardeinstellung content-box (oben) mit border-box (unten)

Die rote Linie zwischen den Bildern repräsentiert den Breitenwert der Elemente. Beachten Sie, dass das Element mit dem Standardwert box-sizing: content-box; die deklarierte Breite überschreitet, wenn Innenabstand und Rahmen außerhalb der Inhaltsbox hinzugefügt werden, während das Element mit angewendetem box-sizing: border-box; vollständig innerhalb der deklarierten Breite liegt.
Box Sizing verwenden
Nehmen wir an, Sie setzen ein Element auf width: 100px; padding: 20px; border: 5px solid black;. Standardmäßig ist die resultierende Box 150 Pixel breit. Das liegt daran, dass das Standard-Box-Sizing-Modell content-box ist, das die deklarierte Breite eines Elements nur auf seinen Inhalt anwendet und Innenabstand und Rahmen außerhalb der Box des Elements platziert. Dies vergrößert effektiv den Platz, den das Element einnimmt.
Wenn Sie box-sizing auf padding-box ändern, wird der Innenabstand in die Box des Elements verschoben. Dann wäre die Box 110 Pixel breit, mit 20 Pixel Innenabstand innen und 10 Pixel Rahmen außen. Wenn Sie den Innenabstand *und* den Rahmen in die Box einbeziehen möchten, können Sie border-box verwenden. Die Box wäre dann 100 Pixel breit – die 10 Pixel Rahmen und 20 Pixel Innenabstand werden beide in die Box des Elements verschoben.
Demo
Weitere Informationen
- CSS-Tricks-Artikel über Box-Sizing
- CSS-Tricks-Artikel über geerbtes Box-Sizing
- MDN Docs
- Paul Irish über die universelle Verwendung von border-box
Browser-Unterstützung
| Chrome | Safari | Firefox | Opera | IE | Android | iOS |
|---|---|---|---|---|---|---|
| Jede *† | 3 *† | 1 ‡ | 7 * | 8 * | 2.1 *† | Jede * |
* padding-box wird nicht unterstützt
† ältere Versionen erfordern das -webkit-Präfix (Chrome 1-9, Safari 3-5, Android 2.1-3.x)
‡ -moz-Präfix erforderlich bis Version 28, ungeprefixelt ab 29.
Ich weiß, dass dies nicht der neueste Artikel ist, aber er ist immer noch „googelfähig“ und enthält einen entscheidenden Fehler: Für jede Firefox-Version, sogar für das aktuelle Firefox Nightly 22, ist ein Präfix erforderlich. Wenn jemand den Rat des Autors befolgt, ohne zu prüfen, und Präfixe weglässt, wird die Website in Firefox komplett kaputtgehen.
Guter Punkt, m_gol.
MDN-Artikel über Box-Sizing
Korrekt, behoben.
Ab Version 29 ungeprefixelt. Darunter gepreft.
Firefox benötigt das Browser-Präfix bis FF 27, Safari benötigt das Präfix bis Version 5.
Wie bereits erwähnt, wird das Präfix weiterhin von Firefox benötigt, und eine zusätzliche Anmerkung/Aktualisierung: Der Firefox-Bug, der in den Browserunterstützungsdetails erwähnt wird, wurde in Firefox 17 behoben, wie auf derselben MDN-Seite erwähnt: https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing
Es wäre vielleicht hilfreich, auch darüber zu schreiben, wie sich die Eigenschaft box-sizing auf die verschiedenen JavaScript-Breiten-/Höheneigenschaften auswirkt. Obwohl ich weiß, wie sich box-sizing ziemlich gut auf CSS-Eigenschaften auswirkt, ist es in JavaScript normalerweise eine Frage von Versuch und Irrtum, die am besten geeignete zu finden.
Ich denke, im ersten Fall (content-box) wäre die Breite 150 Pixel (100 Pixel + 2 * 20 Pixel + 2 * 5 Pixel), nicht 140 Pixel.
Ich stimme diesem Kommentar zu. Die Gesamtbreite der Box für
content-boxist: Breite + Innenabstand + Rahmen. Die Breite des Inhalts ist auf 100 Pixel eingestellt + die Breite des Innenabstands ist auf 20 Pixel **für beide Seiten** eingestellt + die Breite des Rahmens ist auf 5 Pixel **für beide Seiten** eingestellt. Ihre Gleichung ist daher, wie ngwdaniel erwähnte, (100 Pixel + 2 * 20 Pixel + 2 * 5 Pixel), was 150 Pixel ergibt.Korrekt, behoben.
Hallo Leute,
Ich versuche, diese Eigenschaft anzuwenden, um ein Problem zu beheben, das ich auf der folgenden Seite habe,
http://hdl.fitzroviadigital.co.uk/corporate-investment-banking/
Der Hauptabschnitt erzeugt einen weißen Abstand zwischen dem Abschnittsbild und der Spalte daneben, aber selbst durch Anwendung von box-sizing: border-box auf den universellen Selektor ändert sich nichts,
Irgendwelche Hinweise?
Danke für das Teilen dieses Artikels!
Ein Hinweis: Der Firefox-Bug mit min / max-height scheint seit Version 17 behoben zu sein.
Viele Grüße,
Thomas.
Hallo,
Ich habe Probleme mit Safari und Seamonkey, wenn ich border-box auf gefloatete Divs verwende
) http://rh-balingen.de/FLUID-GRIDS/floating.html
Die Höhe kann nicht % sein, sondern muss px sein.
) http://rh-balingen.de/FLUID-GRIDS/safari.html
Bei relativer und absoluter Positionierung ist % in Ordnung.
) http://rh-balingen.de/FLUID-GRIDS/relative.html
Ich verstehe einfach nicht, was das Problem ist …
Nur zur Information: Der Kommentar im Code neben -moz-box-sizing besagt immer noch „Firefox 1, kann das wahrscheinlich weglassen“. Es sollte heißen „Firefox 1-28“.
-webkit-Präfix für den Android-Standardbrowser (Android 2.3.6) erforderlich
Der Artikel war gut! Aber ich war im Abschnitt „Box-Sizing verwenden“ verwirrt.
Eigentlich
Breite des Inhalts: 100px;
Innenabstand: 20px;
Rahmen: 5px;
Gesamt: 125 Pixel;
aber Sie zeigen es als 150 Pixel, wie ist das passiert?
In Ihrer Gleichung addieren Sie nur den Innenabstand und den Rahmen für eine Seite. Die andere Seite muss ebenfalls hinzugefügt werden. Der Innenabstand beträgt 20 Pixel auf einer Seite der Box UND 20 Pixel auf der anderen Seite der Box. Der gesamte Innenabstand muss berücksichtigt werden, daher muss er verdoppelt werden, was insgesamt 40 Pixel ergibt. Dasselbe gilt für den Rahmen. Am Ende lautet die Berechnung also:
100 Pixel Breite des Inhalts
40 Pixel Gesamtbreite des Innenabstands (20 Pixel links + 20 Pixel rechts)
10 Pixel Gesamtbreite des Rahmens (5 Pixel links + 5 Pixel rechts)
150 Pixel insgesamt
Ich habe zwei Divs und gebe ihnen dieselbe Breite und dieselbe Anzahl von Spalten und verwende die obere Div als Header und die untere als Body für den Header, und jetzt ist es so: Wenn der Innenabstand für beide entfernt wird, erhalten sie dieselbe Breite, aber wenn ich padding: 10px; gebe, unterscheiden sie sich um 0,5 Pixel. Ich habe box-sizing gegeben, aber das Problem besteht immer noch...
Ich habe gerade festgestellt, dass die neueste Version von Firefox (50) die Unterstützung für padding-box entfernt hat
https://developer.mozilla.org/en-US/Firefox/Releases/50#Changes_for_Web_developers
Hilfe
Ich möchte einen Kasten um einen Teststring legen, der in der Länge variieren kann, und ihn alles in einer Zeile halten.
Das von mir begonnene CSS sieht wie folgt aus:
boxblueleft {
border: solid;
border-width: 1px;
border-color: #0000ff;
width: 200px;
min-width: 200px;
max-width: 600px;
padding-top: 0px;
padding-right: 25px;
padding-bottom: 0px;
padding-left: 0px;
position: relative;
top: 50%;
left: 50%;
transform: translateX(-50%);
box-sizing: border-box;
white-space: nowrap;
}
Ich kann die tatsächliche Breite voreinstellen, indem ich mit den Parametern width, min-width und max-width herumspiele, aber wenn sich die Länge des längsten Strings ändert, wird der Text die Breite des Kastens überlaufen (wenn er länger wird) oder am Ende des Strings einen riesigen weißen Raum lassen, wenn er kürzer wird…
Kann mir jemand in die richtige Richtung weisen, bitte?
Hilfe
Ich möchte einen Kasten um mehrere Teststrings legen, die in der Länge variieren können, und sie alle in einer Zeile halten.
Das von mir begonnene CSS sieht wie folgt aus:
boxblueleft {
border: solid;
border-width: 1px;
border-color: #0000ff;
width: 200px;
min-width: 200px;
max-width: 600px;
padding-top: 0px;
padding-right: 25px;
padding-bottom: 0px;
padding-left: 0px;
position: relative;
top: 50%;
left: 50%;
transform: translateX(-50%);
box-sizing: border-box;
white-space: nowrap;
}
Ich kann die tatsächliche Breite voreinstellen, indem ich mit den Parametern width, min-width und max-width herumspiele, aber wenn sich die Länge des längsten Strings ändert, wird der Text die Breite des Kastens überlaufen (wenn er länger wird) oder am Ende des Strings einen riesigen weißen Raum lassen, wenn er kürzer wird…
Kann mir jemand in die richtige Richtung weisen, bitte?
Danke, gut erklärt