W3docs

CSS box-sizing Eigenschaft

Die box-sizing-Eigenschaft definiert die Berechnung von Breite und Höhe eines Elements. Beispiele ansehen und selbst ausprobieren.

Die box-sizing-Eigenschaft steuert, wie die width und height eines Elements berechnet werden — konkret, ob padding und border innerhalb dieser Maße gezählt oder zusätzlich zu ihnen addiert werden. Sie ist eine der CSS3-Eigenschaften.

Diese Seite erklärt den Unterschied zwischen den beiden Box-Modellen (content-box und border-box), warum border-box für die meisten Layouts der moderne Standard ist und wie man es auf eine gesamte Seite anwendet.

Wie das Box-Modell die Größe beeinflusst

Standardmäßig (content-box) legen width und height nur die Größe des Inhaltsbereichs fest. Padding und Border werden dann obendrauf addiert, sodass die gerenderte Box größer ist als der angegebene Wert:

  • Breite + Padding + Border = gerenderte Breite des Elements
  • Höhe + Padding + Border = gerenderte Höhe des Elements

Eine Box mit width: 400px, padding: 50px auf jeder Seite und einem 5px-Border auf jeder Seite belegt beispielsweise 400 + 100 + 10 = 510px an horizontalem Platz. Dies ist eine häufige Quelle von Layout-Fehlern: Zwei 50%-breite Spalten mit beliebigem Padding oder Border passen nicht nebeneinander, weil jede breiter als die Hälfte des Containers wird.

Mit box-sizing: border-box werden Padding und Border stattdessen in die deklarierte Breite und Höhe eingerechnet. Ein width: 50%-Element bleibt exakt halb so breit wie der Container, egal wie viel Padding oder Border hinzugefügt wird — deshalb setzen die meisten Stylesheets jedes Element auf border-box.

Anfangswertcontent-box
Gilt fürAlle Elemente, die Breite und Höhe akzeptieren.
VererbbarNein.
AnimierbarNein.
VersionCSS3
DOM-Syntaxobject.style.boxSizing = "border-box";

Syntax

Syntax der CSS box-sizing-Eigenschaft

box-sizing: content-box | border-box | initial | inherit;

Das folgende Beispiel zeigt zwei <div>-Elemente mit identischen Deklarationen für width, height, padding und border — sie unterscheiden sich nur im Wert von box-sizing, was ausreicht, damit sie in unterschiedlichen Größen gerendert werden:

Beispiel der box-sizing-Eigenschaft

Beispiel der CSS box-sizing-Eigenschaft mit den Werten content-box und border-box

<!DOCTYPE html>
<html>
  <head>
    <style>
      .div1 {
        box-sizing: content-box;
        width: 400px;
        height: 50px;
        padding: 50px;
        border: 5px double #1c87c9;
      }
      .div2 {
        box-sizing: border-box;
        width: 400px;
        height: 50px;
        padding: 50px;
        border: 5px dashed #8ebf42;
      }
    </style>
  </head>
  <body>
    <h2>Box-sizing Example</h2>
    <hr />
    <h3>box-sizing: content-box (default):</h3>
    <div class="div1">The width for this div is set as 400px. Thus, the full width is 400px + 10px (left and right border) + 100px (left and right padding) = 510px.</div>
    <br />
    <h3>box-sizing: border-box:</h3>
    <div class="div2">The width and height apply to all parts of the div element: The full width is 400px.</div>
  </body>
</html>

Ergebnis

CSS box-sizing-Eigenschaft

Mit content-box ist die gerenderte Box breiter als die deklarierte width, da Padding und Border hinzuaddiert werden. Mit border-box werden Padding und Border in die deklarierte width und height eingerechnet, sodass die Box exakt in der angegebenen Größe bleibt.

border-box ist der Wert, auf den man beim Erstellen von Layouts am häufigsten zurückgreift. Er macht Elementgrößen vorhersehbar und beseitigt eine ganze Klasse von Problemen — man kann Padding oder einen Border hinzufügen, ohne Breiten neu berechnen zu müssen.

Beispiel zweier nebeneinander platzierter Boxen mit Border

Hier ermöglicht border-box, dass zwei 50%-breite gefloatete Boxen nebeneinander sitzen, obwohl jede einen eigenen Border und Padding hat. Mit dem Standard-content-box würden Border und Padding die kombinierte Breite über 100% hinaus vergrößern und die zweite Box in eine neue Zeile zwingen.

Beispiel der CSS box-sizing-Eigenschaft mit dem Wert border-box

<!DOCTYPE html>
<html>
  <head>
    <style>
      div.container {
        width: 100%;
        border: 2px double #1c87c9;
      }
      div.box {
        box-sizing: border-box;
        width: 50%;
        border: 3px solid #ccc;
        float: left;
        padding: 3px;
      }
    </style>
  </head>
  <body>
    <h2>Box-sizing Example</h2>
    <p>Here you can see two bordered boxes defined side by side.</p>
    <div class="container">
      <div class="box">Left part</div>
      <div class="box">Right part</div>
      <div style="clear:both;"></div>
    </div>
  </body>
</html>

border-box auf die gesamte Seite anwenden

Anstatt box-sizing für einzelne Elemente festzulegen, wenden die meisten Projekte es einmalig mit dem universellen Selektor auf alle Elemente an. Dies ist das am häufigsten verwendete CSS-Reset in modernen Stylesheets:

*,
*::before,
*::after {
  box-sizing: border-box;
}

Die Selektoren *::before und *::after stellen sicher, dass generierte Inhaltsboxen derselben Regel folgen. Nach diesem Reset bedeuten width und height überall "die Gesamtgröße einschließlich Padding und Border", was den meisten Menschen intuitiv entspricht.

Browser-Unterstützung

box-sizing wird in allen modernen Browsern unterstützt, einschließlich aktueller Versionen von Chrome, Firefox, Safari und Edge. Es ist eine stabile CSS3-Funktion und benötigt für heutige Browser keine Vendor-Präfixe.

Werte

WertBeschreibung
content-boxDie Eigenschaften width und height umfassen den Inhalt, jedoch nicht Padding, Border oder Margin. Dies ist der Standardwert.
border-boxDie Eigenschaften width und height umfassen Inhalt, Padding und Border, jedoch nicht die Margin.
initialSetzt die Eigenschaft auf ihren Standardwert.
inheritErbt die Eigenschaft vom übergeordneten Element.

Übung

Übung
Was bewirkt die CSS-Eigenschaft 'box-sizing'?
Was bewirkt die CSS-Eigenschaft 'box-sizing'?
Was this page helpful?