Kurs HTML

6.1. Wprowadzenie do modelu pudełkowego (content, padding, border, margin)

Strona główna > Kurs CSS > Rozdział 6: Model Pudełkowy (Box Model) > Wprowadzenie do modelu pudełkowego (content, padding, border, margin)

Czym jest Model Pudełkowy (Box Model)?

Model pudełkowy (Box Model) to fundamentalna koncepcja w CSS, która opisuje, jak elementy HTML są renderowane na stronie jako prostokątne "pudełka". Każde takie pudełko składa się z czterech głównych obszarów, ułożonych warstwowo od środka na zewnątrz:

  1. Obszar treści (Content Area): Miejsce, gdzie wyświetlana jest rzeczywista treść elementu (tekst, obrazki, inne elementy zagnieżdżone). Jego rozmiar jest określany przez właściwości width i height (lub wynika z samej treści).
  2. Wypełnienie (Padding): Przezroczysty obszar otaczający bezpośrednio obszar treści. Służy do stworzenia przestrzeni między treścią a obramowaniem. Rozmiar paddingu kontrolują właściwości padding-*.
  3. Obramowanie (Border): Linia (lub linie) otaczająca padding i treść. Może mieć różną grubość, styl i kolor. Kontrolowane przez właściwości border-*.
  4. Margines (Margin): Przezroczysty obszar otaczający obramowanie. Służy do stworzenia przestrzeni *między* danym elementem a innymi elementami na stronie. Kontrolowany przez właściwości margin-*.

Zrozumienie modelu pudełkowego jest kluczowe do prawidłowego kontrolowania rozmiaru, odstępów i pozycjonowania elementów na stronie.

Diagram modelu pudełkowego CSS pokazujący content, padding, border i margin

Diagram ilustrujący warstwy modelu pudełkowego CSS.

Składowe Modelu Pudełkowego

1. Obszar Treści (Content)

To serce pudełka, zawierające tekst, obrazy lub inne elementy HTML. Jego wymiary (width i height) domyślnie odnoszą się właśnie do tego obszaru (chyba że zmienimy to za pomocą box-sizing, o czym w dalszej części kursu).

2. Wypełnienie (Padding)

Padding tworzy wewnętrzny odstęp wokół treści. Jest zawsze przezroczysty, ale przyjmuje kolor tła (background-color) elementu. Można ustawić padding dla każdej strony indywidualnie (padding-top, padding-right, padding-bottom, padding-left) lub użyć właściwości zbiorczej padding.

.element {
  background-color: lightblue;
  padding: 20px; /* 20px paddingu ze wszystkich stron */
  /* Równoważne: */
  /* padding-top: 20px; */
  /* padding-right: 20px; */
  /* padding-bottom: 20px; */
  /* padding-left: 20px; */
}

3. Obramowanie (Border)

Border to linia rysowana wokół paddingu. Ma trzy główne właściwości: grubość (border-width), styl (border-style) i kolor (border-color). Najczęściej używa się właściwości zbiorczej border lub indywidualnych dla każdej strony (border-top, border-right, etc.).

.element {
  border: 1px solid black; /* 1px grubości, ciągła linia, czarny kolor */
  /* Równoważne: */
  /* border-width: 1px; */
  /* border-style: solid; */
  /* border-color: black; */
}

4. Margines (Margin)

Margin tworzy zewnętrzny odstęp wokół całego elementu (włączając border). Służy do odsuwania elementu od innych elementów. Jest zawsze przezroczysty i nie przyjmuje koloru tła elementu. Podobnie jak padding, można ustawiać marginesy indywidualnie (margin-top, etc.) lub zbiorczo (margin).

.element {
  margin: 15px; /* 15px marginesu ze wszystkich stron */
}

.inny-element {
  margin-top: 10px;
  margin-bottom: 20px;
}

Ważną cechą marginesów pionowych jest **nakładanie się marginesów (margin collapsing)**, o którym powiemy więcej w kolejnych lekcjach.

Całkowity Rozmiar Elementu

Domyślnie (przy box-sizing: content-box;), właściwości width i height określają tylko rozmiar **obszaru treści**. Całkowita szerokość i wysokość zajmowana przez element na stronie jest sumą jego treści, paddingu i obramowania (marginesy wpływają na odstęp od innych elementów, ale nie są wliczane do samego rozmiaru elementu w ten sam sposób).

Całkowita Szerokość = width + padding-left + padding-right + border-left-width + border-right-width

Całkowita Wysokość = height + padding-top + padding-bottom + border-top-width + border-bottom-width

Przykład:

.pudelko {
  width: 200px;
  height: 100px;
  padding: 10px;
  border: 2px solid red;
  margin: 5px;
}

Całkowita szerokość zajmowana przez .pudelko (bez marginesów) = 200px (width) + 10px (padding-left) + 10px (padding-right) + 2px (border-left) + 2px (border-right) = 224px.

Całkowita wysokość zajmowana przez .pudelko (bez marginesów) = 100px (height) + 10px (padding-top) + 10px (padding-bottom) + 2px (border-top) + 2px (border-bottom) = 124px.

Zrozumienie tego obliczenia jest kluczowe przy projektowaniu layoutów, aby uniknąć niespodzianek związanych z rozmiarem elementów.

Zadania praktyczne

Zadanie 1 (z rozwiązaniem)

Stwórz element div z klasą .box. Nadaj mu szerokość 300px, wysokość 150px, tło lightblue, padding 20px ze wszystkich stron i ciągłe, czarne obramowanie o grubości 1px. Oblicz i sprawdź w narzędziach deweloperskich przeglądarki całkowitą szerokość i wysokość elementu.

Rozwiązanie:

HTML:

<div class="box">To jest treść pudełka.</div>

CSS:

.box {
  width: 300px;
  height: 150px;
  background-color: lightblue;
  padding: 20px;
  border: 1px solid black;
}

Obliczenia:

  • Całkowita szerokość = 300px (width) + 20px (padding-left) + 20px (padding-right) + 1px (border-left) + 1px (border-right) = 342px
  • Całkowita wysokość = 150px (height) + 20px (padding-top) + 20px (padding-bottom) + 1px (border-top) + 1px (border-bottom) = 192px

Sprawdź te wartości w zakładce "Computed" lub "Layout" narzędzi deweloperskich przeglądarki, zaznaczając element .box.

Zadanie 2 (do samodzielnego wykonania)

Stwórz dwa elementy div jeden pod drugim. Nadaj każdemu z nich margines dolny margin-bottom: 15px; i margines górny margin-top: 10px;. Zaobserwuj odstęp między nimi. Czy jest on sumą marginesów (15px + 10px = 25px)? (Wskazówka: Pomyśl o nakładaniu się marginesów).

Zadanie 3 (do samodzielnego wykonania)

Weź element .box z Zadania 1. Dodaj do niego margin: 30px;. Jaką całkowitą przestrzeń (włączając marginesy) zajmuje teraz ten element w poziomie i pionie na stronie?

FAQ - Najczęściej zadawane pytania

Czy padding może mieć ujemne wartości?

Nie, właściwości padding nie mogą przyjmować wartości ujemnych. Minimalna wartość to 0.

Czy margin może mieć ujemne wartości?

Tak, właściwości margin mogą przyjmować wartości ujemne. Ujemny margines powoduje "przyciąganie" elementu w danym kierunku, co może prowadzić do nachodzenia elementów na siebie. Jest to czasami używane w zaawansowanych technikach layoutu, ale należy stosować z ostrożnością.

Czy border musi być widoczny?

Nie. Jeśli ustawisz border-style: none; (co jest domyślne dla większości elementów) lub border-width: 0;, obramowanie nie będzie widoczne i nie zajmie miejsca, nawet jeśli ustawisz border-color.

Co to jest box-sizing: border-box;?

Jest to alternatywny sposób obliczania modelu pudełkowego. Przy box-sizing: border-box;, właściwości width i height określają całkowity rozmiar elementu **włączając padding i border**, a obszar treści jest automatycznie zmniejszany, aby zmieścić padding i border wewnątrz zadanych wymiarów. Jest to często uważane za bardziej intuicyjne i zostanie szczegółowo omówione w późniejszej lekcji.