Responsywność w webdesignie
We współczesnym webdesignie responsywność strony to podstawa. Strona responsywna to taka, która dopasowuje się do różnych rozmiarów i typów ekranów – od dużych monitorów komputerowych, przez tablety, po smartfony. Zamiast tworzyć osobną wersję mobilną, projektuje się jeden serwis, który płynnie zmienia układ i wygląd elementów w zależności od dostępnej przestrzeni.
Co to znaczy w praktyce?
Na komputerze o szerokim ekranie możemy wyświetlać obok siebie kilka kolumn, duże obrazy, pełne menu na pasku nawigacyjnym. Na telefonie (wąski ekran) te same elementy powinny ułożyć się w wygodny jednokolumnowy widok: np. kolumny "złamane" jedna pod drugą, menu zwinięte w przycisk (tzw. hamburger menu – to już bardziej zaawansowane, ale ogólna idea jest taka, że elementy się przeorganizują). Tekst powinien być czytelny bez potrzeby powiększania, linki i przyciski na tyle duże, by można było w nie trafić palcem.
Różnica: komputer vs telefon
- Rozdzielczość/rozmiar ekranu: Telefony mają fizycznie mały ekran, choć często wysoką rozdzielczość w pikselach. Na desktopie typowa szerokość strony to 1200px i więcej, na smartfonie efektywna szerokość bywa około 360–400px (w jednostkach CSS).
- Interakcja: Na desktopie używamy myszki (łatwo najechać na mały element, jest hover), na mobile dotyku (elementy muszą być bardziej oddalone, większe, hover nie istnieje).
- Orientacja: Telefony często używane w pionie (portretowo), monitory zazwyczaj w poziomie.
Meta viewport
Aby strona była świadoma szerokości urządzenia mobilnego, należy dodać w sekcji <head> specjalny znacznik:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Ten meta tag mówi przeglądarce mobilnej: "Ustaw wirtualną szerokość strony równą szerokości ekranu urządzenia i początkową skalę 1". Bez tego przeglądarki mobilne mogą udawać "duży ekran" i pomniejszać stronę, przez co trzeba ją ręcznie powiększać. Po jego dodaniu możemy poprzez CSS dopasowywać layout do faktycznej szerokości urządzenia.
Proste techniki responsywne
- Używanie elastycznych jednostek zamiast sztywnych: zamiast pikseli warto używać procentów (%) lub jednostek względnych (em, rem). Przykład: dwie kolumny po 50% zamiast każda po 300px.
-
Maksymalna szerokość zamiast stałej: dla obrazów lepiej użyć
max-width: 100%, żeby nie przekraczały szerokości rodzica i nie powodowały poziomego przewijania.img { max-width: 100%; height: auto; /* zachowaj proporcje wysokości */ } -
Unikanie sztywnych szerokości w pikselach: np. zamiast ustawiać menu na szerokość 800px użyj
width: 100%lubmax-widthz wartościami procentowymi. Dla kolumn bocznych można stosować procentowe szerokości lub jednostki typufrw CSS Grid. - Media queries (o nich więcej w kolejnej lekcji) – pozwalają zastosować inne style po przekroczeniu pewnej szerokości ekranu (np. ukryć elementy, zmienić układ).
Bardzo prosty przykład
Załóżmy, że tworzymy stronę z sekcją tekstową i obrazkiem obok (dwie kolumny). Na duży ekran chcemy układ obok siebie, na mały – jeden pod drugim. Bez wchodzenia w media queries można użyć flexboxa:
<div class="row">
<div class="col" style="background:#ddf;">Lorem ipsum dolor sit amet...</div>
<div class="col" style="background:#dfd;"><img src="foto.jpg" alt="Opis" /></div>
</div>
.row {
display: flex;
flex-wrap: wrap; /* pozwól kolumnom zawijać się */
}
.col {
flex: 1 1 50%; /* elastyczny element: rośnie i kurczy się, baza 50% szerokości */
padding: 10px;
}
img {
max-width: 100%;
height: auto;
}
W powyższym przykładzie flex: 1 1 50% oznacza, że kolumny normalnie zajmują 50% kontenera każda. flex-wrap: wrap sprawia, że jeśli kontener (ekran) jest zbyt wąski, kolumny "złamią się" i druga wejdzie poniżej pierwszej, zamiast ścieśniać się do mniejszej szerokości. Obrazek z max-width: 100% zmniejszy się razem z kolumną.
Podsumowanie
Responsywność to cecha strony, która zapewnia wygodne korzystanie na każdym urządzeniu. Osiągamy ją poprzez odpowiednie meta ustawienia oraz elastyczne podejście do CSS — używanie procentów, max-width, jednostek względnych (em, rem) i technik takich jak flexbox, grid oraz media queries zamiast sztywnych wartości w pikselach.