14.2. Media Queries: Wprowadzenie i składnia
Czym są Media Queries?
Media Queries (Zapytania o Media) to fundamentalna technika CSS w Responsive Web Design. Pozwalają one na **warunkowe stosowanie bloków stylów CSS** tylko wtedy, gdy określone warunki dotyczące urządzenia lub przeglądarki (czyli medium) są spełnione.
Dzięki Media Queries możemy:
- Zmieniać układ strony (np. z dwukolumnowego na jednokolumnowy).
- Dostosowywać rozmiary czcionek, marginesów, paddingów.
- Ukrywać lub pokazywać pewne elementy.
- Ładować różne obrazy tła.
- Stosować inne style w zależności od szerokości ekranu, orientacji urządzenia, rozdzielczości i wielu innych cech.
Media Queries są kluczem do tworzenia stron, które wyglądają dobrze i są funkcjonalne na różnych urządzeniach.
Podstawowa składnia
Media Query zaczyna się od słowa kluczowego @media
, po którym następuje opcjonalny **typ medium** i/lub jeden lub więcej **warunków dotyczących cech medium**, zamkniętych w nawiasach okrągłych. Jeśli warunki są spełnione, stosowane są reguły CSS zdefiniowane wewnątrz bloku { }
.
@media [media-type] [and|not|only] (media-feature: value) {
/* Reguły CSS stosowane, gdy warunki są spełnione */
selector {
property: value;
}
}
Rozbijmy to na części:
@media
: Słowo kluczowe rozpoczynające Media Query.[media-type]
(opcjonalny): Określa typ urządzenia, dla którego mają być stosowane style. Najczęściej używane typy to:all
: Dla wszystkich urządzeń (domyślny, jeśli nie podano typu).screen
: Dla ekranów komputerów, tabletów, smartfonów.print
: Dla drukarek i podglądu wydruku.speech
: Dla czytników ekranu.
[and|not|only]
(opcjonalne): Operatory logiczne do łączenia wielu warunków lub typów mediów (omówimy je w następnej lekcji). Słowo kluczoweand
jest najczęściej używane do łączenia typu medium z cechą medium lub wielu cech.(media-feature: value)
: Warunek dotyczący konkretnej cechy urządzenia lub przeglądarki. Jest to najważniejsza część RWD. Przykłady cech:width
: Szerokość obszaru wyświetlania (viewportu).height
: Wysokość obszaru wyświetlania.orientation
: Orientacja urządzenia (portrait
lublandscape
).resolution
: Rozdzielczość ekranu (np. wdpi
).aspect-ratio
: Proporcje ekranu.- ...i wiele innych.
min-
imax-
z cechami takimi jakwidth
czyheight
(np.min-width
,max-height
), aby określić zakresy.{ /* Reguły CSS */ }
: Blok zawierający standardowe reguły CSS, które zostaną zastosowane, jeśli warunki Media Query będą prawdziwe.
Prosty przykład: Zmiana koloru tła
Załóżmy, że chcemy, aby tło strony było jasnoszare domyślnie, ale stawało się jasnoniebieskie na ekranach o szerokości co najmniej 600 pikseli.
body {
background-color: #f0f0f0; /* Domyślne tło */
}
/* Stosuj te style tylko na ekranach (screen) */
/* I tylko wtedy, gdy szerokość viewportu (width) */
/* jest równa lub większa niż (min-width) 600 pikseli */
@media screen and (min-width: 600px) {
body {
background-color: lightblue;
}
}
W tym przykładzie:
screen
to typ medium.and
łączy typ medium z cechą.(min-width: 600px)
to warunek dotyczący cechy medium - minimalna szerokość viewportu musi wynosić 600px.
Gdy użytkownik ogląda stronę na urządzeniu z ekranem szerszym niż 600px, tło stanie się jasnoniebieskie. Na węższych ekranach pozostanie jasnoszare.
Punkty przerwania (Breakpoints)
Wartości szerokości (lub innych cech), przy których zmieniamy układ lub style strony za pomocą Media Queries, nazywane są **punktami przerwania (breakpoints)**. Wybór odpowiednich punktów przerwania jest kluczowy w RWD.
Zamiast celować w konkretne rozmiary popularnych urządzeń (co jest podejściem kruchym, bo ciągle pojawiają się nowe urządzenia), zaleca się ustawianie punktów przerwania tam, gdzie **układ strony zaczyna "pękać"** lub wyglądać nieoptymalnie.
Typowe punkty przerwania często odpowiadają orientacyjnym szerokościom dla małych telefonów, dużych telefonów/małych tabletów, tabletów i dużych ekranów, np.:
~320px
(małe telefony)~480px
(większe telefony)~768px
(tablety w pionie)~1024px
(tablety w poziomie, małe laptopy)~1200px+
(duże ekrany)
Jednak najlepszą praktyką jest **analiza własnej treści i layoutu** i dodawanie breakpointów tam, gdzie są one faktycznie potrzebne.
FAQ - Najczęściej zadawane pytania
Gdzie umieszczać Media Queries w pliku CSS?
Istnieją dwie główne strategie: grupować wszystkie Media Queries na końcu pliku CSS lub umieszczać je bezpośrednio po stylach dla danego komponentu, którego dotyczą. Druga metoda jest często preferowana przy podejściu komponentowym (np. z użyciem preprocesorów CSS), ponieważ utrzymuje wszystkie style związane z komponentem w jednym miejscu.
Czy mogę używać Media Queries dla innych cech niż szerokość?
Tak, Media Queries obsługują wiele cech, takich jak height
, orientation
(portrait/landscape), aspect-ratio
, resolution
, a nawet preferencje użytkownika jak prefers-color-scheme
(tryb jasny/ciemny) czy prefers-reduced-motion
. Pozwala to na bardzo precyzyjne dostosowanie strony.
Jaka jest różnica między min-width
a max-width
?
min-width
stosuje style, gdy szerokość viewportu jest **równa lub większa** od podanej wartości (np. dla tabletów i większych ekranów). max-width
stosuje style, gdy szerokość jest **równa lub mniejsza** od podanej wartości (np. dla telefonów). Wybór zależy od strategii (Mobile First vs Desktop First).
Czy typ medium screen
jest konieczny?
Nie zawsze. Jeśli nie podasz typu medium, domyślnie przyjmuje się all
. Jednak jawne użycie screen
(np. @media screen and (min-width: 768px)
) jest dobrą praktyką, aby upewnić się, że style są stosowane tylko na ekranach, a nie np. podczas drukowania (chyba że tego właśnie chcemy).