Lekcja 03
Box model, odstępy i rozmiary elementów
W tej lekcji poznasz sposób, w jaki przeglądarka liczy rozmiar każdego elementu. To fundament pracy z kartami, sekcjami, przyciskami i układami, które mają wyglądać równo na różnych ekranach.
Cele lekcji
Po ukończeniu tej lekcji będziesz umieć:
- wyjaśnić, czym jest box model i z jakich części składa się element,
- odróżnić
content,padding,borderimargin, - ustawić
box-sizing: border-boxi zrozumieć, dlaczego ułatwia budowanie layoutu, - korzystać z
width,max-width,heightimin-heightbez blokowania responsywności, - planować odstępy tak, aby interfejs był czytelny i spójny.
Czym jest box model?
Każdy element HTML jest traktowany przez przeglądarkę jak prostokątne pudełko. Nawet tekst, link, karta produktu czy cała sekcja strony mają swoje miejsce, rozmiar i odstępy. Box model opisuje, z czego składa się to pudełko.
Myśl o elemencie jak o karcie: w środku jest treść, wokół treści możesz dodać oddech, następnie obramowanie, a na zewnątrz odstęp od innych elementów.
Content, padding, border i margin
Box model składa się z czterech warstw. Każda odpowiada za inny rodzaj przestrzeni.
contentto właściwa treść elementu: tekst, obraz, ikona albo formularz.paddingto odstęp wewnętrzny między treścią a krawędzią elementu.borderto obramowanie elementu.marginto odstęp zewnętrzny między elementem a jego otoczeniem.
.lesson-card {
padding: 1.5rem;
border: 1px solid #dbe2f1;
margin-bottom: 1rem;
}
W tym przykładzie treść karty nie dotyka obramowania dzięki padding, a kolejne elementy nie przyklejają się do karty dzięki margin-bottom.
box-sizing: border-box
Domyślnie CSS liczy szerokość elementu w sposób, który bywa zaskakujący dla początkujących: width obejmuje tylko treść, a padding i border zwiększają całkowity rozmiar pudełka.
Dlatego w nowoczesnych projektach bardzo często stosuje się globalną regułę:
* {
box-sizing: border-box;
}
Dzięki temu deklaracja width: 300px oznacza całkowitą szerokość elementu razem z paddingiem i obramowaniem. Layout jest łatwiejszy do przewidzenia.
border-box zmniejsza liczbę sytuacji, w których element z ustaloną szerokością nagle wypycha układ poza ekran.width, max-width, height i min-height
Rozmiary w CSS warto ustawiać elastycznie. Stała szerokość może wyglądać dobrze na dużym ekranie, ale na telefonie łatwo zepsuje układ. Dlatego często lepiej łączyć width z max-width.
.container {
width: 100%;
max-width: 64rem;
margin-inline: auto;
padding-inline: 1rem;
}
Taki kontener może zwężać się na małych ekranach, ale nie rośnie bez końca na dużych monitorach.
Z wysokością zachowaj ostrożność. height wymusza konkretną wysokość i może obcinać treść, gdy tekstu będzie więcej. min-height ustala minimalną wysokość, ale pozwala elementowi urosnąć, jeśli treść tego wymaga.
Margin kontra padding
Najprostsze rozróżnienie brzmi: padding buduje przestrzeń wewnątrz elementu, a margin odsuwa element od innych elementów.
- Użyj
padding, gdy treść potrzebuje oddechu wewnątrz karty, przycisku lub sekcji. - Użyj
margin, gdy chcesz zwiększyć odległość między sąsiednimi blokami. - Nie używaj dużego paddingu tylko po to, aby odsunąć cały element od innych elementów.
.button {
padding: 0.75rem 1rem;
}
.section {
margin-top: 3rem;
}
Odstępy między elementami
Spójne odstępy sprawiają, że strona wygląda spokojniej i czyta się ją szybciej. Zamiast wpisywać przypadkowe wartości, korzystaj z prostego rytmu, np. 0.5rem, 1rem, 1.5rem, 2rem.
W komponentach opartych o flexbox lub grid bardzo wygodne jest gap, bo opisuje odstęp między elementami bez dokładania marginesów do każdego dziecka.
.card-list {
display: grid;
gap: 1rem;
}
To czytelniejsze niż ręczne dodawanie margin-bottom do wszystkich kart i usuwanie marginesu z ostatniej.
Przykład karty
Poniżej mały przykład HTML i CSS, który łączy box model, odstępy i elastyczną szerokość.
<article class="profile-card">
<p class="profile-card__label">Mini komponent</p>
<h2>Karta kursu CSS</h2>
<p>Krótki opis lekcji, który ma wygodny odstęp od krawędzi karty.</p>
</article>
.profile-card {
box-sizing: border-box;
width: 100%;
max-width: 28rem;
margin: 2rem auto;
padding: 1.5rem;
border: 1px solid #dbe2f1;
border-radius: 12px;
background-color: #ffffff;
}
Dobre praktyki
- Ustaw
box-sizing: border-boxglobalnie na początku arkusza stylów. - Preferuj
max-widthzamiast sztywnej szerokości, gdy element ma działać na wielu ekranach. - Nie ustawiaj
heightna tekstowych kartach, jeśli nie masz konkretnego powodu. Częściej wybierajmin-height. - Stosuj jeden rytm odstępów w całym projekcie, aby interfejs nie wyglądał przypadkowo.
- Do odstępów w listach kart, paskach narzędzi i gridach używaj
gap, gdy układ na to pozwala.
Mini zadanie
Utwórz kartę informacyjną z nagłówkiem, krótkim tekstem i linkiem. Następnie w CSS:
- dodaj
padding, aby treść nie dotykała krawędzi, - ustaw
border, aby zobaczyć granice elementu, - dodaj
margin, aby odsunąć kartę od innych elementów, - ustaw
width: 100%imax-width, aby karta była responsywna, - zmień wartości paddingu, bordera, marginesu i
max-width, a potem sprawdź, jak wpływają na układ.
Na koniec odpowiedz sobie na pytanie: które odstępy należą do wnętrza komponentu, a które opisują jego relację z otoczeniem?
Podsumowanie lekcji
Wiesz już, że każdy element jest pudełkiem z treścią, paddingiem, obramowaniem i marginesem. Rozumiesz, dlaczego box-sizing: border-box ułatwia przewidywanie szerokości oraz kiedy wybierać padding, margin, max-width i min-height.
Kolejny krok: sprawdź, jak właściwość display decyduje o tym, czy element zachowuje się jak blok, tekst w linii czy mały komponent w tekście.