Как пользоваться медиазапросами в CSS?


Медиазапросы (media queries) в CSS — это механизм, позволяющий применять различные стили в зависимости от характеристик устройства вывода, таких как ширина экрана, высота, ориентация, разрешение, тип устройства и др. Основная цель — создание отзывчивых (responsive) интерфейсов, которые адаптируются под разные размеры экранов: от мобильных до широких десктопов.

Синтаксис медиазапросов

@media media_type and (condition) {
/\* CSS-правила, применяемые при выполнении условий \*/
}

Примеры:

/\* Пример для экранов шириной до 600px \*/
@media screen and (max-width: 600px) {
body {
background-color: lightgray;
}
}
/\* Пример для экранов от 601px до 1024px \*/
@media screen and (min-width: 601px) and (max-width: 1024px) {
body {
background-color: white;
}
}

Типы медиазапросов (media types)

  • all — по умолчанию, для всех устройств.

  • screen — экраны, включая десктопы, планшеты, телефоны.

  • print — принтеры, печатные устройства.

  • speech — синтез речи.

Пример:

@media print {
body {
color: black;
background: white;
}
}

Наиболее часто используемые медиапараметры (media features)

Размеры окна и экрана

  • width, min-width, max-width — ширина viewport.

  • height, min-height, max-height — высота viewport.

@media (min-width: 768px) {
.menu {
display: flex;
}
}

Ориентация

  • orientation: portrait — вертикальная ориентация.

  • orientation: landscape — горизонтальная ориентация.

@media (orientation: landscape) {
.image {
width: 70%;
}
}

Разрешение (density)

  • resolution: 300dpi, min-resolution, max-resolution

  • resolution: 2dppx — для дисплеев высокой плотности (ретина)

@media (min-resolution: 2dppx) {
img {
content: url(image@2x.png);
}
}

Цветовая палитра и глубина цвета

  • color, color-index, monochrome — применяются крайне редко.

Взаимодействие пользователя

  • hover, pointer, any-hover, any-pointer
@media (hover: hover) {
button:hover {
background-color: blue;
}
}

Темы интерфейса

  • prefers-color-scheme: dark или light — предпочтения пользователя по цветовой схеме.
@media (prefers-color-scheme: dark) {
body {
background: #111;
color: #eee;
}
}

Логические операторы

and

Соединяет несколько условий (все должны быть выполнены):

@media screen and (min-width: 600px) and (orientation: portrait) {
/\* правила \*/
}

not

Отрицание:
@media not screen and (max-width: 600px) {
/\* применится, если ширина больше 600px \*/
}

only

Защита от старых браузеров, которые не поддерживают медиазапросы:
@media only screen and (min-width: 768px) {
/\* применяется только если поддерживаются медиазапросы \*/
}

Запятая (,)

Аналог логического OR. Любое из условий может выполниться:
@media (max-width: 600px), (orientation: portrait) {
/\* правила \*/
}

Медиазапросы и мобильная верстка

Подход mobile-first

Сначала пишется CSS для мобильных устройств, затем через min-width добавляются стили для планшетов и десктопов.

/\* Базовые стили для мобильных \*/
body {
font-size: 14px;
}
/\* Добавляем стили для планшетов и выше \*/
@media (min-width: 768px) {
body {
font-size: 16px;
}
}

Подход desktop-first

Сначала пишутся стили для десктопа, затем добавляются max-width стили для сужающихся экранов.

/\* Стили для десктопа \*/
body {
font-size: 18px;
}
/\* Мобильная адаптация \*/
@media (max-width: 600px) {
body {
font-size: 14px;
}
}

Подключение медиазапросов через <link>

Можно подключать отдельные CSS-файлы с медиазапросами через HTML:

&lt;link rel="stylesheet" media="screen and (max-width: 600px)" href="mobile.css"&gt;

Медиазапросы в SCSS/SASS

SASS позволяет писать более компактные и модульные медиазапросы:

.container {
width: 100%;
@media (min-width: 768px) {
width: 50%;
}
}

Примеры реальных медиазапросов

/\* Телефоны в портретной ориентации \*/
@media (max-width: 480px) { ... }
/\* Смартфоны в альбомной ориентации и маленькие планшеты \*/
@media (min-width: 481px) and (max-width: 767px) { ... }
/\* Планшеты \*/
@media (min-width: 768px) and (max-width: 1024px) { ... }
/\* Десктопы \*/
@media (min-width: 1025px) { ... }

Проверка медиазапросов в DevTools

Современные браузеры (Chrome, Firefox, Safari) позволяют проверять медиазапросы через инструменты разработчика:

  • В Chrome: Ctrl+Shift+M или иконка устройства → выбрать разные экраны.

  • Список срабатывающих медиазапросов отображается в панели стилей справа.

Медиазапросы являются основой адаптивного дизайна. Они позволяют подстраивать внешний вид веб-приложений под особенности устройств, тем самым улучшая пользовательский опыт.