Медиа-запросы¶
Дизайнеры могут корректировать свои проекты в соответствии с пожеланиями пользователей. Наиболее ярким примером этого является форм-фактор устройства пользователя: его ширина, соотношение сторон устройства и т.д. Используя медиазапросы, дизайнеры могут реагировать на эти различные форм-факторы.
Медиазапросы инициируются ключевым словом @media (at-правило CSS) и могут использоваться в различных случаях.
Ориентация на различные типы вывода¶
Веб-сайты часто отображаются на экранах, но CSS можно использовать и для стилизации сайтов под другие виды вывода. Вы можете захотеть, чтобы ваши веб-страницы выглядели на экране одним образом, а при распечатке - другим. Запрос типов носителей позволяет это сделать.
В данном примере цвет фона установлен серым. Но если страница будет распечатана, то цвет фона должен быть прозрачным. Это позволяет сэкономить чернила для принтера пользователя.
1 2 3 4 5 6 7 8 9 10 | |
Вы можете использовать правило @media в своей таблице стилей таким образом, либо сделать отдельную таблицу стилей и использовать атрибут media на элементе link:
1 2 | |
Если вы не укажете ни одного медиатипа для вашего CSS, то он автоматически будет иметь значение медиатипа all. Эти два блока CSS эквивалентны:
1 2 3 4 | |
1 2 3 4 5 6 | |
Эти две строки HTML также эквивалентны:
1 | |
1 | |
Условия запроса¶
К медиатипам можно добавлять условия. Такие условия называются медиазапросами. CSS применяется только в том случае, если медиатип соответствует условию и условие также истинно. Такие условия называются медиафункциями.
Вот синтаксис медиазапросов:
1 | |
Вы можете использовать медиазапросы для элемента link, если ваши стили находятся в отдельной таблице стилей:
1 2 3 4 5 | |
Допустим, необходимо применять различные стили в зависимости от того, в каком режиме находится окно браузера: альбомном (ширина области просмотра больше высоты) или портретном (высота области просмотра больше ширины). Для проверки этого существует медиафункция orientation, которую можно использовать:
1 2 3 4 5 6 | |
Или если вы предпочитаете иметь отдельные таблицы стилей:
1 2 3 4 5 6 7 8 9 10 | |
В данном случае медиатипом является all. Поскольку это значение по умолчанию, при желании его можно не указывать:
1 2 3 4 5 6 | |
Или использовать отдельные таблицы стилей:
1 2 3 4 5 6 7 8 9 10 | |
Хотя использование отдельных таблиц стилей для различных типов медиафайлов, например print, может быть нормальным, не стоит использовать отдельную таблицу стилей для каждого медиазапроса. Вместо этого используйте at-правила @media.
Настройка стилей в зависимости от размера области просмотра¶
Для адаптивного дизайна одна из наиболее полезных медиа-функций связана с размерами области просмотра браузера. Чтобы применять стили при ширине окна браузера, превышающей определенное значение, используйте min-width.
1 2 3 | |
Используйте медиафункцию max-width для применения стилей шириной менее определенного значения:
1 2 3 | |
В медиазапросах можно использовать любые CSS единицы длины. Если содержимое сайта состоит в основном из изображений, то наиболее целесообразно использовать пиксели. Если содержимое в основном текстовое, то, вероятно, имеет смысл использовать относительную единицу, основанную на размере текста, например em или ch:
1 2 3 | |
Можно также комбинировать медиазапросы для применения более одного условия. Для объединения медиазапросов используйте слово and:
1 2 3 | |
Выбор точек останова в зависимости от содержания¶
Точка, в которой условие медиафункции становится истинным, называется точкой останова. Точки останова лучше всего выбирать на основе содержимого, а не популярных размеров устройств, поскольку они могут меняться с каждым циклом выпуска технологий.
В данном примере 50em - это точка, в которой строки текста становятся неудобно длинными. Поэтому создается точка останова, чтобы сделать интерфейс более разборчивым. С помощью свойства column-count текст с этого момента делится на две колонки.
1 2 3 4 5 | |
Комбинации¶
Можно использовать медиазапросы, основанные не только на ширине, но и на высоте области просмотра. Это может быть полезно для оптимизации содержимого интерфейса "над сгибом". В предыдущем примере, если читатель использует широкое, но короткое окно браузера, ему придется прокрутить вниз одну колонку, а затем снова прокрутить вверх, чтобы добраться до верхней части второй колонки. Безопаснее было бы применять колонки только тогда, когда область просмотра достаточно широка и высока.
Можно комбинировать медиазапросы таким образом, чтобы стили применялись только при выполнении всех условий. В данном примере область просмотра должна быть не менее 50em в ширину и 60em в высоту, чтобы стили колонок были применены. Эти точки разрыва были выбраны исходя из объема содержимого.
1 2 3 4 5 | |
Эти примеры показывают, как медиазапросы могут быть использованы для адаптации дизайна к форм-фактору устройства пользователя, но это лишь малая часть возможностей. Медиазапросы могут выходить далеко за рамки ширины и высоты, позволяя получить доступ к пользовательским предпочтениям в отношении функций доступности и цветов темы. Использование медиазапросов для корректировки макета - это отличное начало адаптивного дизайна, который опирается на эти и другие возможности.