Każdy element na stronie jest prostokątnym „pudełkiem”: ma treść, wcięcie wewnątrz, ramkę i odstęp na zewnątrz. Zrozumienie tego modelu pozwala przewidzieć, ile miejsca zajmie element, i wyjaśnić typowe zagadki: dlaczego karta jest szersza, niż zapisano w CSS, i dlaczego odstęp między dwoma blokami jest mniejszy, niż wynikałoby z dodawania.
Scenariusz jest przeznaczony na 45 minut dla klasy, która zna podstawy HTML i CSS — na przykład po pierwszej lekcji CSS. Uczniowie mierzą rozmiary w narzędziach deweloperskich przeglądarki, więc potrzebna jest przeglądarka z konsolą (F12).
Przygotowanie stanowisk
Rozpakuj pakiet z sekcji materiałów do folderu model-pudelkowy. W folderze start jest strona z dwoma elementami .karta i pustym miejscem na reguły w style.css. HTML-a nie zmieniasz. Po zapisie pliku odśwież stronę. Gotowy efekt jest w folderze rozwiazanie. Internet nie jest wymagany.
Pomiary: po kliknięciu elementu prawym przyciskiem i wybraniu Zbadaj (lub po F12) przeglądarka pokazuje na zakładce Elementy schemat pudełka z wymiarami treści, wcięcia, ramki i marginesu.
Cele i plan lekcji
Po zajęciach uczeń potrafi:
- wskazać cztery warstwy pudełka: treść,
padding,borderimargin; - obliczyć całkowitą szerokość elementu dla
box-sizing: content-boxiborder-box; - zapisać skrócone właściwości
padding,marginiborder; - wyjaśnić zwijanie marginesów pionowych i wyśrodkować blok przez
margin: 0 auto.
| Czas | Praca na lekcji |
|---|---|
| 0–5 min | Problem: karta ma width: 300px, a zajmuje więcej — dlaczego? |
| 5–15 min | Warstwy pudełka i pomiary w narzędziach deweloperskich |
| 15–22 min | box-sizing, skrócone zapisy, margines |
| 22–37 min | Trzy zadania samodzielne |
| 37–42 min | Sprawdzenie pomiarów i omówienie błędów |
| 42–45 min | Pytania kontrolne |
Cztery warstwy pudełka
Od środka na zewnątrz:
- treść (content) — tekst, obraz; jej szerokość ustawia
width; - padding — wolne miejsce między treścią a ramką, ma kolor tła elementu;
- border — ramka;
- margin — przezroczysty odstęp od sąsiednich elementów, nie jest częścią tła.
Domyślnie width oznacza szerokość samej treści (box-sizing: content-box). Padding i ramkę przeglądarka dolicza z każdej strony. Dla karty:
.karta {
width: 300px;
padding: 20px;
border: 2px solid #1e3a8a;
}
całkowita szerokość to 300 + 2 · 20 + 2 · 2 = 344 px. Taką wartość pokazuje przeglądarka dla tej karty (sprawdzono pomiarem w przeglądarce). Kłopot pojawia się, gdy kilka elementów ma mieścić się obok siebie albo w kontenerze o stałej szerokości: trzeba odejmować padding i ramkę przy każdej zmianie.
Wygodniejszy jest box-sizing: border-box, przy którym width obejmuje treść, padding i ramkę:
*, *::before, *::after {
box-sizing: border-box;
}
Teraz ta sama karta ma całkowitą szerokość 300 px, a na treść zostaje 300 − 40 − 4 = 256 px. Reguła z gwiazdką działa na wszystkie elementy i jest dziś standardem w większości projektów.
Skrócone zapisy i margines
Właściwości padding i margin przyjmują od jednej do czterech wartości:
| Zapis | Znaczenie |
|---|---|
padding: 20px | wszystkie cztery strony |
padding: 10px 20px | góra i dół 10, lewo i prawo 20 |
margin: 16px auto 24px | góra 16, lewo i prawo auto, dół 24 |
margin: 0 8px 4px 2px | góra, prawo, dół, lewo (zgodnie z ruchem wskazówek zegara) |
Wartość auto dla lewego i prawego marginesu bloku o ustalonej szerokości wyśrodkowuje go poziomo w kontenerze. Dlatego karta z width: 300px i margin: 16px auto 24px stoi na środku strony.
Marginesy pionowe sąsiednich bloków zwijają się: gdy dolny margines pierwszej karty ma 24 px, a górny margines drugiej 16 px, odstęp między nimi nie wynosi 40 px, tylko tyle, ile większy z nich — 24 px. To zachowanie dotyczy marginesów pionowych elementów blokowych i często zaskakuje uczniów.
Trzy zadania
Zadanie 1. Pomiar bez border-box. W start/style.css dopisz regułę .karta z width: 300px, padding: 20px i border: 2px solid #1e3a8a. Najpierw oblicz całkowitą szerokość karty, a potem sprawdź ją w narzędziach deweloperskich.
Zadanie 2. border-box. Dodaj na początku arkusza regułę *, *::before, *::after { box-sizing: border-box; }. Zmierz kartę ponownie. Ile wynosi teraz całkowita szerokość i ile miejsca zostaje na treść?
Zadanie 3. Marginesy. Ustaw margin: 16px auto 24px i dodaj kartom tło #ffffff oraz zaokrąglenie 8 px. Sprawdź, czy karty są na środku i jaki jest odstęp między nimi. Wyjaśnij, dlaczego nie wynosi 40 px.
Dla chętnych: zmień padding na 10px 30px i oblicz, ile miejsca na treść zostanie przy border-box. Następnie wyłącz border-box w narzędziach deweloperskich i sprawdź całkowitą szerokość.
Rozwiązania i wyniki pomiarów
Arkusz z pakietu (rozwiazanie/style.css):
*, *::before, *::after {
box-sizing: border-box;
}
.karta {
width: 300px;
padding: 20px;
border: 2px solid #1e3a8a;
border-radius: 8px;
background: #ffffff;
margin: 16px auto 24px;
}
| Zadanie | Wynik |
|---|---|
| 1 | całkowita szerokość 344 px (300 + 40 + 4) |
| 2 | całkowita szerokość 300 px, treść 256 px |
| 3 | karty wyśrodkowane, odstęp między nimi 24 px |
| Dla chętnych | padding: 10px 30px: treść 300 − 60 − 4 = 236 px; bez border-box całkowita szerokość 300 + 60 + 4 = 364 px |
Odstęp 24 px wynika ze zwijania marginesów: dolny margines pierwszej karty (24 px) i górny drugiej (16 px) nakładają się, a obowiązuje większy z nich. Pomiary 344, 300, 256 i 24 px sprawdzono w przeglądarce dla stron z pakietu.
Typowe błędy
| Objaw | Co sprawdzić |
|---|---|
Karta jest szersza niż width | Domyślny content-box; dodaj box-sizing: border-box. |
| Pojawia się przewijanie w poziomie | Elementy mają szerokość 100% i dodatkowy padding lub ramkę bez border-box. |
| Karta nie jest na środku | Brak ustalonej szerokości albo margin: auto użyte tylko dla jednej strony. |
| Odstęp mniejszy niż suma marginesów | Zwijanie marginesów pionowych — to nie błąd. |
| Margines nie zmienia tła | Margines jest poza tłem; do zmiany wcięcia wewnątrz użyj padding. |
Zapis margin: 16 24 nie działa | Brak jednostki; poza zerem każda wartość wymaga px, rem itp. |
Pytania kontrolne i punktacja
- Z jakich czterech warstw składa się pudełko elementu?
- Ile wynosi całkowita szerokość elementu
width: 200px; padding: 10px; border: 1px solidwcontent-box? - Co oznacza
margin: 0 autodla bloku o stałej szerokości?
Odpowiedzi: Treść, padding, ramka i margines. 200 + 2 · 10 + 2 · 1 = 222 px. Blok jest wyśrodkowany poziomo w kontenerze.
Proponowana punktacja (razem 10 punktów): zadanie 1 — obliczenie 344 px 1 pkt, pomiar 1 pkt; zadanie 2 — poprawna reguła border-box 1 pkt, szerokości 300 i 256 px 2 pkt; zadanie 3 — skrócony zapis marginesu 1 pkt, wyśrodkowanie 1 pkt, wyjaśnienie odstępu 24 px 2 pkt; poprawnie zapisane jednostki 1 pkt. Zadanie dla chętnych nie jest wymagane do pełnej oceny.
Materiały do pobrania
Rozpakuj ZIP przed otwarciem plików. Materiały są dostępne bez logowania; publiczne rozwiązanie służy nauce i samodzielnemu sprawdzeniu, a nie poufnemu sprawdzianowi.
Co dalej po modelu pudełkowym?
Kolejne kroki to jednostki (px, %, rem), układy Flexbox i Grid oraz pozycjonowanie elementów. Ten materiał rozwija dział o układzie strony w kursie CSS w TablicaPro, gdzie znajdziesz prezentacje, ćwiczenia i testy do prowadzenia lekcji.
Źródła techniczne: model pudełkowy w dokumentacji MDN oraz zwijanie marginesów w MDN. Jeśli uczysz też układów, zobacz lekcję o Flexboksie i lekcję o tabelach HTML.
Poprowadź kolejne lekcje CSS
Pełny kurs: prezentacje, ćwiczenia i testy do pracy z klasą.
Kup dostęp do kursu CSS →