Kurs HTML i CSS · Moduł 7: SASS
Responsywność i RWD - Dostosowanie Strony do Każdego Ekranu
W tej lekcji9
Witaj ponownie w Starożytnym Egipcie! Tak jak egipscy architekci projektowali budowle, które musiały przetrwać tysiąclecia i służyć różnym celom, tak my musimy tworzyć strony internetowe, które doskonale wyglądają na każdym urządzeniu - od małego smartfona po wielki monitor.
RWD (Responsive Web Design) to podejście, w którym strona automatycznie dostosowuje swój wygląd do rozmiaru ekranu użytkownika. Zamiast tworzyć osobne strony dla telefonów i komputerów, tworzymy jedną stronę, która elastycznie się zmienia.
Viewport Meta Tag - fundament responsywności
Zanim zaczniemy pisać responsywne style, musimy poinformować przeglądarkę mobilną, że nasza strona jest przygotowana na różne ekrany. Robimy to za pomocą specjalnego znacznika <meta> w sekcji <head>:
1<meta name="viewport" content="width=device-width, initial-scale=1.0">Bez tego tagu przeglądarka mobilna wyświetli stronę tak, jakby była przeznaczona na desktop (szerokość ~980px), a potem ją pomniejszy. Z tym tagiem przeglądarka wie, że ma użyć rzeczywistej szerokości ekranu urządzenia.
Media Queries - różne style dla różnych ekranów
Media queries to reguły CSS, które pozwalają stosować różne style w zależności od właściwości urządzenia, najczęściej od szerokości ekranu. Używamy do tego dyrektywy @media:
1/* Style bazowe - dla wszystkich ekranów */
2.container {
3 width: 100%;
4 padding: 10px;
5}
6
7/* Style dla tabletów (768px i więcej) */
8@media (min-width: 768px) {
9 .container {
10 width: 750px;
11 margin: 0 auto;
12 padding: 20px;
13 }
14}
15
16/* Style dla desktopów (1024px i więcej) */
17@media (min-width: 1024px) {
18 .container {
19 width: 960px;
20 padding: 30px;
21 }
22}
23
24/* Style dla dużych ekranów (1200px i więcej) */
25@media (min-width: 1200px) {
26 .container {
27 width: 1140px;
28 }
29}Zwróć uwagę na min-width - oznacza to, że style zadziałają od danej szerokości w górę. To jest podejście mobile-first.
Mobile-First vs Desktop-First
Istnieją dwa główne podejścia do pisania responsywnych stylów:
Mobile-first (zalecane) - zaczynamy od stylów dla najmniejszych ekranów i dodajemy style dla coraz większych za pomocą min-width:
1/* Bazowe style = mobile */
2.cards {
3 display: flex;
4 flex-direction: column;
5 gap: 10px;
6}
7
8/* Tablet */
9@media (min-width: 768px) {
10 .cards {
11 flex-direction: row;
12 flex-wrap: wrap;
13 }
14 .cards .card {
15 width: 48%;
16 }
17}
18
19/* Desktop */
20@media (min-width: 1024px) {
21 .cards .card {
22 width: 31%;
23 }
24}Desktop-first - zaczynamy od dużych ekranów i zmniejszamy za pomocą max-width:
1/* Bazowe style = desktop */
2.cards .card {
3 width: 31%;
4}
5
6@media (max-width: 1023px) {
7 .cards .card {
8 width: 48%;
9 }
10}
11
12@media (max-width: 767px) {
13 .cards {
14 flex-direction: column;
15 }
16 .cards .card {
17 width: 100%;
18 }
19}Mobile-first jest rekomendowane, ponieważ najpierw obsługujemy najbardziej ograniczone urządzenia, a potem dodajemy funkcje na większych ekranach.
Typowe Breakpointy
Breakpointy to punkty graniczne, w których układ strony się zmienia. Oto najczęściej stosowane:
| Urządzenie | Breakpoint |
|---|---|
| Smartfon | do 576px |
| Tablet | 768px |
| Laptop | 992px |
| Desktop | 1200px |
| Duży ekran | 1400px |
Jednostki Responsywne
W RWD zamiast stałych pikseli warto używać jednostek względnych:
- % - procent względem elementu rodzica
- vw / vh - procent szerokości / wysokości okna przeglądarki (viewport)
- rem - względem rozmiaru czcionki elementu root (
<html>) - em - względem rozmiaru czcionki elementu rodzica
1/* Stałe - NIE responsywne */
2.box { width: 400px; font-size: 16px; }
3
4/* Responsywne - dostosowują się do ekranu */
5.box {
6 width: 90%; /* 90% szerokości rodzica */
7 max-width: 600px; /* ale nie więcej niż 600px */
8 font-size: 1rem; /* względem root font-size */
9 padding: 2vw; /* 2% szerokości viewportu */
10 min-height: 50vh; /* minimum 50% wysokości ekranu */
11}Flexbox i flex-wrap w responsywności
Właściwość flex-wrap: wrap sprawia, że elementy flexbox automatycznie przechodzą do nowej linii, gdy zabraknie miejsca. To jeden z najprostszych sposobów na stworzenie responsywnego layoutu:
1.gallery {
2 display: flex;
3 flex-wrap: wrap;
4 gap: 16px;
5}
6
7.gallery-item {
8 flex: 1 1 250px;
9 /* flex-grow: 1 - element rośnie */
10 /* flex-shrink: 1 - element się kurczy */
11 /* flex-basis: 250px - minimalna szerokość */
12}Dzięki flex: 1 1 250px każdy element ma minimalną szerokość 250px. Gdy ekran jest za wąski, elementy automatycznie przeskakują do następnego wiersza - bez potrzeby pisania media queries!
Responsywna nawigacja
Nawigacja to element, który najczęściej zmienia się między mobile a desktop:
1.nav {
2 display: flex;
3 flex-direction: column;
4}
5
6.nav-links {
7 display: none; /* Ukryte na mobile */
8}
9
10.nav-toggle {
11 display: block; /* Hamburger menu na mobile */
12}
13
14@media (min-width: 768px) {
15 .nav {
16 flex-direction: row;
17 justify-content: space-between;
18 align-items: center;
19 }
20
21 .nav-links {
22 display: flex;
23 gap: 20px;
24 }
25
26 .nav-toggle {
27 display: none; /* Ukryj hamburger na desktop */
28 }
29}Podsumowanie kluczowych elementów RWD
- Viewport meta tag - informuje przeglądarkę o responsywności
- Fluid grid - elastyczna siatka oparta na procentach
- Flexible images - obrazy z
max-width: 100% - Media queries - różne style dla różnych rozmiarów ekranu
Te cztery filary RWD to jak cztery ściany egipskiej piramidy - każdy jest niezbędny, aby konstrukcja była stabilna i trwała na wszystkich urządzeniach.
Praktyczne zastosowanie
Przećwicz responsywność w edytorze poniżej. Spróbuj zmienić rozmiary okna podglądu, aby zobaczyć jak layout się dostosowuje:
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>RWD - Responsywna strona</title>
7 <link rel="stylesheet" href="/styles.css">
8</head>
9<body>
10 <nav class="nav">
11 <div class="nav-logo">Piramida RWD</div>
12 <ul class="nav-links">
13 <li><a href="#">Start</a></li>
14 <li><a href="#">O nas</a></li>
15 <li><a href="#">Galeria</a></li>
16 <li><a href="#">Kontakt</a></li>
17 </ul>
18 </nav>
19
20 <header class="hero">
21 <h1>Responsywna Strona</h1>
22 <p>Zmniejsz okno podgladu, aby zobaczyc jak layout sie dostosowuje!</p>
23 </header>
24
25 <main class="cards">
26 <div class="card">
27 <h2>Karta 1</h2>
28 <p>Ta karta dostosowuje sie do ekranu dzieki flex-wrap i media queries.</p>
29 </div>
30 <div class="card">
31 <h2>Karta 2</h2>
32 <p>Na malych ekranach karty ukladaja sie jedna pod druga.</p>
33 </div>
34 <div class="card">
35 <h2>Karta 3</h2>
36 <p>Na duzych ekranach karty sa obok siebie w jednym rzedzie.</p>
37 </div>
38 </main>
39
40 <footer class="footer">
41 <p>© 2024 Piramida RWD</p>
42 </footer>
43</body>
44</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 reguła CSS pozwala na stosowanie różnych stylów w zależności od szerokości ekranu?
2. Która właściwość CSS Flexbox sprawia, że elementy automatycznie zawijają się do nowej linii na mniejszych ekranach?
To 2 z 3 pytań do tej lekcji. Pozostałe rozwiążesz w grze.
Zadania praktyczne w grze
- Układanie w poziomie
Ułóż poprawny viewport meta tag niezbędny dla responsywnej strony:
- Edytor kodu
Stwórz stronę z nagłówkiem i trzema kartami. Użyj @media (min-width: 768px) aby karty wyświetlały się obok siebie na tabletach, a @media (min-width: 1024px) aby dodać większe odstępy na desktopie.
- Klikanie w kolejności
Zbuduj media query dla tabletu w podejściu mobile-first:
- Układanie w pionie
Ułóż media query w podejściu mobile-first dla stylu desktopowego:
- Edytor kodu
Stwórz responsywny układ strony z nagłówkiem (100% szerokości), dwukolumnowym contentem (sidebar 30% + main 70% na desktopie, jedna kolumna na mobile) i stopką. Użyj flexbox oraz media queries z podejściem mobile-first.
- Układanie w pionie
Ułóż warstwy implementacji responsywnej strony w podejściu mobile-first:
- Układanie w pionie
Ułóż urządzenia od najmniejszego ekranu:
- Układanie w pionie
Ułóż kroki implementacji Responsive Web Design w prawidłowej kolejności:
- Edytor kodu
Stwórz nawigację, która na mobile wyświetla się jako lista pionowa (display: block), a na desktopie (min-width: 768px) jako pasek poziomy z elementami obok siebie (display: flex). Dodaj logo po lewej i linki po prawej.
- Układanie w pionie
Ułóż etapy testowania responsywności strony internetowej: