Kurs HTML i CSS · Moduł 5: Responsywność
Responsywne kontenery i fluid layout
W tej lekcji7
Wyobraź sobie, że budujesz świątynię w Starożytnym Egipcie. Mury świątyni muszą pomieścić wszystkie hieroglify i rzeźby, niezależnie od tego, czy sala jest wąska, czy przestronna. W CSS działa to podobnie - kontener musi dostosowywać się do dostępnej przestrzeni.
Stały vs płynny layout
Tradycyjnie strony budowano ze stałymi szerokościami w pikselach. Problem? Na małym telefonie treść wychodziła poza ekran, a na ogromnym monitorze zajmowała tylko wąski pasek.
1/* Stały layout - ZŁE podejście */
2.container {
3 width: 960px; /* Zawsze 960px, niezależnie od ekranu */
4}Rozwiązaniem jest fluid layout (płynny układ) - używamy jednostek procentowych zamiast pikseli:
1/* Płynny layout - DOBRE podejście */
2.container {
3 width: 100%; /* Zajmuje całą dostępną szerokość */
4}Wzorzec responsywnego kontenera
Kluczowym wzorcem w responsywnym CSS jest responsywny kontener. Łączy trzy właściwości:
1.container {
2 width: 100%; /* Pełna szerokość na małych ekranach */
3 max-width: 1200px; /* Ograniczenie na dużych ekranach */
4 margin: 0 auto; /* Wycentrowanie na stronie */
5}Jak to działa?
- Na telefonie (320px szerokości) - kontener ma 320px (100% ekranu)
- Na tablecie (768px) - kontener ma 768px (100% ekranu)
- Na laptopie (1366px) - kontener ma 1200px (max-width) i jest wycentrowany
- Na dużym monitorze (1920px) - kontener nadal ma 1200px, wycentrowany z marginesami po bokach
To jak korytarz w piramidzie - treść nigdy nie jest zbyt szeroka, ale na wąskich przejściach wykorzystuje całą dostępną przestrzeń.
box-sizing: border-box
Jedna z najważniejszych deklaracji CSS dla responsywnego projektowania:
1*, *::before, *::after {
2 box-sizing: border-box;
3}Bez border-box, padding i border dodają się do szerokości elementu:
1/* Bez border-box */
2.box {
3 width: 100%;
4 padding: 20px;
5 /* Rzeczywista szerokość: 100% + 40px padding = WYCHODZI POZA EKRAN! */
6}
7
8/* Z border-box */
9.box {
10 box-sizing: border-box;
11 width: 100%;
12 padding: 20px;
13 /* Rzeczywista szerokość: 100% (padding jest WEWNĄTRZ) */
14}To fundamentalna zasada - bez border-box element o width: 100% z paddingiem będzie szerszy niż ekran!
Praktyczny przykład: Sekcja z treścią
Zobaczmy jak zbudować responsywną sekcję strony bez użycia Flexboxa czy Grida:
1<section class="features">
2 <div class="container">
3 <h2>O Starożytnym Egipcie</h2>
4 <p>Cywilizacja egipska trwała ponad 3000 lat...</p>
5 </div>
6</section>1* {
2 box-sizing: border-box;
3}
4
5.features {
6 width: 100%; /* Sekcja na całą szerokość */
7 padding: 40px 20px; /* Wewnętrzne odstępy */
8 background-color: #F4E4C1;
9}
10
11.container {
12 width: 100%;
13 max-width: 1200px;
14 margin: 0 auto; /* Centrowanie */
15 padding: 0 20px; /* Boczne padding - treść nie przylega do krawędzi */
16}Wiele kontenerów na stronie
Siła wzorca kontenera polega na tym, że możesz go użyć wielokrotnie:
1<header class="hero">
2 <div class="container">
3 <h1>Piramida Cheopsa</h1>
4 </div>
5</header>
6
7<section class="about">
8 <div class="container">
9 <p>Informacje o piramidzie...</p>
10 </div>
11</section>
12
13<footer class="footer">
14 <div class="container">
15 <p>Stopka strony</p>
16 </div>
17</footer>Każda sekcja może mieć inny kolor tła na 100% szerokości, ale treść wewnątrz jest zawsze ograniczona przez kontener. Jeśli grafik zmieni projekt i trzeba poszerzyć układ z 1200px na 1440px - zmieniasz jedną wartość max-width w klasie .container.
Padding jako bezpieczna przestrzeń
Na urządzeniach mobilnych treść nie powinna przylegać do samej krawędzi ekranu. Dlatego dodajemy padding:
1.container {
2 width: 100%;
3 max-width: 1200px;
4 margin: 0 auto;
5 padding-left: 16px; /* Bezpieczna przestrzeń po lewej */
6 padding-right: 16px; /* Bezpieczna przestrzeń po prawej */
7}Na większych ekranach (tabletach) można zwiększyć ten padding za pomocą media queries:
1@media (min-width: 768px) {
2 .container {
3 padding-left: 32px;
4 padding-right: 32px;
5 }
6}Podsumowanie
Responsywny kontener to fundament każdej strony internetowej:
width: 100%- dopasowanie do małych ekranówmax-width- ograniczenie na dużych ekranachmargin: 0 auto- centrowaniebox-sizing: border-box- padding nie powiększa elementupadding- bezpieczna przestrzeń od krawędzi
Wypróbuj ten wzorzec w edytorze poniżej:
Kod do tej lekcji: index.html
1<!DOCTYPE html>
2<html lang="pl">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>Responsywne kontenery - Fluid Layout</title>
7 <link rel="stylesheet" href="style.css">
8</head>
9<body>
10 <header class="hero">
11 <div class="container">
12 <h1>Piramida Cheopsa</h1>
13 <p>Odkryj tajemnice responsywnych kontenerów</p>
14 </div>
15 </header>
16
17 <section class="about">
18 <div class="container">
19 <h2>Kontener z max-width</h2>
20 <p>Ten kontener ma <code>width: 100%</code> i <code>max-width: 1200px</code>. Na małych ekranach zajmuje całą szerokość, na dużych jest ograniczony do 1200px i wycentrowany.</p>
21 <p>Zmień rozmiar okna przeglądarki, aby zobaczyć jak kontener się zachowuje!</p>
22 </div>
23 </section>
24
25 <section class="comparison">
26 <div class="container">
27 <h2>Stały vs Płynny layout</h2>
28
29 <div class="box fixed-box">
30 <h3>Stały (fixed)</h3>
31 <p>width: 960px - nie dostosowuje się do ekranu</p>
32 </div>
33
34 <div class="box fluid-box">
35 <h3>Płynny (fluid)</h3>
36 <p>width: 100% + max-width: 800px - dopasowuje się!</p>
37 </div>
38 </div>
39 </section>
40
41 <section class="box-sizing-demo">
42 <div class="container">
43 <h2>box-sizing: border-box</h2>
44
45 <div class="box without-border-box">
46 <h3>Bez border-box</h3>
47 <p>width: 100% + padding: 30px = wychodzi poza kontener!</p>
48 </div>
49
50 <div class="box with-border-box">
51 <h3>Z border-box</h3>
52 <p>width: 100% + padding: 30px = mieści się idealnie!</p>
53 </div>
54 </div>
55 </section>
56
57 <footer class="footer">
58 <div class="container">
59 <p>Stopka strony - ten sam kontener co powyżej</p>
60 </div>
61 </footer>
62</body>
63</html>Widzisz błąd w tej lekcji?
Sprawdź się
Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.
1. Która technika CSS pozwala elementowi automatycznie dopasować szerokość do kontenera rodzica?
Zadania praktyczne w grze
- Edytor kodu
Napisz CSS dla responsywnego kontenera .container: width: 100%, max-width: 1200px, margin: 0 auto, padding: 0 20px. Dodaj box-sizing: border-box dla selektora *. Sekcja .temple powinna mieć width: 100%, padding: 40px 0 i tło #F4E4C1.
- Układanie w pionie
Ułóż deklarację CSS responsywnego kontenera (selektor → pełna szerokość → ograniczenie → centrowanie):
- Układanie w pionie
Ułóż zasady responsive design od najbardziej podstawowej:
- Układanie w pionie
Ułóż źródła stylów CSS od najniższego do najwyższego priorytetu: