Modeł pudełkowy
Last updated
Last updated
"Życie jest jak pudełko czekoladek – nigdy nie wiesz, co Ci się trafi" – powiedział kiedyś Forrest Gump. Z pisaniem kodu CSS może być podobnie – nigdy nie wiadomo, co się trafi, jeśli nie zna się reguł nim rządzących. Dowiedzieliśmy się właśnie, w jaki sposób przeglądarka decyduje, jakie style nadawać elementom HTML. Kolejnym stopniem wtajemniczenia kodera WWW jest zaznajomienie się z zasadami, w jaki sposób owe elementy są wyświetlane i rozmieszczane na stronie. Tutaj bowiem kryje się najwięcej zabawy!
Na początku tej przygody warto zawrzeć bliską znajomość z modelem pudełkowym. Model pudełkowy pozwala nam precyzyjnie określić wymiary elementu HTML na stronie. Każdy z elementów na stronie można bowiem potraktować jako prostokąt o określonych wymiarach, który może posiadać wypełnienie (padding), obramowanie (border) oraz margines (margin).
Elementom HTML możemy nadawać wysokość i szerokość za pomocą właściwości height
oraz width
.
Tu siedzą czekoladki!
padding
)Widzicie pewnie, że w naszym powyższym przykładzie tekst przylega do krawędzi elementu. Nie wygląda to zbyt estetycznie. W CSS istnieje możliwość zdefiniowania wypełnienia elementu. Nie jest to nic innego jak odległość od zawartości do krawędzi elementu. Wypełnienie definiujemy w poniższy sposób:
Tu siedzą czekoladki!
Wypełnienie może przyjmować różne wartości z każdej strony elementu: z lewej, od góry, z prawej i od dołu. Możemy wtedy wypisać każdą wartość osobno:
Albo zastosować zapis skrótowy:
Żeby nie pogubić się w zapisie skrótowym, spróbujcie zapamiętać, że wartości wypełnienia zapisujemy zgodnie z ruchem wskazówek zegara, zaczynając od góry. Możecie również wykorzystać do tego kolejność liter w słowie TRouBLe
– Top Right Bottom Left
.
border
)O obramowaniu dowiedzieliśmy się w rozdziale 8. Przypomnijmy, że możemy nadawać naszym elementom ramki o różnych stylach.
Tu siedzą czekoladki!
Warto tutaj dodać, że zapis border: 2px dashed salmon
jest zapisem skrótowym. Właściwości ramki możemy zdefiniować także osobno:
margin
)Margines jest to odległość między krawędzią (ramką) elementu a innym, sąsiadującym elementem. Marginesy definiujemy podobnie, jak wypełnienie. Możemy użyć również zapisu skrótowego.
Tu siedzą czekoladki!
Co ciekawe, marginesy mogą również przybierać wartości ujemne, w przeciwieństwie do wypełnień i ramek, które to powinny zawsze przyjmować wartości dodatnie (ujemne w tych przypadkach zostaną zignorowane przez przeglądarkę).
To, jak model pudełkowy został wyliczony przez przeglądarkę, możemy podejrzeć w narzędziach deweloperskich w sekcji dotyczącej CSS w zakładce Computed (w Chrome).
box-model
Przyjrzyjmy się jeszcze raz stylom dla naszego przykładu:
Ile miejsca będzie w rzeczywistości zajmował na stronie? W domyślnym przypadku, wyrenderowaną szerokość elementu możemy obliczyć jako:
Zatem:
Biorąc pod uwagę, że zadeklarowaliśmy width
na 200px
nie brzmi to intuicyjne, prawda? Chcielibyśmy móc ustalać rzeczywiste wymiary elementu deklarując wprost jego wymiary, nie dokonując w głowie żadnych kalkulacji. Sprawa dodatkowo może się skomplikować, jeśli zdecydowalibyśmy się określić te wymiary na przykład w procentach.
Na szczęście w CSS istnieje możliwość zmiany interpretacji modelu pudełkowego. Służy do tego właściwość box-sizing
. Możemy dzięki niej określić, że wartość nadanego przez nas wymiaru będzie równa szerokości/wysokości zawartości zsumowanej z wymiarami wypełnienia i ramki.
W przypadku szerokości będzie to:
Aby uzyskać taki efekt, należy określić wartość tej właściwości jako box-sizing: border-box
.
Tu siedzą czekoladki! Tu siedzą czekoladki!
Obecnie taką interpretację modelu pudełkowego przyjmuje się to jako standard. Najlepiej zrobić to od razu dla wszystkich elementów na stronie. Aby to się udało, musimy umieścić na początku naszego arkusza stylów taki kod:
*
to nic innego jak uniwersalny selektor, który nadaje podane właściwości dosłownie wszystkim elementom naszej strony. Selektorami ::before
oraz ::after
nie musicie się teraz przejmować, wrócimy do nich za chwilę.
Nieco więcej o box-sizing
możecie doczytać w artykule na CSS-Tricks.