Правило CSS `@media`
Baseline Широко доступна
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
@media CSS правило можно использовать, чтобы применить часть таблицы стилей в зависимости от результата одного или нескольких медиазапросов. С его помощью можно задать медиазапрос и блок CSS, который будет применен к документу тогда и только тогда, когда медиазапрос соответствует устройству, на котором отображается содержимое.
Примечание: В JavaScript правила, созданные с помощью @media, доступны через интерфейс объектной модели CSS CSSMediaRule.
Попробуйте
abbr {
color: #860304;
font-weight: bold;
transition: color 0.5s ease;
}
@media (hover: hover) {
abbr:hover {
color: #001ca8;
transition-duration: 0.5s;
}
}
@media not all and (hover: hover) {
abbr::after {
content: " (" attr(title) ")";
}
}
<p> <abbr title="National Aeronautics and Space Administration">NASA</abbr> is a U.S. government agency that is responsible for science and technology related to air and space. </p>
Синтаксис
/* At the top level of your code */
@media screen and (width >= 900px) {
article {
padding: 1rem 3rem;
}
}
/* Nested within another conditional at-rule */
@supports (display: flex) {
@media screen and (width >= 900px) {
article {
display: flex;
}
}
}
Правило @media можно разместить на верхнем уровне кода или вложить в любое другое правило условной группы.
Описание синтаксиса медиазапросов см. в разделе Использование медиазапросов.
Описание
В <media-query-list> медиазапроса входят <media-type>ы, <media-feature>s и логические операторы.
Типы медиа
<media-type> описывает общую категорию устройства. Если не используется логический оператор only, тип медиа указывать необязательно: подразумевается тип all.
-
all - Подходит для всех устройств.
-
print - Предназначен для страниц и документов, которые просматривают на экране в режиме предварительного просмотра перед печатью. (Информацию о проблемах форматирования, характерных для этих форматов, см. в разделе постраничных медиа.)
-
screen - Предназначен в первую очередь для экранов.
Примечание: В CSS 2.1 и Media Queries 3 было определено несколько дополнительных типов медиа (tty, tv, projection, handheld, braille, embossed и aural), но в Media Queries 4 они были объявлены устаревшими, поэтому их не следует использовать.
Медиафункции
<media feature> описывает конкретные характеристики пользовательского агента, устройства вывода или среды. Выражения медиафункций проверяют наличие, значение или диапазон значений этих характеристик; они полностью необязательны. Каждое выражение медиафункции должно быть заключено в круглые скобки.
-
any-hover - Позволяет ли какой-либо доступный механизм ввода наводить указатель на элементы?
-
any-pointer - Является ли какой-либо доступный механизм ввода указывающим устройством и, если да, насколько оно точное?
-
aspect-ratio - Соотношение ширины и высоты области просмотра.
-
color - Количество бит на цветовой компонент устройства вывода или ноль, если устройство не поддерживает цвет.
-
color-gamut - Приблизительный диапазон цветов, поддерживаемых пользовательским агентом и устройством вывода.
-
color-index - Количество записей в таблице подстановки цветов устройства вывода или ноль, если устройство не использует такую таблицу.
-
device-aspect-ratio - Соотношение ширины и высоты устройства вывода. Устарело в Media Queries Level 4.
-
device-height - Высота поверхности отображения устройства вывода. Устарело в Media Queries Level 4.
-
device-posture - Определяет текущее положение устройства, то есть находится ли область просмотра в плоском или сложенном состоянии. Определено в Device Posture API.
-
device-width - Ширина поверхности отображения устройства вывода. Устарело в Media Queries Level 4.
-
display-mode - Режим отображения приложения, например режим полноэкранного отображения или «картинка в картинке». Добавлено в Media Queries Level 5.
-
dynamic-range - Сочетание яркости, коэффициента контрастности и глубины цвета, поддерживаемых пользовательским агентом и устройством вывода. Добавлено в Media Queries Level 5.
-
forced-colors - Определяет, ограничивает ли пользовательский агент цветовую палитру. Добавлено в Media Queries Level 5.
-
grid - Использует ли устройство сеточный или растровый экран?
-
height - Высота области просмотра.
-
horizontal-viewport-segments - Определяет, разделено ли устройство на заданное количество сегментов области просмотра, расположенных горизонтально.
-
hover - Позволяет ли основной механизм ввода наводить указатель на элементы?
-
inverted-colors - Инвертирует ли пользовательский агент или операционная система цвета? Добавлено в Media Queries Level 5.
-
monochrome - Количество бит на пиксель в монохромном кадровом буфере устройства вывода или ноль, если устройство не является монохромным.
-
orientation - Ориентация области просмотра.
-
overflow-block - Как устройство вывода обрабатывает содержимое, выходящее за границы области просмотра вдоль блочной оси?
-
overflow-inline - Можно ли прокручивать содержимое, выходящее за границы области просмотра вдоль строчной оси?
-
pointer - Является ли основной механизм ввода указывающим устройством и, если да, насколько оно точное?
-
prefers-color-scheme - Определяет, предпочитает ли пользователь светлую или тёмную цветовую схему. Добавлено в Media Queries Level 5.
-
prefers-contrast - Определяет, запросил ли пользователь увеличение или уменьшение контрастности между соседними цветами. Добавлено в Media Queries Level 5.
-
prefers-reduced-data - Определяет, запросил ли пользователь веб-контент, потребляющий меньше интернет-трафика.
-
prefers-reduced-motion - Пользователь предпочитает меньше движения на странице. Добавлено в Media Queries Level 5.
-
prefers-reduced-transparency - Определяет, включил ли пользователь на устройстве настройку для уменьшения эффектов прозрачности и полупрозрачности.
-
resolution - Плотность пикселей устройства вывода.
-
scan - Является ли вывод на экран прогрессивным или чересстрочным.
-
scripting - Определяет, доступна ли поддержка скриптов (то есть JavaScript). Добавлено в Media Queries Level 5.
-
shape - Определяет форму устройства, чтобы различать прямоугольные и круглые дисплеи.
-
update - Как часто устройство вывода может изменять внешний вид содержимого.
-
vertical-viewport-segments - Определяет, разделено ли устройство на заданное количество сегментов области просмотра, расположенных вертикально. Добавлено в Media Queries Level 5.
-
video-dynamic-range - Сочетание яркости, коэффициента контрастности и глубины цвета, поддерживаемых видеоплоскостью пользовательского агента и устройства вывода. Добавлено в Media Queries Level 5.
-
width - Ширина области просмотра, включая ширину полосы прокрутки.
-
-moz-device-pixel-ratio - Количество пикселей устройства на один CSS-пиксель. Вместо этого используйте функцию
resolutionс единицейdppx. -
-webkit-animation - Браузер поддерживает CSS-свойство
animationс префиксом-webkit. Вместо этого используйте запрос функции@supports (animation). -
-webkit-device-pixel-ratio - Количество пикселей устройства на один CSS-пиксель. Вместо этого используйте функцию
resolutionс единицейdppx. -
-webkit-transform-2d - Браузер поддерживает двумерное CSS-свойство
transformс префиксом-webkit. Вместо этого используйте запрос функции@supports (transform). -
-webkit-transform-3d - Браузер поддерживает трёхмерное CSS-свойство
transformс префиксом-webkit. Вместо этого используйте запрос функции@supports (transform). -
-webkit-transition - Браузер поддерживает CSS-свойство
transitionс префиксом-webkit. Вместо этого используйте запрос функции@supports (transition).
Логические операторы
Логические операторы not, and, only и or можно использовать для составления сложного медиазапроса. Несколько медиазапросов также можно объединить в одно правило, разделив их запятыми.
-
and - Используется для объединения нескольких медиафункций в один медиазапрос; каждая функция в цепочке должна возвращать
true, чтобы запрос считалсяtrue. Также используется для объединения медиафункций с типами медиа. -
not -
Используется для отрицания медиазапроса и возвращает
true, если в противном случае запрос вернул быfalse. Если он указан в списке запросов, разделённых запятыми, то отрицается только конкретный запрос, к которому он относится.Примечание: В Level 3 ключевое слово
notнельзя использовать для отрицания отдельного выражения медиафункции — только целого медиазапроса. -
only - Применяет стиль, только если совпадает весь запрос. Это полезно, чтобы старые браузеры не применяли выбранные стили. Если не использовать
only, старые браузеры интерпретируют запросscreen and (width <= 500px)какscreen, игнорируя оставшуюся часть запроса и применяя его стили ко всем экранам. При использовании оператораonlyнеобходимо также указать тип медиа. -
,(запятая) - Запятые используются для объединения нескольких медиазапросов в одно правило. Каждый запрос в списке, разделённом запятыми, обрабатывается отдельно от остальных. Таким образом, если любой запрос в списке является
true, всё условие для медиа возвращаетtrue. Иными словами, списки работают как логический операторor. -
or - Эквивалентен оператору
,. Добавлено в Media Queries Level 4.
Подсказки клиенту пользовательского агента
Некоторым медиазапросам соответствуют подсказки клиенту пользовательского агента. Это HTTP-заголовки, запрашивающие содержимое, предварительно оптимизированное для конкретного требования к медиа. К ним относятся Sec-CH-Prefers-Color-Scheme и Sec-CH-Prefers-Reduced-Motion.
Формальный синтаксис
Доступность
Чтобы наилучшим образом учесть потребности людей, изменяющих размер текста на сайте, используйте emы, когда в медиазапросах требуется задать <length>.
Допустимы обе единицы — em и px, но em подходит лучше, если пользователь меняет размер текста в браузере.
Также рассмотрите возможность использования медиазапросов или HTTP-подсказок клиенту пользовательского агента, чтобы улучшить взаимодействие с пользователем. Например, медиазапрос prefers-reduced-motion или соответствующий ему HTTP-заголовок Sec-CH-Prefers-Reduced-Motion) можно использовать, чтобы свести к минимуму количество анимации или движения с учётом предпочтений пользователя.
Безопасность
Медиазапросы позволяют узнать о возможностях устройства, а следовательно, и о его функциях и дизайне. Это создаёт риск злоупотребления такими данными для создания «цифрового отпечатка», который идентифицирует устройство или, по крайней мере, относит его к достаточно подробной категории, что может быть нежелательно для пользователей.
Из-за этого риска браузер может намеренно искажать возвращаемые значения, чтобы их нельзя было использовать для точной идентификации компьютера. Браузер также может предусматривать дополнительные меры защиты в этой области. Например, если в Firefox включена настройка «Сопротивление цифровому отпечатку», многие медиазапросы сообщают значения по умолчанию, а не значения, отражающие фактическое состояние устройства.
Примеры
Проверка типов медиа print и screen
@media print {
body {
font-size: 10pt;
}
}
@media screen {
body {
font-size: 13px;
}
}
@media screen, print {
body {
line-height: 1.2;
}
}
Синтаксис диапазонов позволяет записывать медиазапросы компактнее при проверке любых функций, поддерживающих диапазон, как показано в примерах ниже:
@media (height > 600px) {
body {
line-height: 1.4;
}
}
@media (400px <= width <= 700px) {
body {
line-height: 1.4;
}
}
Другие примеры см. в разделе Использование медиазапросов.
Спецификации
| Спецификация |
|---|
| Media Queries Level 4 # media-descriptor-table |
| CSS Conditional Rules Module Level 3 # at-media |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
media |
1 |
12 |
1 |
9.2 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
2 |
1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
-moz-device-pixel-ratio |
Нет |
Нет |
4 |
Нет |
Нет |
Нет |
4 |
Нет |
Нет |
Нет |
Нет |
Нет |
-webkit-animation |
2–36 |
Нет |
Нет |
15–23 |
4 |
18–36 |
Нет |
14–24 |
3.2 |
1.0–3.0 |
2–37 |
3.2 |
-webkit-device-pixel-ratio |
1 |
12 |
63Реализовано как псевдоним для-moz-device-pixel-ratio. |
15 |
3 |
18 |
63Реализовано как псевдоним для-moz-device-pixel-ratio. |
14 |
1 |
1.0 |
4.4 |
1 |
-webkit-max-device-pixel-ratio |
1 |
12 |
63Реализовано как псевдоним дляmax--moz-device-pixel-ratio. |
15 |
3 |
18 |
63Реализовано как псевдоним дляmax--moz-device-pixel-ratio. |
14 |
1 |
1.0 |
4.4 |
1 |
-webkit-min-device-pixel-ratio |
1 |
12 |
63Реализовано как псевдоним дляmin--moz-device-pixel-ratio. |
15 |
3 |
18 |
63Реализовано как псевдоним дляmin--moz-device-pixel-ratio. |
14 |
1 |
1.0 |
4.4 |
1 |
-webkit-transform-2d |
2–36 |
Нет |
Нет |
15–23 |
4 |
18–36 |
Нет |
14–24 |
3.2 |
1.0–3.0 |
2–37 |
3.2 |
-webkit-transform-3d |
2 |
12 |
49 |
15 |
4 |
18 |
49 |
14 |
3.2 |
1.0 |
4.4 |
3.2 |
-webkit-transition |
2–36 |
Нет |
Нет |
15–23 |
4 |
18–36 |
Нет |
14–24 |
3.2 |
1.0–3.0 |
2–37 |
3.2 |
any-hover |
41 |
16 |
64 |
28 |
9 |
41 |
64 |
28 |
9 |
5.0 |
41 |
9 |
any-pointer |
41 |
12 |
64 |
28 |
9 |
41 |
64 |
28 |
9 |
4.0 |
41 |
9 |
aspect-ratio |
3 |
12 |
3.5 |
10 |
5 |
18 |
4 |
10.1 |
4.2 |
1.0 |
4.4 |
4.2 |
calc |
66 |
79 |
59 |
53 |
12 |
66 |
59 |
47 |
12 |
9.0 |
66 |
12 |
color |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
color-gamut |
58 |
79 |
110 |
45 |
10 |
58 |
110 |
43 |
10 |
7.0 |
58 |
10 |
color-index |
29 |
79 |
Нет |
16 |
8 |
29 |
Нет |
16 |
8 |
2.0 |
4.4 |
8 |
device-aspect-ratio |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
device-height |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
device-posture |
132 |
132 |
Нет |
117 |
Нет |
132 |
Нет |
87 |
Нет |
16.2 |
132 |
Нет |
device-width |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
display-mode |
42 |
79 |
47 |
29 |
13 |
42 |
47 |
29 |
12.2 |
4.0 |
42 |
12.2 |
dynamic-range |
98 |
98 |
100 |
84 |
13.1 |
98 |
100 |
68 |
13.4 |
18.0 |
98 |
13.4 |
forced-colors |
89 |
79 |
89 |
75 |
16 |
89 |
89 |
63 |
16 |
15.0 |
89 |
16 |
grid |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
height |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
horizontal-viewport-segments |
138 |
138 |
Нет |
122 |
Нет |
138 |
Нет |
91 |
Нет |
30.0 |
138 |
Нет |
hover |
38До Chrome 41 реализация работала с ошибками и сообщала(hover: none) на компьютерах без сенсорного экрана, использующих мышь или трекпад. См. ошибку 40397980. |
12 |
64 |
25До Opera 28 реализация работала с ошибками и сообщала(hover: none) на компьютерах без сенсорного экрана, использующих мышь или трекпад. См. ошибку 40397980. |
9 |
50На некоторых устройствах Android, например на отдельных моделях Samsung, медиазапрос(hover: hover) может срабатывать некорректно. См. ошибку 41445959. |
64 |
37На некоторых устройствах Android, например на отдельных моделях Samsung, медиазапрос(hover: hover) может срабатывать некорректно. См. ошибку 41445959. |
9 |
5.0На некоторых устройствах Android, например на отдельных моделях Samsung, медиазапрос(hover: hover) может срабатывать некорректно. См. ошибку 41445959. |
50На некоторых устройствах Android, например на отдельных моделях Samsung, медиазапрос(hover: hover) может срабатывать некорректно. См. ошибку 41445959. |
9 |
inverted-colors |
Нет |
Нет |
114 |
Нет |
9.1 |
Нет |
Нет |
Нет |
10 |
Нет |
Нет |
10 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
media_features |
1 |
12 |
1 |
9.2 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
media_query_values |
66 |
79 |
59 |
53 |
Нет |
66 |
59 |
47 |
Нет |
9.0 |
66 |
Нет |
monochrome |
1 |
79 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
nested-queries |
26 |
12 |
11 |
12.1 |
7 |
26 |
14 |
12.1 |
7 |
1.5 |
4.4 |
7 |
or_syntax |
104 |
104 |
64 |
90 |
16.4 |
104 |
64 |
71 |
16.4 |
20.0 |
104 |
16.4 |
orientation |
3 |
12 |
2 |
10.6 |
5 |
18 |
4 |
11 |
4.2 |
1.0 |
4.4 |
4.2 |
overflow-block |
113 |
113 |
66 |
99 |
17 |
113 |
66 |
76 |
17 |
23.0 |
113 |
17 |
overflow-inline |
113 |
113 |
66 |
99 |
17 |
113 |
66 |
76 |
17 |
23.0 |
113 |
17 |
pointer |
41 |
12 |
64 |
28 |
9 |
50 |
64 |
28 |
9 |
5.0 |
41 |
9 |
prefers-color-scheme |
76 |
79 |
67 |
62 |
12.1 |
76 |
67 |
54 |
13 |
14.2 |
76 |
13 |
prefers-contrast |
96 |
96 |
101 |
82 |
14.1 |
96 |
101 |
Нет |
14.5 |
17.0 |
96 |
14.5 |
prefers-reduced-data |
85 |
85 |
Нет |
71 |
Нет |
85 |
Нет |
Нет |
Нет |
Нет |
Нет |
Нет |
prefers-reduced-motion |
74 |
79 |
63 |
62 |
10.1 |
74 |
64 |
53 |
10.3 |
11.0 |
74 |
10.3 |
prefers-reduced-transparency |
118 |
118 |
113 |
104 |
Нет |
118 |
Нет |
79 |
Нет |
25.0 |
118 |
Нет |
range_syntax |
104 |
104 |
102
63–102Поддерживаются только обозначения диапазонов, в которых имя функции указывается перед любым значением(width > 500px) |
90 |
16.4 |
104 |
102
63–102Поддерживаются только обозначения диапазонов, в которых имя функции указывается перед любым значением(width > 500px) |
71 |
16.4 |
20.0 |
104 |
16.4 |
resolution |
29 |
12 |
8
3.5–8Поддерживаются только значения<integer>. |
16
10–15
|
16 |
29 |
8
4–8Поддерживаются только значения<integer>. |
16
10.1–14
|
16 |
2.0 |
4.4 |
16 |
scan |
104 |
104 |
63 |
90 |
16.4 |
104 |
63 |
71 |
16.4 |
20.0 |
104 |
16.4 |
scripting |
120 |
120 |
113 |
106 |
17 |
120 |
113 |
80 |
17 |
25.0 |
120 |
17 |
update |
113 |
113 |
102 |
99 |
17 |
113 |
102 |
76 |
17 |
23.0 |
113 |
17 |
vertical-viewport-segments |
138 |
138 |
Нет |
122 |
Нет |
138 |
Нет |
91 |
Нет |
30.0 |
138 |
Нет |
video-dynamic-range |
98 |
98 |
100 |
84 |
Нет |
98 |
100 |
Нет |
Нет |
Нет |
Нет |
Нет |
width |
1 |
12 |
2 |
10 |
3 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
См. также
- Модуль медиазапросов CSS
- Использование медиазапросов
-
Интерфейс
CSSMediaRule - At-rule
@custom-mediaCSS - Расширенные медиахарактеристики Mozilla
- Расширенные медиахарактеристики WebKit
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media