← Lekcje
CSS · lekcja 05

Model pudełkowy: z czego składa się pudełko

Każdy element strony to prostokątne pudełko - dziś sprawdzimy, z czego się składa

  1. Cztery warstwy pudełka: content, padding, border, margin
  2. box-sizing: content-box a box-sizing: border-box
  3. Sprawdzanie pudełka w narzędziach deweloperskich (F12)
  4. Ćwiczenie: pudełko w Waszym pliku style.css
Rozgrzewka · 3 minuty

Trzy pytania z poprzedniej lekcji

  1. Jakie trzy rodziny czcionek poznaliście na poprzedniej lekcji?
  2. Po co stosuje się stos czcionek zapasowych zamiast jednej czcionki?
  3. Którą właściwością zdejmiecie domyślne podkreślenie linku?
Część 1 · cztery warstwy pudełka

Content, padding, border, margin

Każdy element HTML to prostokątne pudełko z czterech warstw, jedna wewnątrz drugiej: content (treść), padding (odstęp wewnętrzny), border (obramowanie), margin (odstęp zewnętrzny). Porównanie: pudełko na prezent - prezent to content, bibułka to padding, karton to border, wolne miejsce do sąsiada na półce to margin.

margin - 10 px border - 5 px padding - 25 px content 350×150 Ile faktycznie zajmuje pudełko? width: 350px; padding: 25px; border: 5px solid; margin: 10px; 350 + 25+25 + 5+5 = 410 px szerokość widocznego pudełka (bez marginesu) z marginesem: przestrzeń do sąsiada to 430 px
MDN: „The padding sits around the content as white space... The border box wraps the content and any padding... The margin is the outermost layer... whitespace between this box and other elements” · przykład liczbowy MDN: „The actual space taken up by the box will be 410px wide (350 + 25 + 25 + 5 + 5)” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Box_model
Część 2 · box-sizing: content-box

Domyślnie: width dotyczy tylko treści

Domyślnie w CSS obowiązuje standardowy model pudełka: width i height ustawiają rozmiar samej treści (content). padding i border dokładają się do tego rozmiaru, więc widoczne pudełko jest większe niż zadeklarowana szerokość. To wartość domyślna box-sizing - nie trzeba jej wpisywać.

.box {
  width: 350px;
  padding: 25px;
  border: 5px solid black;
}
/* faktyczna szerokość: 350 + 25+25 + 5+5 = 410px */
MDN: „In the standard box model, if you set width and height property values on a box, these values define the width and height of the content box. Any padding and borders are then added to those dimensions to get the total size taken up by the box” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Box_model
Część 3 · box-sizing: border-box

Alternatywa: width to cała widoczna szerokość

Właściwość box-sizing: border-box włącza alternatywny model: width ustawia od razu całą widoczną szerokość pudełka (z paddingiem i borderem w środku), a treść kurczy się, żeby się zmieścić.

content-box (domyślne) content 350 całość: 410 px box-sizing: border-box content 290 całość: dokładnie 350 px

Ciekawostka z MDN: box-sizing: border-box nie jest niczym nowym dla przeglądarki. Elementy table, select, button oraz pola input typu radio, checkbox, reset i submit mają ten tryb ustawiony domyślnie, jeszcze zanim ktokolwiek wpisze tę regułę ręcznie.

MDN: „To turn on the alternative model for an element, set box-sizing: border-box on it... In the alternative box model, any width is the width of the visible box on the page. The content area width is that width minus the width for the padding and border” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Box_model · ciekawostka: developer.mozilla.org/en-US/docs/Web/CSS/box-sizing
Część 4 · sprawdzanie w przeglądarce

Nie liczcie w pamięci - sprawdźcie w F12

Narzędzia deweloperskie przeglądarki (klawisz F12) pokazują realny box model wybranego elementu: cztery warstwy z dokładnymi liczbami w pikselach, bez liczenia na kartce.

margin 10 border 5 padding 25 350 × 150 content - treść elementu padding - odstęp wewnętrzny border - obramowanie margin - odstęp zewnętrzny
MDN: „Your browser developer tools can make understanding the box model far easier - they can show you the size of the element plus its margin, padding, and border” · developer.mozilla.org/docs/Learn_web_development/Core/Styling_basics/Box_model
CSS · egzamin

Tak pytają na egzaminie

1. background-color: red; color: blue; margin: 40px; W języku CSS zdefiniowano formatowanie paragrafu, które przypisze mu następujące cechy:

  1. tło czerwone, kolor tekstu niebieski, marginesy zewnętrzne ustawione na wartość 40 px
  2. tło czerwone, kolor tekstu niebieski, marginesy wewnętrzne ustawione na wartość 40 px
  3. tło niebieskie, kolor tekstu czerwony, marginesy zewnętrzne ustawione na wartość 40 px
  4. tło niebieskie, kolor tekstu czerwony, marginesy wewnętrzne ustawione na wartość 40 px

2. div { border: solid 2px blue; margin: 20px; } W języku CSS zdefiniowano styl. Sformatowana stylem sekcja będzie zawierała obramowanie o szerokości

  1. 2 px oraz marginesy wewnątrz tego obramowania.
  2. 20 px oraz marginesy wewnątrz tego obramowania.
  3. 2 px oraz marginesy na zewnątrz tego obramowania.
  4. 20 px oraz marginesy na zewnątrz tego obramowania.
CKE, E.14, styczeń 2020, zadanie 7 · CKE, E.14, czerwiec 2017, zadanie 7
Ćwiczenie · przy komputerze · 20 minut

Ćwiczenie: pudełko w Waszym CSS

  1. W style.css dodaj głównemu kontenerowi padding (np. 20px), border (np. 2px solid #333333) i margin (np. 30px).
  2. Na kartce policz całkowitą szerokość pudełka: treść + padding z obu stron + border z obu stron (bez marginesu).
  3. Otwórz F12 → Elements/Inspektor, kliknij kontener, znajdź panel Box model i sprawdź wyliczenie.
  4. Zapisz plik, wciśnij F5 i sprawdź stronę w przeglądarce.

Ma się pojawić: główny kontener strony z widocznym odstępem wewnętrznym, obramowaniem i odstępem od innych elementów; Wasze wyliczenie na kartce zgodne z liczbami w panelu Box model.

Pytania kontrolne

Trzy pytania na koniec

  1. Wymieńcie cztery warstwy pudełka w kolejności od treści na zewnątrz.
  2. Czym różni się padding od margin?
  3. Co zmienia box-sizing: border-box w porównaniu z domyślnym zachowaniem?

To tyle na dziś: temat CSS - model pudełkowy otwarty, na następnej lekcji szerokość, zaokrąglenia i cień.

Z realnych wdrożeń

A jak to wygląda w produkcji?

Na lekcjiW produkcjiStatus
Domyślny box-sizing: content-boxPrawie każdy reset CSS (np. Normalize.css) globalnie ustawia * { box-sizing: border-box; }, bo tak łatwiej liczyć szerokościzastępowane
Liczenie szerokości na kartceDeweloperzy sprawdzają box model w narzędziach deweloperskich (F12) zamiast liczyć ręcznienarzędzia
Dowolna wartość margin/paddingSystemy projektowe (np. Bootstrap, Tailwind) narzucają spójną skalę odstępów (np. co 4 lub 8 px) zamiast przypadkowych liczbrozbudowane
Jedno pudełko na przykładzieCały układ strony to dziesiątki zagnieżdżonych pudełek, a marginesy sąsiadów potrafią się ze sobą zlewać (collapsing margins)rozbudowane