@media
@media [typ] [and] (warunek) { … }
Style w niej obowiązują tylko wtedy, gdy urządzenie i okno spełniają warunek. To podstawa responsywnej strony: @media (min-width: 700px) { … } dodaje układ dla szerszych ekranów. Warunki można łączyć i zagnieżdżać; przeglądarka ocenia je na nowo przy każdej zmianie okna.
Wartości
- typ –
screen,print,all(domyślnie). - (width >= 600px), (400px <= width < 800px) – składnia zakresów; Chrome od 104, Firefox od 102, Safari od 16.4. Starsza składnia:
(min-width: 600px),(max-width: 799px). - (orientation: landscape), (aspect-ratio > 16/9) – kształt okna.
- (hover: hover), (pointer: coarse) – mysz czy dotyk.
- (prefers-color-scheme: dark), (prefers-reduced-motion: reduce), (prefers-contrast: more), (forced-colors: active) – ustawienia użytkownika.
- (resolution >= 2x) – gęstość pikseli ekranu.
- and, przecinek (lub), not, or wewnątrz warunku (Chrome od 104, Firefox od 64, Safari od 16.4).
Przykłady
Mobile first: na wąskim ekranie karty są jedna pod drugą, od 700 px w dwóch kolumnach:
.cards {
display: grid;
gap: 16px;
}
@media (width >= 700px) {
.cards {
grid-template-columns: 1fr 1fr;
}
}
Wynik: przy szerokości okna poniżej 700 px karty są w jednej kolumnie, od 700 px w dwóch.
Przy drukowaniu znika menu i stopka, tekst jest czarny na białym tle:
@media print {
nav,
footer,
.ad { display: none; }
body {
background: #fff;
color: #000;
}
}
Na co uważać
- Na telefonie strona musi mieć w nagłówku
<meta name="viewport" content="width=device-width, initial-scale=1">, inaczej udaje szerokość około 980 px i warunki szerokości nie działają. emiremw warunku liczą się od domyślnego rozmiaru czcionki przeglądarki (zwykle 16 px), a nie odfont-sizeustawionego w CSS.- Granice łatwo się nakładają:
(max-width: 700px)i(min-width: 700px)obowiązują oba przy szerokości dokładnie 700 px. Rozwiązuje to składnia zakresów (width < 700pxiwidth >= 700px). - W warunku nie działa
var(). Reguły w@medianie mają wyższego priorytetu – przy równej specyficzności decyduje kolejność, więc pisz je po stylach podstawowych. - Według rozmiaru otaczającego komponentu zamiast okna decyduje
@container.
Obsługa w przeglądarkach
Baseline – szeroko dostępne: działa we wszystkich popularnych przeglądarkach, i to od dawna (najpóźniej od 2015 roku). Od wersji: Chrome 1, Firefox 1, Safari 3. Stan: październik 2026 (MDN browser-compat-data).
Zobacz też:
@container
prefers-color-scheme
prefers-reduced-motion
@supports
:hover
Jednostki długości (px, em, rem, %, vw…)