Zastanawiałeś się kiedyś, dlaczego ta sama strona internetowa wygląda świetnie na laptopie, ale już niekoniecznie na telefonie? Albo czemu czasem jakiś element „ucieka” z ekranu, mimo że wydaje się dobrze ustawiony? Wszystko to ma związek z wielkościami elementów w CSS.
Rozmiary w CSS decydują o tym, jak duży będzie dany element (np. div, przycisk, obrazek czy nagłówek), jak będzie reagował na zmianę rozdzielczości ekranu oraz jak będzie wyglądał względem innych elementów. To właśnie od właściwego dobrania jednostek zależy, czy Twoja strona będzie responsywna, czy raczej zamieni się w chaos po otwarciu na smartfonie.
W tym artykule opowiem Ci jakie są rodzaje wielkości w CSS, czym się różnią, kiedy warto ich używać, a także pokażę kilka praktycznych przykładów kodu. Zaczynajmy!
1. Jednostki absolutne – gdy liczy się precyzja
Jednostki absolutne to takie, które zawsze mają tę samą wartość – niezależnie od urządzenia, rozdzielczości czy powiększenia ekranu. Można je porównać do miarki w realnym świecie: centymetr to zawsze centymetr, bez względu na to, gdzie go zmierzysz.
Najpopularniejsze jednostki absolutne to:
| Jednostka | Opis | Przykład użycia |
|---|---|---|
| px | piksel – najmniejsza jednostka ekranu | font-size: 16px; |
| pt | punkt drukarski (1pt = 1/72 cala) | font-size: 12pt; |
| cm | centymetr | width: 10cm; |
| mm | milimetr | margin: 5mm; |
| in | cal (1in = 2.54cm) | width: 1in; |
Najczęściej w webdesignie stosuje się piksele (px). To najbardziej przewidywalna jednostka i świetnie nadaje się do dokładnego ustawiania rozmiarów elementów.
Kiedy używać jednostek absolutnych?
- Gdy projektujesz elementy, które muszą mieć stały rozmiar (np. logo, ikony, ramki).
- Kiedy nie zależy Ci na responsywności, np. w wydruku (CSS dla druku).
Kiedy ich unikać?
- Gdy tworzysz strony responsywne – px nie skaluje się automatycznie do rozmiaru ekranu.
- Gdy chcesz, by tekst dopasowywał się do preferencji użytkownika (np. powiększenia w przeglądarce).
2. Jednostki względne – elastyczne i responsywne
Jednostki względne to zupełne przeciwieństwo absolutnych. Ich wartość zależy od kontekstu – czyli od tego, do czego się odnoszą. Dzięki temu elementy mogą się płynnie dostosowywać do różnych rozdzielczości i ustawień ekranu.
Najważniejsze jednostki względne to:
| Jednostka | Odniesienie | Przykład użycia |
|---|---|---|
| em | do rozmiaru czcionki elementu nadrzędnego | font-size: 2em; |
| rem | do rozmiaru czcionki elementu root (html) | font-size: 1.5rem; |
| % | procentowy udział względem elementu nadrzędnego | width: 50%; |
| vw | szerokość okna przeglądarki (1vw = 1%) | width: 100vw; |
| vh | wysokość okna przeglądarki (1vh = 1%) | height: 100vh; |
| vmin / vmax | mniejszy / większy z wymiarów (szerokości lub wysokości) | font-size: 2vmin; |
| ch | szerokość znaku „0” w aktualnej czcionce | width: 40ch; |
a) EM i REM – czyli font-size pod kontrolą
Jednostki em i rem są szczególnie ważne, gdy chodzi o rozmiary czcionek.
- em – odnosi się do rozmiaru czcionki elementu nadrzędnego.
- rem – odnosi się do rozmiaru czcionki zdefiniowanej w
html(czyli do korzenia dokumentu).
Przykład:
html {
font-size: 16px;
}
p {
font-size: 1em; /* 16px */
}
div {
font-size: 1.5em; /* 24px */
}
h1 {
font-size: 2rem; /* zawsze 32px, niezależnie od rodzica */
}
Dlaczego to ważne?
Bo jeśli zmienisz font-size w html, cała strona automatycznie dostosuje się do tej zmiany. To podstawa responsywnej typografii.
b) Jednostki procentowe (%) – proporcje przede wszystkim
Jednostka % jest bardzo intuicyjna – określa wartość w odniesieniu do elementu nadrzędnego.
Na przykład, jeśli rodzic ma szerokość 1000px, a dziecko width: 50%, to jego szerokość wyniesie 500px.
Przykład:
.container {
width: 1000px;
}
.box {
width: 50%; /* 500px */
}
Jednostki procentowe świetnie nadają się do układów elastycznych, np. przy tworzeniu gridów lub flexboxów.
c) VW i VH – wymiary zależne od okna przeglądarki
- 1vw = 1% szerokości viewportu (czyli okna przeglądarki)
- 1vh = 1% wysokości viewportu
Dzięki nim można tworzyć elementy, które zawsze zajmują określoną część widocznego ekranu – niezależnie od rozdzielczości.
Przykład:
.hero {
width: 100vw;
height: 100vh;
background: linear-gradient(to right, #4facfe, #00f2fe);
}
Ten kod sprawi, że tło zajmie cały ekran – idealne np. na stronę główną lub landing page.
3. Jednostki funkcjonalne (clamp, min, max)
CSS rozwija się bardzo dynamicznie, a jedną z najciekawszych nowości są funkcje matematyczne takie jak clamp(), min() i max(). Pozwalają one tworzyć responsywne rozmiary bez media queries!
a) clamp()
Składnia:
font-size: clamp(min, preferred, max);
Działa jak „bezpieczny zakres” – określa minimalną, preferowaną i maksymalną wartość.
Przykład:
h1 {
font-size: clamp(1.5rem, 4vw, 3rem);
}
Tutaj:
- minimalny rozmiar to 1.5rem,
- optymalny (skalujący się z szerokością okna) – 4vw,
- maksymalny – 3rem.
Dzięki temu nagłówek będzie wyglądał dobrze na każdym ekranie, bez dodatkowych zapytań o media.
b) min() i max()
min()wybiera mniejszą z podanych wartości,max()wybiera większą.
Przykład:
div {
width: min(90vw, 800px);
}
Element nigdy nie przekroczy szerokości 800px, ale będzie skalował się do 90% szerokości ekranu.
To genialny sposób na tworzenie elastycznych layoutów.
4. Co warto wiedzieć o jednostkach „fr” w gridzie CSS
W CSS Grid pojawiła się jeszcze jedna ciekawa jednostka – fr (fraction).
Oznacza „ułamek dostępnego miejsca”.
Przykład:
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
}
Tutaj środkowa kolumna będzie dwa razy szersza niż pozostałe.
To bardzo wygodne i czytelne – nie trzeba już liczyć procentów czy pikseli.
5. Jak dobrać odpowiednią jednostkę?
To jedno z najczęstszych pytań początkujących web developerów.
Nie ma jednej uniwersalnej odpowiedzi, ale można kierować się prostą zasadą:
| Typ elementu | Zalecane jednostki |
|---|---|
| Tekst | rem, em, czasem clamp() |
| Marginesy, paddingi | em, rem, % |
| Layout (szerokości, kolumny) | %, vw, fr |
| Wysokość pełnoekranowych sekcji | vh |
| Elementy dekoracyjne, ikony | px, rem |
Pro tip:
Ustal sobie w html bazowy rozmiar czcionki, np. 16px, i dalej wszystko licz w rem.
Dzięki temu łatwo utrzymasz spójność projektu i zachowasz responsywność.
6. Praktyczny przykład – responsywny box w CSS
Na koniec zróbmy małe ćwiczenie.
Stworzymy prosty, responsywny box, który zmienia rozmiar i tekst w zależności od ekranu – bez użycia media queries.
Kod HTML:
<div class="box"> <h2>Witaj w świecie CSS!</h2> <p>Ten box dostosowuje się automatycznie do rozmiaru okna.</p> </div>
Kod CSS:
html {
font-size: 16px;
}
.box {
width: min(90vw, 600px);
margin: 5vh auto;
padding: 2rem;
background: linear-gradient(135deg, #4facfe, #00f2fe);
color: white;
border-radius: 1rem;
box-shadow: 0 0 15px rgba(0,0,0,0.2);
text-align: center;
}
h2 {
font-size: clamp(1.5rem, 4vw, 2.5rem);
}
p {
font-size: clamp(1rem, 2vw, 1.25rem);
}
Efekt?
Box wygląda świetnie na każdym ekranie – od telefonu po duży monitor.
Dzięki min() i clamp() zachowuje proporcje i czytelność bez skomplikowanych zapytań o media.
7. Najczęstsze błędy przy stosowaniu jednostek w CSS
- Używanie
pxdo wszystkiego
→ Zamiast tego stosujremlub%, by elementy się skalowały. - Mieszanie
emirembez zrozumienia różnic
→ Pamiętaj, żeemdziedziczy rozmiar po rodzicu, arempohtml. - Sztywne wartości w layoutach
→ Zamiastwidth: 1200px;lepiej użyćmax-width: 90vw;lubmin(100%, 1200px). - Brak testowania na różnych urządzeniach
→ To, co wygląda dobrze na monitorze, może być nieczytelne na smartfonie.
Podsumowanie – wybierz mądrze, projektuj elastycznie
Jak widzisz, CSS daje nam ogromne możliwości, jeśli chodzi o kontrolę nad rozmiarami elementów.
Masz do dyspozycji:
- jednostki absolutne (dokładne, ale sztywne),
- jednostki względne (elastyczne i responsywne),
- funkcje matematyczne (
clamp,min,max), - oraz nowoczesne jednostki fr w gridzie.
Dobrze dobrane jednostki to klucz do responsywnego, czytelnego i estetycznego designu.
Nie bój się eksperymentować – połączenie rem, vw, fr i clamp() może dać naprawdę niesamowite efekty.