Co to jest model pudełkowy, czyli box model w CSS

Każdy początkujący powinien zaczynać naukę od podstaw. W przypadku CSS takim fundamentem jest model pudełkowy. Zanim zaczniesz uczyć się jakichkolwiek innych zagadnień związanych z CSSem, w pierwszej kolejności powinnaś skupić się właśnie na nim! W tym wpisie użyję różnych przykładów, aby pokazać Ci, jak model pudełkowy działa w praktyce, tak abyś pod koniec tego artykułu miała pełne zrozumienie pojęcia box model w CSS.

Zanim zagłębimy się w temacie, musisz wiedzieć, że każdy element na stronie internetowej to tak naprawdę prostokątne pudełko. Brzmi trochę tajemniczo, ale spokojnie zaraz wszystko stanie się jasne. 😀

Box model, czyli model pudełkowy w CSS

Aby pobudzić trochę Twoją wyobraźnie, muszę poprosić Cię o jedną małą przysługę. Otwórz tę stronę w przeglądarce chrome i najedź kursorem na jakikolwiek element na stronie, a następnie kliknij prawym przyciskiem myszy i wybierz Zbadaj element. Otworzą Ci się narzędzia deweloperskie devTools(to tutaj dzieje się mała magia, ale o tym w innym wpisie 😉). Ostatnie co musisz zrobić to znaleźć zakładkę Styles (z boku bądź u dołu) i zjechać do jej końca.

Twoim oczom powinno ukazać się coś podobnego do obrazka niżej:

model pudełkowy z chrome devtools

 

Tadam! Jeśli wszystko poszło zgodnie z planem, to właśnie udało Ci się zlokalizować i zobaczyć na żywo model pudełkowy Twojego elementu. Brawo! 🥳

Jak widać, każda część modelu jest zaznaczona swoim kolorem i ma przypisaną nazwę. Wyjątkiem jest tutaj zawartość pudełka, czyli to niebieskie pole na samym środku(200×15). Przeanalizujmy, jak działają poszczególne elementy modelu i jakie są między nimi różnice.

Model pudełkowy składa się z 4 części:

  • content (zawartość, treść)
  • padding (odstęp wewnętrzny)
  • border (obramowanie)
  • margin (odstęp zewnętrzny)

Są to wszystkie elementy, których potrzebuje przeglądarka, aby stworzyć model pudełkowy. Na szczęście dzięki CSS możemy kontrolować każdy z nich z osobna. Zobaczmy jak.

Naszym punktem wyjścia niech będą zwykłe divy z treścią:

See the Pen
Box model CSS – default
by frontowisko (@frontowisko)
on CodePen.

content

Content to zawartość naszego pudełka, która ma określoną szerokość i wysokość. Przykładem może być tekst, który w zależności od rozmiaru czcionki będzie przyjmował inny rozmiar. Jeśli chcemy mu narzucić konkretne wymiary, można je ustawić za pomocą właściwości CSS.

See the Pen
Box model CSS – content
by frontowisko (@frontowisko)
on CodePen.

 

margin

Dzięki tej właściwości możemy dać naszym pudełkom trochę przestrzeni. Margin określa odstęp, jaki zajmie nasz element od pozostałych. W poniższym przykładzie odsunęłam pudełko B 50 pikseli w prawo i w dół, dzięki temu oddaliło się ono od pudełka A. Bez marginesów nasze pudełka byłby do siebie na stałe “przylepione”.

See the Pen
Box model CSS – margin
by frontowisko (@frontowisko)
on CodePen.

 

padding

Określa przestrzeń między zawartością a krawędzią pudełka, możemy w ten sposób odpychać treść elementu od jego granic.

See the Pen
Box model CSS – padding
by frontowisko (@frontowisko)
on CodePen.

Zauważyłaś, że po dodaniu paddingu nasze pudełko się trochę powiększyło? Jego obecne wymiary to już nie 200×200 tylko 260×260 (o tym, dlaczego tak się stało, opowiem Ci za chwilę). Jeśli chciałabyś, żeby pudełko zachowało swój wcześniejszy rozmiar, mimo dodania odstępu wewnętrznego to masz dwie opcje.

Pierwszą z nich jest zmiana pierwotnych wymiarów elementu, tak aby po dodaniu do nich nadanego paddingu otrzymać pożądane wymiary – w naszym przykładzie byłoby to ustawienie rozmiaru na 140×140. 140px szerokości + 30px paddingu z lewej + 30px paddingu z prawej daje razem docelowe 200px całkowitej szerokości. Wysokość w tym przykładzie wyliczamy w taki sam sposób.


Pewnie doszłaś do podobnego wniosku co ja i reszta świata, że nie jest to zbyt wygodne rozwiązanie. Można się dość łatwo rąbnąć przy liczeniu i zajmuje to zbyt dużo czasu. Dlatego pewnie interesuje Cię ten drugi sposób. Cierpliwości, zaraz do niego dojdziemy. 😎

border

Idąc od środka, następnym krokiem byłoby zdefiniowanie obramowania. Border otacza treść i margines wewnętrzny. Nawet jeśli go nie ustawisz, on nadal istnieje. Tylko że jego szerokość jest wtedy równa zero.

See the Pen
Box model CSS – border
by frontowisko (@frontowisko)
on CodePen.

Analogicznie do tego, co wydarzyło się po dodaniu paddingu, nasz box się powiększył. Niebawem dowiesz się dlaczego i co z tym zrobić.

Kolejnym sposobem na pokazanie box model może być mini galeria:

box model gallery example

źródło: https://web.dev/

  • Content to grafika.
  • Padding to odległość między ramą a grafiką.
  • Border to ramka, która zapewnia dosłowne obramowanie grafiki.
  • Marginesy to przestrzeń między każdą ramką.

Model pudełkowy i ratująca życie wielu frontend developerom właściwość box-sizing 🤩

Tak jak wyszło z omawianych przykładów, niektóre wartości modelu pudełkowego nie respektują nadanego width i height. Wspominałam, że można zaktualizować wymiary pudełka po nadaniu bordera lub paddingu, ale sama pewnie zauważyłaś, że jest to dosyć niewygodne i czasochłonne. Tutaj całe na biało przychodzi box-sizing. Właściwość, która domyślnie przyjmuje wartość content-box, dlatego nadawane przez nas wymiary ograniczają się tylko do pola treści, a nie zwracają uwagi na padding czy border i nie wliczają go w rozmiar całego pudełka.

See the Pen
Box model – content-box
by frontowisko (@frontowisko)
on CodePen.

Dodajemy do naszego kodu właściwość box-sizing ustawioną na border-box:

See the Pen
Box model – border-box
by frontowisko (@frontowisko)
on CodePen.

I voilà. Mamy to. Od razu lepiej!

Teraz nasze dzieci są zamknięte wewnątrz rodzica (małe pudełeczka w dużym pudle). CSS jest dokładnie taki sam w obu przypadkach z wyjątkiem jednego dodatku:

Ustawianie box sizing na border-box w CSS

Ten kawałek kodu sprawia, że każdy element na stronie wie, żeby obliczać swoją szerokość i wysokość razem z dodanym paddingiem i borderem. W ten sposób kończymy z bałaganem, w którym nasze pudełka zmieniały zdefiniowany wcześniej rozmiar i wprowadzamy przewidywalność do naszego stylowania. Unikamy czasochłonnego kontrolowania wymiarów elementów. Dlatego border-box to najczęściej używana przez deweloperów wartość dla box-sizing.

Podsumowanie

Model pudełkowy, czyli box model ma fundamentalne znaczenie dla zrozumienia, jak wszystko będzie się układać na Twojej stronie i jaki sposób będziesz budować swoje layouty. Mamy nadzieję, że teraz doskonale rozumiesz, jak działa model pudełkowy i jak możesz go wykorzystać na swoją korzyść. Koniecznie sprawdź zamieszczone przeze mnie próbki kodu na codepenie i przetestuj swoją wiedzę w praktyce. 😊

PS. Daj znać czy ten wpis do dla Ciebie coś nowego, czy raczej odświeżenie wiedzy. Jeśli uważasz, że jest coś, o czym zapomniałam, a mogłoby dopełnić ten wpis, to podziel się tym w komentarzu. 😀

 

Przydatne linki:

https://www.youtube.com/watch?v=ly0umuICvXg
https://web.dev/learn/css/box-model/
https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model

1 komentarz