Menu

Model pudełkowy CSS: content, padding, border, margin

Każdy element to pudełko z czterech warstw: treści, paddingu, obramowania i marginesu. Dowiedz się, jak każda warstwa wpływa na rozmiar, jak box-sizing: border-box zmienia obliczenia, i zobacz każdą warstwę zmierzoną na żywo.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Cztery warstwy każdego pudełka

Każdy element na stronie jest rysowany jako prostokąt z czterech warstw, od środka na zewnątrz:

  1. Treść (content): tekst, obraz albo elementy potomne, o rozmiarze ustalonym przez width i height.
  2. Padding: odstęp wewnątrz pudełka, między treścią a obramowaniem. Widać na nim tło elementu.
  3. Obramowanie (border): linia wokół paddingu.
  4. Margines (margin): odstęp poza obramowaniem, który odpycha inne pudełka. Zawsze przezroczysty.

W przykładzie każda warstwa ma własny kolor: niebieska treść, zielony padding, ciemne obramowanie i bursztynowy obszar wokół pudełka, czyli margines (rysowany przez opakowanie, bo sam margines jest przezroczysty).

Linię pod pudełkiem mierzy przeglądarka: 160 + 20 + 20 + 10 + 10 = 220px. Margines dodaje do tego kolejne 24px z każdej strony, ale leży poza pudełkiem, więc nie wchodzi w te 220.

Obliczanie szerokości: content-box a border-box

Domyślnie (box-sizing: content-box) width ustawia tylko treść. Padding i obramowanie są dodawane na wierzch, więc pudełko wychodzi szersze niż wpisana liczba. Przy box-sizing: border-box width oznacza całe pudełko, a treść kurczy się, żeby zrobić miejsce na padding i obramowanie.

content-box (domyślnie)border-box
width oznaczaTreśćTreść + padding + obramowanie
width: 200px; padding: 20px; border: 5px250px szerokości200px szerokości
Obszar treści w tym przypadku200px150px
MarginesNa zewnątrz, nie wlicza sięNa zewnątrz, nie wlicza się

Reset border-box

Ponieważ border-box sprawia, że rozmiary się sumują, prawie każdy nowoczesny arkusz stylów zaczyna się od tej reguły:

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

Najbardziej liczy się to przy procentach. Dwie kolumny z width: 50% i paddingiem nie mieszczą się w jednej linii przy content-box, bo każda ma 50% plus swój padding:

(Komentarze HTML usuwają odstęp między kolumnami inline-block, który w przeciwnym razie dodałby kilka pikseli.)

Model pudełkowy w DevTools

Każda przeglądarka rysuje model pudełkowy za ciebie. Kliknij element prawym przyciskiem myszy, wybierz Zbadaj i otwórz kartę Computed (Układ w Firefoksie): schemat pokazuje rozmiar treści w środku, otoczony wartościami paddingu, obramowania i marginesu. Najechanie na element w panelu Elements też barwi stronę: treść na niebiesko, padding na zielono, margines na pomarańczowo.

Pudełka liniowe działają inaczej

Opisany wyżej model pudełkowy dotyczy pudełek blokowych, takich jak <div> i <p>. Elementy liniowe, takie jak <span>, <a> i <strong>, zawijają się w linii tekstu i inaczej traktują odstępy w pionie:

WłaściwośćNa elemencie liniowym
width, heightIgnorowane
Poziomy padding, obramowanie, marginesStosowane, odpychają sąsiadów na boki
Pionowy padding i obramowanieRysowane, ale nie odpychają linii powyżej i poniżej
Pionowy marginesIgnorowany

display: inline-block daje elementowi w linii pełny model pudełkowy: szerokość, wysokość, padding i margines zajmują miejsce. Szczegóły każdej warstwy znajdziesz na stronach padding w CSS i margin w CSS.

Częste błędy

  • Dodanie paddingu do pudełka o stałej szerokości i zdziwienie, że urosło. Przy content-box padding i obramowanie są dodawane do width. Użyj border-box.
  • Oczekiwanie, że margines przyjmie kolor tła. Margines jest zawsze przezroczysty; kolorową przestrzeń zrób paddingiem.
  • Ustawianie height albo pionowego marginesu na elemencie liniowym. Nic się nie dzieje; użyj display: inline-block albo block.
  • Pominięcie obramowania w obliczeniach. Obramowanie 1px na elemencie z width: 100% sprawia, że przy content-box jest on o 2px za szeroki, co może wywołać poziomy pasek przewijania.
  • Mylenie marginesu i paddingu. W skrócie: padding jest wewnątrz obramowania, margines na zewnątrz. Strona margin a padding zestawia je obok siebie.

Najczęściej zadawane pytania

Co to jest model pudełkowy CSS?

Zasada, według której każdy element jest rysowany jako prostokątne pudełko z czterech warstw: treści, paddingu wokół niej, obramowania wokół paddingu i marginesu poza obramowaniem. Szerokość, wysokość i odstępy w CSS ustawia się właśnie na tych warstwach.

Co robi box-sizing: border-box?

Sprawia, że width i height obejmują padding i obramowanie. Pudełko z width: 200px, padding: 20px i obramowaniem 5px ma wtedy dokładnie 200px szerokości, a obszar treści kurczy się do 150px. Wartość domyślna, content-box, dodaje padding i obramowanie na wierzch, co daje 250px.

Jak oblicza się całkowitą szerokość elementu?

Przy domyślnym content-box: szerokość + lewy i prawy padding + lewe i prawe obramowanie. Przy border-box: samo width. W obu przypadkach margines leży poza pudełkiem, więc zwiększa miejsce, które element zajmuje, a nie jego własną szerokość.

Czy margines jest częścią modelu pudełkowego?

Tak, to najbardziej zewnętrzna warstwa, ale zawsze jest przezroczysta i nigdy nie wlicza się do własnej szerokości ani tła elementu. Tylko odpycha sąsiednie pudełka.

Czy ustawiać box-sizing: border-box na wszystkim?

Większość projektów tak robi, wpisując *, *::before, *::after { box-sizing: border-box; } na początku arkusza stylów. Dzięki temu szerokości w procentach i padding sumują się tak, jak się tego spodziewasz, a frameworki takie jak Bootstrap i Tailwind mają ten sam reset.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ