Press shift question mark to access a list of keyboard shortcuts
Этот скринкаст является частью нашей серии CSS AtoZ. Вы можете найти другие записи серии здесь .
расшифровка
@media допускает условное оформление элементов.
Условия могут быть основаны на типе носителя или известных характеристиках используемого устройства.
Сочетание медиа-запросов с гибким макетом и гибкими изображениями позволяет нам реализовать адаптивный веб-дизайн.
В этом выпуске мы рассмотрим, как запросы @media могут использоваться для изменения стиля веб-сайтов на основе запроса информации об устройстве и двух подходов к макету страницы в адаптивном дизайне.
Медиа-запросы
Иногда мы хотим, чтобы определенные стили применялись только к определенным типам устройств или когда определенные характеристики устройства соответствуют действительности.
Например, мы можем захотеть удалить верхний и нижний колонтитулы при печати веб-страницы.
Использование запроса print ограничит стили правила at типом материала для print .
@media print { .site-header, .site-footer {display: none;} }
Другие типы носителей включают
-
all -
braille -
embossed -
handheld -
projection -
screen -
speech -
tty -
tv
Единственными двумя типами носителей, которые я использую, являются print и screen , что немного подходит для любого устройства на основе экрана, включая мобильные устройства, телевидение и проекцию.
Запросы устройства
Мы можем проверить более детальную информацию об используемом устройстве, передав запрос в правило @media . Общее свойство запроса — это min-width окна браузера.
body { font-size: 0.75em; } @media (min-width: 600px) { body { font-size: 1em; } }
В этом примере начальный font-size для всех устройств составляет 0.75em но если минимальная ширина устройства составляет 0.75em 600px (т.е. составляет 600px или больше), то font size будет увеличен до 1 1em .
Есть несколько вещей, которые мы можем запросить об устройстве:
-
widthmin-widthmax-width -
heightmin-heightmax-height -
device-widthmin-device-widthmax-device-width -
device-heightmin-device-heightmax-device-heightorientationorientation -
aspect-ratiomin-aspect-ratiomax-aspect-ratio -
device-aspect-ratiomin-device-aspect-ratiomax-device-aspect-ratiomin-device-aspect-ratiomax-device-aspect-ratio -
resolutionmin-resolutionmax-resolution -
colormin-colormax-color -
color-indexmin-color-indexcolor-indexmin-color-indexmax-color-indexmin-color-indexmax-color-index -
monochromemin-monochromemax-monochrome -
gridscan
Многие из них имеют также min и max разнообразие.
Я часто использую min-width и max-width , время от времени orientation , aspect-ratio и resolution а также min-height и max height . Я никогда не использовал другие, насколько я помню.
Ширина — наиболее распространенная вещь для запроса об устройстве, но так как сообщаемая ширина и ширина устройства часто различаются, необходимо добавить следующий meta в ваш HTML, что сделает их эквивалентными:
<meta name="viewport" content="width=device-width, initial-scale=1">
initial-scale настроена так, чтобы устройства не масштабировались, чтобы вместить весь сайт в окне просмотра. Можно установить maximum-scale=1 но тогда это лишает пользователя возможности увеличивать страницу, что не очень удобно для пользователя.
Комбинированные запросы
Можно комбинировать запросы, используя ключевое слово and :
@media screen and (min-width: 600px) and (max-width: 800px) { } @media screen and (orientation: portrait) and (min-width: 800px) { }
Также возможно использовать отрицание:
@media not screen { }
И ограничить применимость, используя only :
@media only screen { }
Эти блоки @media могут содержать любой CSS-код, который вы написали бы в другом месте таблицы стилей, и каскадироваться таким же образом. Это означает, что вам, скорее всего, не придется писать столько CSS-кода, чтобы изменить дизайн для нескольких устройств.
Адаптивный дизайн
Поскольку запросы @media допускают условное моделирование, когда определенные характеристики устройства являются истинными, мы можем использовать их для управления стилизацией страницы в диапазоне различных устройств или размеров устройств.
Мы можем контролировать мелкие детали или макет большой картинки. Веб-сайты, просматриваемые на большом экране, обычно имеют несколько столбцов текста и изображений, но это невозможно прочитать на экране в одну пятую ширины.
Поскольку создание и изменение сложных макетов отнимает много времени, давайте рассмотрим простой пример четырех блоков для представления четырех разделов страницы. Каждый блок содержит изображение и несколько строк текста.
Без применения каких-либо стилей изображения, текст и поля накладываются друг на друга. Мы можем немного их разнести и добавить немного границ и фона, чтобы сделать их немного более заметными.
Когда экран становится шире, макет выглядит немного растянутым, а небольшое количество текста начинает выглядеть странно по сравнению с размером изображения. Приблизительно в 500 пикселей мы можем добавить запрос @media чтобы создать макет из двух столбцов вместо макета из 1 столбца.
@media screen and (min-width: 500px) { .box { float: left; width: 50%; } }
Поскольку экран снова становится шире, мы можем разместить 4 столбца, поэтому вместо этого можно изменить width каждого блока на 25%.
@media screen and (min-width:500px) { .box { width: 25%; } }
Из-за того, как CSS стили каскадируются, нам не нужно указывать float:left снова.
Такой подход, начиная с небольшого экрана и добавления стилей для создания более сложного макета, известен как «Mobile First», как это было написано в одноименной книге Люка Вроблевского .
Можно пойти наоборот — сначала рабочий стол — и начать с более сложной компоновки. В этом случае мы начинаем с плавающих блоков и шириной 25% и используем запросы max-width чтобы переопределить стили для небольших экранов. Это приводит к небольшому увеличению CSS, но иногда может быть легче разобраться. Тем не менее, если это возможно, я думаю, что лучше начать с мобильных устройств в первую очередь, так как в нем основное внимание уделяется проектированию и разработке с самого начала и снижается риск необходимости использовать сложный макет на крошечном экране.
Мне потребовалось некоторое время, чтобы сначала привыкнуть к мобильному телефону, но это определенно мой подход в эти дни — хотя я хотел бы знать, что вы думаете …
Следите за нашей статьей Quick Tip в ближайшее время!