Das CSS Box-Modell einfach erklärt
In CSS wird jedes HTML-Element als eine Rechteck-Box behandelt – egal ob ein Button, ein Absatz oder ein Bild. Deshalb nennt man das Ganze Box-Modell (englisch: Box Model). Stell dir vor, jedes Element auf deiner Webseite ist wie ein Paket – mit Inhalt, Polsterung, Kartonwand und etwas Abstand zum nächsten Paket.
Aufbau des Box-Modells
Ein Element besteht im Box-Modell aus vier Bereichen – von innen nach außen:
/* Eine Beispiel-Box mit Farben zur Veranschaulichung */
.box {
background-color: lightblue; /* Inhalt sichtbar machen */
padding: 20px; /* Innenabstand */
border: 5px solid darkblue; /* Rahmen */
margin: 30px; /* Abstand zu anderen Elementen */
}
Was bewirken die Werte?
Angenommen, du hast diese .box
mit folgendem Inhalt:
<div class="box">Hallo Welt!</div>
Dann ergibt sich folgender Aufbau:
width: 200px
), kommt noch Padding und Border hinzu – es wird also größer als 200px!200px (Inhalt) = + 20px + 20px (Padding links + rechts) + 5px + 5px (Border links + rechts) = 250px Gesamtbreite
Lösung: box-sizing: border-box
Dann bleibt die Box exakt 200px breit, weil Padding und Border mit eingerechnet werden.
.box {
width: 200px;
padding: 20px;
border: 5px solid;
box-sizing: border-box;
}
Beispiel der Boxen
Im folgenden Beispiel siehst du zwei fast gleich aussehende Boxen. Beide haben:
eine feste Hintergrundfarbe (hellblau), padding: 20px
(Innenabstand), border: 5px
(Rahmen), und margin: 30px
(Abstand nach außen).
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Box</title>
<style>
body {
background-color: lightgray; /* Für besseren Kontrast */
}
.box {
width: 200px;
background-color: lightblue; /* Inhalt sichtbar machen */
padding: 20px; /* Innenabstand */
border: 5px solid darkblue; /* Rahmen */
margin: 30px; /* Abstand zu anderen Elementen */
}
.box2 {
width: 200px;
background-color: lightblue; /* Inhalt */
padding: 20px;
border: 5px solid blue;
margin: 30px;
box-sizing: border-box;
}
</style>
</head>
<body>
<div class="box">Hallo Welt!</div>
<div class="box2">Hallo Welt!</div>
</body>
</html>