Box Model

Witaj ponownie.
W poprzedniej lekcji nauczyłeś się stylować tekst za pomocą kolorów, fontów, rozmiarów i odstępów.
Teraz poznajemy jedną z najważniejszych idei w CSS:
Box model.
Każdy element na stronie internetowej jest traktowany jak pudełko.
Nagłówki?
Pudełko.
Akapity?
Pudełko.
Obrazy?
Pudełko.
Przyciski?
Pudełko.
Ten niewinny mały div?
Zdecydowanie pudełko.
CSS patrzy na twoją stronę i widzi pudełka wszędzie.
Jak kierownik magazynu z opiniami o designie.
Czego Się Nauczysz
W tej lekcji nauczysz się:
- czym jest CSS box model;
- co oznacza
content; - co robi
padding; - co robi
border; - co robi
margin; - jak działają
widthiheight; - dlaczego
box-sizingjest ważne; - jak tworzyć czyste cards;
- jak unikać typowych problemów ze spacingiem.
Czym Jest Box Model?
CSS box model opisuje, jak działa przestrzeń wokół każdego elementu.
Każde pudełko ma cztery główne części:
- content;
- padding;
- border;
- margin.
Możesz wyobrazić to sobie tak:
margin
border
padding
content
Content to właściwy tekst, obraz albo zawartość elementu.
Padding to przestrzeń wewnątrz elementu.
Border to linia wokół elementu.
Margin to przestrzeń na zewnątrz elementu.
Prosta idea.
Ogromny wpływ.
Jak odkrycie, że twoje problemy z layoutem nie były magią.
To były pudełka.
Pudełka od samego początku.
Stwórz Projekt
Stwórz folder dla tej lekcji:
mkdir css-lesson4
cd css-lesson4
touch index.html
touch style.css
Powinieneś mieć:
css-lesson4/
index.html
style.css
Otwórz folder w swoim edytorze.
Zbudujemy małą stronę z cards.
Cards są idealne do nauki box model.
Bo używają padding, margin, border, width i czasem wsparcia emocjonalnego.
Napisz HTML
Otwórz index.html i dodaj to:
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS Box Model</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="site-header">
<h1>CSS Box Model</h1>
<p>Każdy element jest pudełkiem. Tak, nawet tamten.</p>
</header>
<main class="page">
<section class="intro-card">
<h2>Czym Jest Box Model?</h2>
<p>
Box model wyjaśnia, jak CSS oblicza rozmiar i odstępy elementów.
</p>
</section>
<section class="cards">
<article class="card">
<h2>Content</h2>
<p>Właściwy tekst, obraz albo zawartość wewnątrz elementu.</p>
</article>
<article class="card">
<h2>Padding</h2>
<p>Przestrzeń między zawartością a border.</p>
</article>
<article class="card">
<h2>Border</h2>
<p>Linia wokół padding i content.</p>
</article>
<article class="card">
<h2>Margin</h2>
<p>Przestrzeń na zewnątrz elementu.</p>
</article>
</section>
</main>
<footer class="site-footer">
<p>Stworzone podczas nauki CSS box model.</p>
</footer>
</body>
</html>
To daje nam:
- header;
- sekcję wprowadzającą;
- cztery cards;
- footer.
Teraz możemy stylować pudełka.
I tak, wreszcie zrozumiemy, dlaczego jeden margin potrafi zepsuć poranek.
Zacznij od Podstawowych Stylów
Otwórz style.css i dodaj:
body {
margin: 0;
font-family: Arial, sans-serif;
background-color: #f3f4f6;
color: #111827;
}
.site-header {
background-color: #111827;
color: white;
text-align: center;
padding: 48px 24px;
}
.page {
max-width: 900px;
margin: 40px auto;
padding: 0 20px;
}
To tworzy podstawowy layout strony.
Zwróć uwagę:
margin: 40px auto;
To centruje container .page poziomo.
40px dodaje przestrzeń pionową.
auto obsługuje przestrzeń po lewej i prawej stronie.
CSS mówi:
“Pozwól mi obliczyć boki.”
I tym razem CSS jest pomocny.
Rzadki moment. Szanujemy.
Content
Content to wewnętrzna część elementu.
Na przykład:
<article class="card">
<h2>Content</h2>
<p>Właściwy tekst, obraz albo zawartość wewnątrz elementu.</p>
</article>
Tekst w środku card to content.
W CSS width i height zwykle opisują rozmiar obszaru content.
Przykład:
.card {
width: 300px;
}
To oznacza, że obszar content ma szerokość 300px.
Ale jest mały problem.
Padding i border mogą zwiększyć końcowy widoczny rozmiar.
Bo CSS lubi niespodzianki.
Nie zawsze dobre niespodzianki.
Padding
Padding to przestrzeń wewnątrz elementu.
Tworzy oddech między content a border.
Dodaj to:
.card {
background-color: white;
padding: 24px;
}
Teraz content nie dotyka krawędzi.
Dużo lepiej.
Bez padding tekst siedzi zbyt blisko border.
Jak ktoś, kto stoi za blisko i tłumaczy JavaScript closures.
Padding sprawia, że wszystko jest wygodniejsze.
Możesz ustawić padding dla wszystkich stron:
padding: 24px;
Albo osobno:
padding-top: 20px;
padding-right: 24px;
padding-bottom: 20px;
padding-left: 24px;
Możesz też użyć shorthand:
padding: 20px 24px;
To oznacza:
- góra i dół:
20px; - lewa i prawa:
24px.
Bardzo przydatne.
Bardzo częste.
Border
Border to linia wokół elementu.
Dodaj to:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
}
Border ma trzy części:
border: width style color;
Przykład:
border: 2px solid #e5e7eb;
To oznacza:
- width:
2px; - style:
solid; - color:
#e5e7eb.
Możesz tworzyć różne style border:
border: 2px solid #2563eb;
border: 2px dashed #f97316;
border: 2px dotted #16a34a;
Borders są przydatne do oddzielania treści.
Ale nie dodawaj border wszędzie.
Za dużo borders sprawia, że strona wygląda jak spreadsheet po załamaniu nerwowym.
Border Radius
Property border-radius zaokrągla rogi.
Dodaj:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
Teraz cards wyglądają miękko.
Mniej ostro.
Mniej jak oficjalny dokument z 2004 roku.
Możesz używać małych albo dużych wartości:
border-radius: 8px;
border-radius: 16px;
border-radius: 999px;
999px jest często używane dla przycisków w kształcie pill.
Przycisk staje się okrągły i przyjazny.
Jakby chciał być kliknięty grzecznie.
Margin
Margin to przestrzeń na zewnątrz elementu.
Dodaj to:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
margin-bottom: 20px;
}
Teraz między cards jest przestrzeń.
Margin oddziela elementy od siebie.
Padding tworzy komfort wewnętrzny.
Margin tworzy dystans zewnętrzny.
Ważna różnica.
Padding mówi:
“Daj przestrzeń mojej treści wewnątrz mnie.”
Margin mówi:
“Daj mi przestrzeń od innych.”
Oba są potrzebne.
Bardzo ludzkie, właściwie.
Width i Height
Możesz kontrolować rozmiar elementów za pomocą width i height.
Przykład:
.card {
width: 300px;
}
Ale uważaj na fixed widths.
Stałe szerokości mogą powodować problemy na małych ekranach.
Często lepiej użyć:
.card {
max-width: 300px;
}
Albo dla containerów:
.page {
max-width: 900px;
}
max-width oznacza:
Nie bądź szerszy niż to, ale możesz być mniejszy, jeśli trzeba.
To przydatne dla responsive design.
Browser dostaje miejsce do oddychania.
A twój layout nie eksploduje na telefonach.
Zawsze dobra rzecz.
Problem z Box-Sizing
Domyślnie CSS używa:
box-sizing: content-box;
To oznacza:
- width dotyczy tylko content;
- padding jest dodawany poza tę width;
- border jest dodawany poza tę width.
Przykład:
.card {
width: 300px;
padding: 20px;
border: 2px solid black;
}
Końcowa widoczna szerokość staje się:
300px content
+ 40px padding
+ 4px border
= 344px total width
To zaskakuje wielu początkujących.
I niektórych doświadczonych developerów.
I prawdopodobnie jedną osobę w piwnicy, która nadal debugguje layout z 2016 roku.
Użyj border-box
Większość nowoczesnych projektów CSS używa tego:
* {
box-sizing: border-box;
}
Dodaj to na początku CSS:
* {
box-sizing: border-box;
}
Teraz width zawiera:
- content;
- padding;
- border.
To sprawia, że rozmiary są łatwiejsze.
Jeśli napiszesz:
.card {
width: 300px;
padding: 20px;
border: 2px solid black;
}
Końcowa widoczna szerokość zostaje 300px.
Dużo bardziej przewidywalne.
CSS staje się trochę mniej chaotyczny.
Doceniamy ten rzadki moment.
Wystylizuj Layout Cards
Dodaj to:
.cards {
display: grid;
gap: 20px;
}
Nie martw się jeszcze za bardzo o Grid.
Będziemy go studiować później.
Na razie zapamiętaj:
gap: 20px;
tworzy przestrzeń między cards.
Często jest to czystsze niż używanie wielu margins.
Teraz zaktualizuj styl card:
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
Ponieważ .cards używa gap, nie potrzebujemy margin-bottom na każdej card.
Czyściej.
Bardziej uporządkowanie.
Mniej CSS spaghetti.
Wystylizuj Intro Card
Dodaj:
.intro-card {
background-color: #eff6ff;
padding: 32px;
border-left: 6px solid #2563eb;
border-radius: 16px;
margin-bottom: 24px;
}
Ta intro card używa:
- background color;
- padding;
- border;
- border radius;
- margin.
To box model w praktyce.
Nie teoria.
Prawdziwy layout.
Pudełko weszło do budynku.
Pełny CSS
Twój style.css powinien wyglądać tak:
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, sans-serif;
background-color: #f3f4f6;
color: #111827;
}
.site-header {
background-color: #111827;
color: white;
text-align: center;
padding: 48px 24px;
}
.page {
max-width: 900px;
margin: 40px auto;
padding: 0 20px;
}
.intro-card {
background-color: #eff6ff;
padding: 32px;
border-left: 6px solid #2563eb;
border-radius: 16px;
margin-bottom: 24px;
}
.cards {
display: grid;
gap: 20px;
}
.card {
background-color: white;
padding: 24px;
border: 2px solid #e5e7eb;
border-radius: 16px;
}
.card h2 {
margin-top: 0;
}
.card p,
.intro-card p {
color: #374151;
font-size: 18px;
line-height: 1.7;
}
.site-footer {
text-align: center;
padding: 24px;
color: #6b7280;
}
Zapisz plik.
Odśwież przeglądarkę.
Teraz powinieneś zobaczyć czyste odstępy i strukturę cards.
To box model działa.
Cicho.
Za kulisami.
Jak ekipa techniczna przebrana za CSS properties.
Częste Błędy
Mylenie margin i padding
Padding jest w środku.
Margin jest na zewnątrz.
Przykład:
.card {
padding: 24px;
margin-bottom: 20px;
}
padding daje przestrzeń wewnątrz card.
margin-bottom daje przestrzeń po card.
Jeśli tekst jest zbyt blisko krawędzi card, użyj padding.
Jeśli cards są zbyt blisko siebie, użyj margin albo gap.
Proste.
Ale łatwo pomylić.
CSS lubi testować koncentrację.
Zapomnienie box-sizing
Bez tego:
* {
box-sizing: border-box;
}
Szerokości mogą stać się zaskakujące.
Używaj border-box w większości projektów.
Dzięki temu layouty są łatwiejsze do zrozumienia.
Twoje przyszłe ja ci podziękuje.
Może nawet kawą.
Dodawanie zbyt dużego margin wszędzie
Źle:
h1 {
margin: 50px;
}
p {
margin: 50px;
}
.card {
margin: 50px;
}
Za dużo margin wszędzie tworzy chaos.
Używaj spacingu świadomie.
Nie jak rzucanie poduszek do pokoju z zamkniętymi oczami.
Praktyka
Stwórz stronę z:
- jednym header;
- jedną intro box;
- trzema cards;
- jednym footer.
Wystylizuj każdą card za pomocą:
- background color;
- padding;
- border;
- border radius;
- spacing między cards.
Użyj:
box-sizing: border-box;
na początku CSS.
Potem eksperymentuj z:
- zwiększaniem padding;
- usuwaniem padding;
- dodawaniem border;
- zmianą margin;
- użyciem
gap.
Obserwuj, jak zmienia się layout.
CSS staje się mniej straszny, kiedy widzisz, co robi każda property.
Mini Wyzwanie
Stwórz trzy pricing cards:
- Basic;
- Standard;
- Premium.
Każda card powinna mieć:
- title;
- price;
- krótki opis;
- button link.
Użyj box model, żeby je wystylizować:
- padding wewnątrz cards;
- border wokół każdej card;
- margin albo gap między cards;
- border radius dla miękkich rogów;
box-sizing: border-box.
Spraw, żeby Premium card wyróżniała się innym kolorem border.
Nie za bardzo.
Tylko tyle, żeby powiedzieć:
“Jestem specjalna.”
Nie:
“Uciekłam z plakatu karnawałowego.”
Podsumowanie
Dzisiaj nauczyłeś się, że:
- każdy HTML element zachowuje się jak pudełko;
- box model zawiera content, padding, border i margin;
- content to właściwy tekst albo media;
- padding tworzy przestrzeń wewnątrz elementu;
- border otacza padding i content;
- margin tworzy przestrzeń na zewnątrz elementu;
widthiheightkontrolują rozmiar;- domyślne sizing może być mylące;
box-sizing: border-boxułatwia liczenie rozmiarów;- spacing jest jedną z najważniejszych części czystego designu.
Box model jest wszędzie.
Jeśli go rozumiesz, CSS staje się dużo łatwiejszy.
Jeśli go ignorujesz, twoje layouty będą zachowywać się jak zbuntowane meble.
A w życiu mamy już wystarczająco zbuntowanych mebli.
Następna Lekcja
W następnej lekcji nauczymy się Flexbox.
Flexbox pomaga wyrównywać i organizować elementy w jednym kierunku.
Rows.
Columns.
Wyśrodkowane rzeczy.
Wreszcie CSS pomoże nam ustawiać elementy bez przywoływania starożytnych duchów.