Media для мобильных устройств: @media screen для мобильных устройств
@media screen для мобильных устройств
У Вас в браузере заблокирован JavaScript. Разрешите JavaScript для работы сайта!
/* monitors and laptops */ @media screen and (min-width: 1240px) {} /* tablet */ @media screen and (min-width: 1024px) and (max-width: 1240px) {} @media screen and (min-width: 768px) and (max-width: 1024px) {} /* mobile */ @media screen and (max-width: 768px) {} /* iPad in portrait & landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) {} /* iPad in landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) {} /* iPad in portrait */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) {} /* Retina iPad in portrait & landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (-webkit-min-device-pixel-ratio: 2) {} /* Retina iPad in landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) and (-webkit-min-device-pixel-ratio: 2) {} /* Retina iPad in portrait */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) and (-webkit-min-device-pixel-ratio: 2) {} /* iPad 1 & 2 in portrait & landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (-webkit-min-device-pixel-ratio: 1){} /* iPad 1 & 2 in landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) and (-webkit-min-device-pixel-ratio: 1) {} /* iPad 1 & 2 in portrait */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) and (-webkit-min-device-pixel-ratio: 1) {} /* iPad mini in portrait & landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (-webkit-min-device-pixel-ratio: 1) {} /* iPad mini in landscape */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) and (-webkit-min-device-pixel-ratio: 1) {} /* iPad mini in portrait */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) and (-webkit-min-device-pixel-ratio: 1) {} /* iPhone 5 in portrait & landscape */ @media only screen and (min-device-width : 320px) and (max-device-width : 568px) {} /* iPhone 5 in landscape */ @media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : landscape) {} /* iPhone 5 in portrait */ @media only screen and (min-device-width : 320px) and (max-device-width : 568px) and (orientation : portrait) {} /* iPhone 2G-4S in portrait & landscape */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) {} /* iPhone 2G-4S in landscape */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) and (orientation : landscape) {} /* iPhone 2G-4S in portrait */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) and (orientation : portrait) {}
Медиа-запросы | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS |
9.0+ | 1.0+ | 10.0+ | 4.0+ | 3.6+ | 2.0+ | 2.0+ |
Краткая информация
Версии CSS
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|---|---|---|
Описание
Наряду с типами носителей в CSS3 включена поддержка различных технических параметров устройств, на основе которых требуется загружать те или иные стили. К примеру, можно определить смартфон с максимальным разрешением 640 пикселов и для него установить одни стилевые свойства, а для остальных устройств другие. Также можно выявить различные характеристики вроде наличия монохромного экрана, ориентации (портретная или альбомная) и др. Все характеристики легко комбинируются, поэтому допустимо задать стиль только для устройств в альбомной ориентации с заданным разрешением экрана.
Возможности медиа-запросов не ограничиваются выявлением мобильных устройств, с их помощью можно создавать адаптивный макет. Такой макет подстраивается под разрешение монитора и окна браузера, меняя при необходимости ширину макета, число колонок, размеры изображений и текста. Медиа-запросы ограничивают ширину макета и при достижении этого значения (к примеру за счёт уменьшения окна или при просмотре на устройстве с указанным размером) уже применяется другой стиль.
Синтаксис
Все запросы начинаются с правила @media, после чего следует условие, в котором используются типы носителей, логические операторы и медиа-функции. Типы носителей перечислены в табл. 1.
Тип | Описание |
---|---|
all | Все типы. Это значение используется по умолчанию. |
braille | Устройства, основанные на системе Брайля, которые предназначены для чтения слепыми людьми. |
embossed | Принтеры, использующие для печати систему Брайля. |
handheld | Смартфоны и аналогичные им аппараты. |
Принтеры и другие печатающие устройства. | |
projection | Проекторы. |
screen | Экран монитора. |
speech | Речевые синтезаторы, а также программы для воспроизведения текста вслух. Сюда, например, можно отнести речевые браузеры. |
tty | Устройства с фиксированным размером символов (телетайпы, терминалы, устройства с ограничениями дисплея). |
tv | Телевизоры. |
Логические операторы, применяемые в медиа-запросах
and
Логическое И. Указывается для объединения нескольких условий.
Пример. Стиль для всех цветных устройств
@media all and (color) { ... }
not
Логическое НЕ. Указывается для отрицания условия.
Пример. Стиль для всех устройств кроме смартфонов
@media all and (not handheld) { ... }
Оператор not имеет низкий приоритет и оценивается в запросе последним, поэтому выражение
@media not all and (color) { ... }
следует понимать как
@media not (all and (color)) { ... }
а не
@media (not all) and (color) { ... }
only
Применяется для старых браузеров, которые не поддерживают медиа-запросы.
Пример. Стиль для новых браузеров
@media only all and (not handheld) { ... }
В списке нет логического оператора ИЛИ, его роль выполняет запятая. Перечисление нескольких условий через запятую говорит о том, что если хотя бы одно условие выполняется, то стиль будет применён.
Пример. Стиль для устройств с альбомной ориентацией или минимальной шириной 480 пикселов.
@media all and (orientation: landscape), all and (min-width: 480px) { ... }
Также при использовании операторов следует указывать скобки, чтобы менять приоритет операций.
Медиа-функции
Медиа-функции задают технические характеристики устройства, на котором отображается документ. Стиль выполняется в том случае, если запрос возвращает истину, иными словами, указанные условия выполняются.
Большинство функций содержат приставку min- и max-, которая соответствуют минимальному и максимальному значению. Так, max-width: 400px означает, что ширина окна браузера меньше 400 пикселов, а min-width: 1000px, наоборот, сообщает, что ширина окна больше 1000 пикселов.
aspect-ratio (min-aspect-ratio, max-aspect-ratio)
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: целое число/целое число
Определяет соотношение ширины и высоты отображаемой области устройства. Значение указывается в виде двух целых чисел разделяемых между собой слэшем (/).
color (min-color, max-color)
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: целое число
Определяет число бит на канал цвета. К примеру, значение 3 означает, что красный, зелёный и синий канал могут отображать 23 цветов каждый, что в общем составляет 512 цветов (8×8×8). Если значение не указано, тогда проверяется что устройство цветное. В примере 1 показана такая проверка.
Пример 1. Стиль для цветных устройств
@media screen and (color) { /* Для цветных экранов */ body { background: #fc0; } } @media screen and (min-color:3) { /* Минимум 512 цветов */ body { background: #ccc; } }
color-index (min-color-index, max-color-index)
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: целое число
Определяет количество цветов, которое поддерживает устройство. В примере 2 показан стиль для экранов отображающих не меньше 256 цветов.
Пример 2. Цветной дисплей
@media all and (min-color-index: 256) {
...
}
device-aspect-ratio (min-device-aspect-ratio, max-device-aspect-ratio)
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: целое число/целое число
Определяет соотношение сторон экрана устройства. Значение указывается в виде двух целых чисел разделяемых между собой слэшем (/). В примере 3 показано, как установить стиль для экранов с соотношением сторон 16:9 и более.
Пример 3. «Киношное» соотношение
@media screen and (min-device-aspect-ratio: 16/9) {
...
}
device-height (min-device-height, max-device-height)
Тип носителя: все кроме speech
Значение: размер
Определяет всю доступную высоту экрана устройства или печатной страницы.
device-width (min-device-width, max-device-width)
Тип носителя: все кроме speech
Значение: размер
Определяет всю доступную ширину экрана устройства или печатной страницы. В примере 4 в зависимости от разрешения монитора устанавливается ширина слоя. Так, для значения 1280 пикселов ширина макета задаётся как 1100px.
Пример 4. Ширина макета
HTML5CSS3IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ширина макета</title>
<style>
div {
padding: 10px;
background: #e8bfad;
margin: auto;
}
@media screen and (min-device-width: 1600px) {
div {width: 1500px;}
}
@media screen and (device-width: 1280px) {
div {width: 1100px;}
}
@media screen and (device-width: 1024px) {
div {width: 980px;}
}
</style>
</head>
<body>
<div>
Диабаз, формируя аномальные геохимические ряды, сменяет известняк,
образуя на границе с Западно-Карельским поднятием своеобразную систему грабенов.
</div>
</body>
</html>
grid
Тип носителя: all
Значение: нет
Определяет, что это устройство с фиксированным размером символов. Размеры букв на таком устройстве занимают одинаковую ширину и высоту и выстраиваются по заданной сетке. К подобным устройствам можно отнести терминалы, а также телефоны, которые поддерживают только один шрифт.
Если вам требуется форматировать текст, не указывайте его размер в пикселах, для подобных устройств используется единица em (пример 5).
Пример 5. Размер букв
HTML5CSS3IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Стиль для бабушкофона</title>
<style>
@media handheld and (grid) and (max-width: 15em) {
body { font-size: 2em; }
}
</style>
</head>
<body>
<p>Привет! Как дела? Как сажа бела?</p>
</body>
</html>
height (min-height, max-height)
Тип носителя: все кроме speech
Значение: размер
Высота отображаемой области.
monochrome (min-monochrome, max-monochrome)
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: целое число
Определяет, что устройство монохромное. Если указано число, то оно обозначает число бит на пиксел. Так, значение 8 равнозначно 256 оттенкам серого (или другого цвета). В примере 6 показан стиль для монохромного и цветного принтера.
Пример 6. Стиль для принтера
@media print and (monochrome) {
body { font-family: Times, 'Times New Roman', serif; }
h2, h3, p { color: black; }
}
@media print and (color) {
body { font-family: Arial, Verdana, sans-serif; }
h2, h3, p { color: #556b2f; }
}
orientation
Тип носителя: handheld, print, projection, screen, tty, tv
Значение: landscape | portrait
Определяет, что устройство находится в альбомном режиме (ширина больше высоты) или портретном (ширина меньше высоты).
В примере 7 устанавливается разная фоновая картинка в случае альбомной (landscape) или портретной ориентации (portrait).
Пример 7. Использование ориентации устройства
@media screen and (orientation: landscape) {
#logo { background: url(logo1.png) no-repeat; }
}
@media screen and (orientation: portrait) {
#logo { background: url(logo2.png) no-repeat; }
}
resolution (min-resolution, max-resolution)
Тип носителя: handheld, print, projection, screen, tv
Значение: разрешение в dpi (точек на дюйм) или dpcm (точек на сантиметр)
Определяет разрешение устройства, например, принтера. В примере 8 стиль будет работать для принтера с минимальным разрешением 300 точек на дюйм.
Пример 8. Разрешение принтера
@media print and (min-resolution: 300dpi) {
...
}
scan
Тип носителя: tv
Значение:
interlace | progressive
Определяет тип развертки телевизора — череcстрочная (interlace) или прогрессивная (progressive). При чересстрочной развёртке телевизор вначале показывает нечётные строки кадра, затем чётные, что позволяет сократить передаваемые данные. В прогрессивной развёртке кадр передаётся и показывается целиком.
width (min-width, max-width)
Тип носителя: все кроме speech
Значение: размер
Описывает ширину отображаемой области. Это может быть окно браузера или печатная страница. В примере 9 при уменьшении окна до 600 пикселов и меньше меняется цвет фона веб-страницы.
Пример 9. Использование max-width
HTML5CSS3IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ширина страницы</title>
<style>
body { background: #f0f0f0; }
@media screen and (max-width: 600px) {
body { background: #fc0; }
}
</style>
</head>
<body>
<p>Пока магма остается в камере, мусковит сингонально поднимает шток,
в то время как значения максимумов изменяются в широких пределах. </p>
</body>
</html>
Адаптивный дизайн на основе медиа-запросов / Блог компании Google Developers / Хабр
Уровень подготовки веб-мастера: средний/высокий
Нам нравится работать с данными. Мы уделяем много времени изучению аналитической информации о наших веб-сайтах. Любой веб-разработчик, которому это тоже интересно, наверняка заметил, насколько увеличился в последнее время объем трафика с мобильных устройств. За последний год значительно вырос процент просмотров страниц наших основных сайтов со смартфонов и планшетных ПК. Это значит, что все больше посетителей используют устройства с современными браузерами, поддерживающими последние версии HTML, CSS и JavaScript. Однако ширина экранов таких устройств обычно ограничена 320 пикселями.
Мы стремимся повысить доступность наших продуктов, то есть предоставить всем пользователям оптимальные возможности для работы с ними. Перед нами стояла дилемма: создать специальные мобильные версии сайтов или адаптировать существующие сайты и новые проекты для просмотра как на настольных компьютерах, так и на мобильных устройствах. Создание двух версий сайта позволило бы нам оптимизировать каждую из них для конкретного оборудования, но использование одного общего сайта дает возможность сохранить канонический URL. При этом исключаются сложные переадресации и упрощается совместное использование веб-адресов. Удобство обслуживания является важным фактором, поэтому мы решили не создавать разные версии страниц, а начали обдумывать, как обеспечить выполнение следующих условий:
- четкое отображение страниц на экране с любым разрешением;
- возможность просмотра группы контента на любом устройстве;
- отсутствие горизонтальной полосы прокрутки независимо от размера окна.
Изменяется расположение контента, навигация и масштаб изображений – Хромбуки
Реализация
Начнем с того, что семантическая разметка содержания упрощает перекомпоновку страниц в случае необходимости. С помощью таблицы стилей мы создали резиновый макет. Это первый шаг на пути к достижению нашей цели. Вместо атрибута
width
для контейнеров мы стали указывать max-width
. Атрибут height
был заменен атрибутом min-height
, чтобы крупный шрифт или многострочный текст не нарушал границы контейнера. Чтобы картинки с фиксированной шириной не ломали резиновые столбцы, применяется следующее правило CSS:img {
max-width: 100%;
}
Резиновый макет – хорошая идея, но использование такой компоновки накладывает некоторые ограничения. К счастью, медиа-запросы теперь поддерживаются всеми современными браузерами, в том числе IE9+ и браузерами основной части мобильных устройств. Это позволяет создавать сайты, качество отображения которых в мобильных браузерах не снижается, поскольку они оптимизируются под тот или иной интерфейс. Но сначала необходимо определить, какие особенности смартфонов должны учитываться веб-серверами.
Области просмотра
Когда пиксель не является пикселем? В том случае, если речь идет о смартфоне. Обычно браузеры смартфонов имитируют браузеры настольных компьютеров с высоким разрешением, поэтому страницы отображаются в них, как на экране монитора. Вот почему появился «режим обзора» с мелким текстом, который невозможно прочитать без увеличения. Ширина области просмотра по умолчанию в стандартных браузерах Android составляет 800 пикселей, а в браузерах iOS – 980 пикселей, независимо от фактического количества физических пикселей на экране.
Чтобы переключить браузер в более удобный для чтения режим, необходимо использовать метаэлемент viewport:
<meta name="viewport" content="width=device-width, initial-scale=1">
Существует множество вариантов разрешения экранов мобильных устройств, но стандартное значение device-width, сообщаемое браузерами, обычно составляет около 320 пикселей. Если ширина экрана вашего мобильного устройства равна 640 физическим пикселям, изображение шириной 320 пикселей будет масштабировано на всю ширину экрана, и в обработке будет использоваться в два раза больше пикселей. Таким образом, вдвое большая плотность пикселей обеспечивает более четкое отображение на небольшом экране по сравнению с экраном настольного компьютера.
Важно, что если в качестве значения элемента width в метатеге viewport указывается device-width, это значение обновляется, если пользователь меняет ориентацию экрана смартфона или планшета. В сочетании с медиа-запросами эта функция позволяет изменять макет страницы при повороте устройства:
@media screen and (min-width:480px) and (max-width:800px) {
/* Target landscape smartphones, portrait tablets, narrow desktops
*/
}
@media screen and (max-width:479px) {
/* Target portrait smartphones */
}
В зависимости от того, как функционирует и выглядит ваш сайт на экранах различных устройств, может потребоваться использовать разные контрольные точки. Вы можете также использовать медиа-запрос для выбора определенной ориентации без учета соотношения размеров в пикселях, если эта функция поддерживается.
@media all and (orientation: landscape) {
/* Target device in landscape mode */
}
@media all and (orientation: portrait) {
/* Target device in portrait mode */
}
Изменяется расположение контента и масштаб изображений – Институт культуры
Пример использования медиа-запросов
Недавно мы запустили новую версию страницы О Google. Чтобы пользователям устройств с небольшими экранами, такими как планшеты и смартфоны, было удобнее работать с этой страницей, кроме резинового макета мы добавили в ее код несколько медиа-запросов.
Вместо того чтобы нацеливаться на конкретные разрешения экранов, мы задали относительно широкий набор контрольных точек. Если разрешение экрана составляет более 1024 пикселей, страница отображается в своем первоначальном виде на сетке из 12 столбцов. Если оно составляет от 801 до 1024 пикселей, благодаря резиновому макету отображается слегка сжатая версия страницы.
Только при разрешении экрана менее 800 пикселей неосновной контент будет отображаться в нижней части страницы:
@media screen and (max-width: 800px) {
/* specific CSS */
}
Последний медиа-запрос предназначен для смартфонов:
@media screen and (max-width: 479px) {
/* specific CSS */
}
С этого момента прекращается загрузка больших изображений; блоки контента размещаются один над другим. Мы также добавили дополнительные пробелы между элементами контента, чтобы более четко разграничить разделы.
Эти простые приемы позволили оптимизировать сайт для просмотра на самых разных типах устройств.
Изменяется расположение контента, удалено большое изображение – О Google
Заключение
Важно понимать, что не существует простого решения, которое бы позволило сделать сайты удобными для просмотра на мобильных устройствах и устройствах с узкими экранами. Резиновые макеты хороши в качестве отправной точки, но их использование накладывает некоторые ограничения. Медиа-запросы также помогают оптимизировать сайты, но не следует забывать, что в 25% случаев при посещении сайтов используются компьютерные браузеры, которые еще не поддерживают данную технологию. Наличие таких запросов влияет на эффективность их работы. А если на сайте есть виджет, с которым удобно работать с помощью мыши, вовсе не факт, что он будет столь же удобен на сенсорном экране, где сложнее выполнять точные действия.
Крайне важно начинать тестирование на ранних этапах разработки и не прекращать его в дальнейшем. Просматривая свои сайты на смартфоне или планшете, вы не тратите время впустую. Если у вас нет возможности протестировать сайт на реальных устройствах, используйте Android SDK или iOS Simulator. Попросите знакомых и коллег зайти на сайт со своих устройств и понаблюдайте за его работой.
Оптимизация сайта для мобильных устройств позволит привлечь на него еще больше посетителей. Кроме того, изучение и разработка наилучших методов такой оптимизации открывает новые возможности для профессионального развития.
Другие примеры адаптивного веб-дизайна в Google:
Авторы публикации: Руперт Брейени, Эдвард Юнг, Мэтт Зюррер, команда веб-мастеров Google.
Медиа-запросы в адаптивном дизайне 2018 / Хабр
В июле 2010 года я написала статью «Как использовать CSS3 медиа-запросы для создания мобильной версии вашего сайта» для журнала Smashing. Спустя почти восемь лет эта статья по-прежнему очень популярна. Я решила вернуться к этой теме, поскольку теперь у нас есть такие методы компоновки, как Flexbox и CSS Grid. В этой статье мы рассмотрим современные методы использования медиа-запросов в адаптивном дизайне, а также рассмотрим, что может произойти в будущем.
Нужны ли вообще медиа-запросы?
Первое, что нужно сделать перед тем как написать медиа-запрос в 2018 году — спросить себя, нужно ли вообще его использовать. При построении сеток с использованием float мы создаем гибкую сетку, вычисляя размер наших колонок используя проценты. Эти проценты вычисляются методом Этана Маркотт (Ethan Marcotte), описанным в статье Fluid Grids. Этот метод лег в основу техники, которую мы теперь знаем как «отзывчивый дизайн». Чтобы изменить размер или пропорции колонок, мы должны добавить контрольную точку используя медиа-запрос и переопределить их. В работе с процентами других возможностей нет — колонки всегда будут равны проценту от контейнера, в котором они находятся, будь то широкий или узкий контейнер.
Flexbox, CSS Grid и многоколоночная верстка (Multi-column layout) адаптивны по умолчанию, так как их спецификации были написаны в мире, где адаптивный дизайн и кросс-девайсность уже стали реальностью. Это значит, что они уже включают в себя множество функций, которые позволяют легко создавать адаптивные сетки.
В этом CodePen приведены примеры того, как Multi-column, Flexbox и Grid меняют размеры и положение в соответствии с доступным пространством. Здесь нет медиа-запросов и совсем немного CSS.
Используя гибкость этих методов компоновки, мы можем создавать гибкие блоки, которые будут по-разному располагаться в зависимости от доступного пространства экрана без использования медиа-запросов. Например, объект мультимедиа, который вы хотите отобразить колонкой, когда пространство ограниченно, и как строка, когда пространства достаточно. Этого можно достичь с помощью всего нескольких строк CSS.
Допустим flex-basis для наших элементов составляет 250px. Если нет места для двух 250px колонок, они будут выстраиваться в колонку, а если задать положительный flex-grow они еще будут заполнять все доступное пространство.
.media {
display: flex;
flex-wrap: wrap;
}
.media > * {
flex: 1 1 250px;
}
Когда есть достаточно места для отображения двух колонок
Контент в одну колонку
Одна из особенностей использования Flexbox в том, что доступное пространство для блока ограничено или размером экрана или контейнером с меньшим доступным пространством. Медиа-запросы не могут решить эту задачу, поскольку они смотрят только на доступные размеры всего экрана. Таким образом, новые способы компоновки контента позволяют нам реализовать то, что не могут медиа-запросы.
В примере ниже показано, как контент может быть ограничен вьюпортом (измените размер окна, чтобы увидеть гибкость) и контейнером.
Только в том случае, если такого поведения сеток вам недостаточно, стоит задуматься о применении медиа-запросов. В связке медиа-запросов и CSS Grid вы можете полностью переопределить сетку. Медиа-запросы и CSS Grid отлично дополняют друг друга. Всего одной строкой CSS мы можем переопределить, как и где элементы будут расположены в сетке без изменения разметки. Начнем с одноколоночной сетки для узкой ширины.
grid {
display: grid;
grid-gap: 1em;
grid-template-columns: 1fr;
}
Для более широкой сетки я использую медиа запрос для переопределения количества колонок и задаю свойство, чтобы некоторые блоки охватили несколько соседних ячеек.
@media (min-width: 40em) {
.grid {
grid-template-columns: 2fr 1fr;
}
header,
footer {
grid-column: 1 / 3;
}
}
Сочетание уместно примененных медиа-запросов и новых методов компоновки предоставляет нам множество возможностей для достижения наилучшего UX на любом устройстве. В этом CodePen я объединила сетку выше с чуть ранее созданным медиа-объектом. Как вы видите, для контента вполне достаточно места на десктопе, но когда доступная область для содержимого становится слишком узкой, сетка преобразуется медиа-запросом, а блоки встают в одну колонку без медиа-запроса.
Медиа-запросы — лучшие практики
Думаю мы все согласимся, что медиа-запросы нам все еще нужны, но способы их применения однозначно меняются. Ниже приведены несколько советов, как использовать медиа-запросы в 2018 году по максимуму.
НЕ ОРИЕНТИРУЙТЕСЬ НА УСТРОЙСТВА, ДОБАВЬТЕ КОНТРОЛЬНЫЕ ТОЧКИ КОГДА СЧИТАЕТЕ, ЧТО СЕТКУ НАДО ПЕРЕСТРОИТЬ
Когда мы впервые начали использовать медиа-запросы, существовало очень мало устройств, о которых стоило бы беспокоиться. Большинство людей волновал iPhone. Однако, в течение нескольких месяцев, рынок устройств и разнообразие их размеров быстро расширился. Нет смысла ориентироваться на отдельные устройства. Вместо этого просто добавьте контрольные точки, где ваша сетка должна перестраиваться. Если растянуть окно браузера с мобильным дизайном, строки текста становятся слишком длинными. Заметили, что стало некомфортно читать? Именно в этот момент, на этой ширине можно добавить медиа-запрос и написать несколько дополнительных CSS свойств.
Таким образом, девайсы, размер экрана которых меньше этой контрольной, точки получат сетку для мобильных устройств, а те, что больше — сетку, которая использует все доступное горизонтальное пространство окна. Не имеет значения, является ли устройство iPhone, смартфоном Samsung или даже веб-дизайнером играющим со своим окном браузера.
СУЩЕСТВУЮТ НЕ ТОЛЬКО ПИКСЕЛИ
Создавая контрольные точки подумайте о переходе с пикселей. Слишком длинная строка текста является основным признаком, что пока задать контрольную точку. Лучше использовать em вместо пикселей, это обезопасит от случаев, когда у пользователя размер шрифта больше ожидаемого.
БУДЬТЕ ОСОБЕННО ОСТОРОЖНЫ МЕНЯЯ ПОРЯДОК FLEX И CSS GRID ЭЛЕМЕНТОВ
Дразнящая возможность CSS Grid и, в меньшей степени Flexbox — возможность изменить порядок элементов на разных контрольных точках. Этот функционал может обеспечить отличный UX для пользователей, пользующихся клавиатурой и мышью. Но для пользователей, которые используют свой палец для управления, это может создать значительные неудобства. В частности, это пользователи с плохим зрением. Хоть они и используют скринридер, но все равно могут видеть многое из того, что находится на экране. Также это касается пользователей, которые перемещаются на экране с помощью клавиатуры или какого-либо устройства отличного от мыши или пальца.
Эти пользователи переходят из заголовка к заголовку, от ссылки к ссылке, и их устройства будут следовать порядку, в котором элементы указаны в источнике документа, а не в порядке, который они отображают на экране. Если вы изменяете порядок контента на разных контрольных точках, обязательно перепроверьте, на сколько удобно перемещаться по вашему сайту при помощи клавиатуры.
Примечание. Для получения дополнительной информации прочитайте статью «Flexbox & the keyboard navigation disconnect».
НЕ ЗАБУДЬТЕ ПРО ВЕРТИКАЛЬНЫЕ МЕДИА-ЗАПРОСЫ
Большинство разработчиков ассоциируют медиа-запросы с шириной устройств. Главное — обеспечить достаточно горизонтального пространства для отображения нескольких столбцов контента. Но медиа-запросы можно использовать и для проверки доступной высоты.
Вертикальные медиа-запросы могут быть полезными, например, когда нужно убедиться, что экран имеет достаточно высоты для отображения и просмотра контента в несколько колонок рядом без необходимости прокрутки вверх и вниз. В приведенном ниже CSS, многоколоночная сетка будет перестраиваться только в том случае, если достаточно места для двух колонок по 15em. Я добавила медиа-запрос с min-height, чтобы проверять, когда достаточно высоты чтобы чем начинать выстраивать колонки. Если это небольшой экран в альбомном режиме, то покажется только один столбец, чтобы пользователь мог прокручивать вниз и читать.
@media (min-height: 500px) {
section {
column-width: 15em;
}
}
Медиа-запросы Level 4: Что ожидать?
Медиа-запросы, которые мы используем для создания адаптивного дизайна пришли к нам из спецификации CSS Level 3. Новая спецификация медиа-запросов Level 4 разрабатывается рабочей группой CSS. Эта спецификация добавит новый функционал, и произойдут некоторые изменения в синтаксисе. Не все еще реализовано и не все работает даже в современных браузерах, но уже стоит обратить внимание на новую спецификацию и изучить, что же может произойти в ближайшее время. Это поможет нам быть готовыми создавать пользовательские интерфейсы, которые хорошо работают с широким спектром устройств и разнообразием форматов вывода.
Определяем устройство ввода, а не размер экрана
Размер экрана — довольно грубый способ определить, каким устройством пользуется пользователь и как взаимодействует с ним. Современные экранные устройства — невероятно мощные мини-компьютеры. Пользователь может работать на своем телефоне с помощью внешней клавиатуры и мыши даже с небольшим размером экрана; вполне способен нажимать на маленькие элементы интерфейса. Но это может быть и большой планшет с громадным экраном — мобильная версия ему не подойдет. Однако, владельцы таких планшетов используют свой палец в качестве указывающего устройства, поэтому у них нет возможности сделать нормальное наведение, да и их пальцы не так точны, как указатель мыши.
Раньше мы могли выяснить только размер экрана пользователя, сейчас ситуация несколько иная. Теперь мы можем определить может ли пользователь наводить на элементы, а так же тип его указателя, будь то палец или мышь. Свойства pointer и hover помогут улучшить UX для разных типов пользователей и собирать более точные статистики. Приведенные ниже примеры будут работать в текущих версиях Chrome, Safari и Edge. Вы можете проверить, Can I Use для полного списка поддержки браузерами.
Нижеприведенный CodePen вы можете протестировать с любого мобильного браузера. Свойство content выведет результат проверки типа указателя, которым вы пользуетесь.
@media (pointer:coarse) {
.which-pointer::after {
content: "You have a coarse pointer, are you on a touchscreen device?";
}
}
@media (pointer:fine) {
.which-pointer::after {
content: "You have a fine pointer, are you using a mouse or trackpad?";
}
}
Чтобы узнать, можете ли вы навести курсор, проверим доступность функции наведения:
@media (hover) {
.can-i-hover::after {
content: "You look like you can hover.";
}
}
@media (hover:none) {
.can-i-hover::after {
content: "I don't think you can hover.";
}
}
Тестирование поддержки курсора и состояния наведения на iPhone
Протестируйте сами в CodePen.
Существуют также свойства any-pointer и any-hover, которые проверяет все доступные возможности любого планшета и смартфона к указателям и наведениям. Следует проявлять большую осторожность при использовании этих свойств, поскольку переход пользователя с основного устройства указания может привести к плохому UX. Спецификация гласит:
«Проектирование страницы, основываясь на any-hover и any-pointer, вероятно, приведет к плохому UX, потому что свойства указывают только последний из доступных механизмов ввода. Тем не менее, авторы могут использовать эти свойства, чтобы определить функциональность, которую они хотят предоставить, на основе любых дополнительных указывающих устройств, доступных пользователю».
Firefox — браузер отстающий от реализации данного функционала. Вот ссылка на этот баг. Надеюсь, вскоре мы увидим полную поддержку.
Переполнение контента и Display Quality Media Features
Пока еще не реализованное свойство overflow-block, часть Display Quality Media Features, позволит проверить то, как поведет себя блок при переполнении контентом.
Медиа-запросы должны быть разными когда происходит переполнение контента. Стандартный способ решения данной проблемы для планшетов и десктопа — добавление прокрутки. Но некоторые устройства, например, электронный рекламный щит не могут переполняться. Так же у нас есть, Paged Media, если вы выводите контент для печати,.
Есть еще одно полезное свойство, которое поможет определить на каком устройстве отображается контент — overflow: block. Например, вы хотите проверить Paged Media ли контент.
@media (overflow-block: paged) {
}
Синтаксические изменения
Медиа-запросы — такие, какими мы их знаем, достаточно объемные в написании. Изменения синтаксиса медиа-запросов Level 4 поможет с этим. Часто мы используем диапазоны, например между 40em и 59em.
@media (min-width: 40em) and (max-width: 59em) {
}
Мы могли бы записать как диапазон в таком виде:
@media (40em <= width <= 59em ) {
}
Во втором примере кода мы ставим условие, что ширина должна быть больше или равна 40em, а также меньше или равна 59em. Это намного проще и короче, нежели префиксы с минимальной и максимальной шириной первого примера. По прежнему можно будет использовать старый синтаксис. Тем не менее, такая менее объемная альтернатива кажется очень полезной.
Медиа-запросы по-прежнему являются полезным инструментом в нашем арсенале для создания адаптивных сеток. Я видела, как люди лезли вон из кожи с CSS Grid, дабы избежать использования пары медиа-запросов, но нет причин избегать их. Как я надеюсь, я продемонстрировала, что есть новые и полезные функции, которые помогут нам улучшить наши пользовательские интерфейсы для большего количества пользователей. Вот несколько дополнительных ссылок, статей и презентаций, чтобы изучить данный материал подробнее. Некоторые из них я использовала при подготовке этой статьи, другие полезны для дополнительного чтения.
Шаблоны media-queries для адаптации макетов для мобильных устройств
Так как я коммерчески занимаюсь разработкой сайтов, то недавно ко мне обратились с популярной сегодня просьбой адаптировать текущую верстку сайта ml-art.ru под мобильные устройства. Так как ранее я почти все шаблоны сайтов делал статическими, то в этот раз встал вопрос, а что делать, когда нужен 1 шаблон, который будет не одинаково, но достаточно удобно, просматриваться на разных устройствах (мобильные телефоны, планшеты, и так далее)?
Вот уже несколько лет существует такое понятие как Adaptive Design и Responcive Design. Если вы хотите разобраться в чем разница, то вы можете перейти по ссылкам, там некоторое колличество небезызвестных в рунете гиков, дискутируя на эту тему, таки приходят к понимаю того в чем же разница. Я так и не понял.
https://github.com/web-standards-ru/dictionary/issues/84
https://www.responsys.com/blogs/nsm/cross-channel-marketing/difference-responsive-adaptive-web-design/
http://alistapart.com/article/responsive-web-design
Причинами возникновения и развития технологий адаптивного веб-дизайна стали увеличение количества разрешений устройств, с которых есть возможность выхода в интернет и популярность мобильных устройств с выходом в интернет и увеличение мобильного интернет-трафика.
Несколько дней гугления и практики, дали мне понять, что в основе адаптивной верстки лежат следующие, достаточно простые и старые, принципы. Старые потому, что такое понятие как резиновая верстка, было введено еще динозавром отечественного сайтостроения, Атремием Лебедевым, и заключалось в запихивании всей верстки в таблицу, а ячейкам таблицы задавались процентные значения. Принцип резиновости от части сохранился и в адаптивном дизайне, но реализуется иначе.
1. Во-первых, проектирование и верстка начинается от меньшего к большему. Этот принцип называется Mobile First, то есть проектируя макеты, сначала рассматривают то, как сайт будет выглядеть на мобильных устройствах с минимальным разрешением, затем на смартфонах, затем на планшетах, и уже после на десктопах. По сути это правильно, так как в противном случае нам пришлось бы отрезать лишнее, но при подходе Mobile First мы будем наоборот наращивать нужное. Это правильно.
2. Во-вторых, макет строится на основе сетки и является гибким. То есть в сравнении с резиновой, табличной версткой тут уже естественно нет никаких таблиц, а есть лишь grid-based layout или fluid grid, которая совместно с использованием % и em для значений css свойств font-size, line-height, height и width, а также с использованием media-queries для определения разрешений устройств, может содержать различное количество колонок. За счет этого и достигается динамика. То есть вы как бы говорите браузеру с какого устройства и с каким разрешением зашли на сайт, и подкладываете в зависимости от разрешения определенное количество колонок, или передаете определенное значение float: left или float: right или clear: both в зависимости от ситуации, а также масштабируете размеры шрифта заголовков и абзацев текста.
3. В третьих, изображения перестают быть статическими, и им задается динамическое значение ширины в пределах блока через css. То есть используется технология гибких изображений, flexible images, вы достигаете масштабирование изображений на 100% в пределах контейнера. Делается это через задание следующих css правил
div {
width: 100%;
max-width: 100%;
height: auto;
position: relative;
display: block;
}
div img {
width: 100%;
height: auto;
display: block;
}
4. В четвертых, динамика шаблонов в зависимости от устройств достигается благодаря появившемуся в CSS 3.0 свойству media-queries на основании которого вычисляется минимально или максимальное разрешение экрана или разрешение устройства, и отдается в это устройство особый файл стилей.
Конечно разрешения можно указывать индивидуально, но как правило, используют в основном типовые значения.
Мобильные | Таблетки | ПК и ноутбуки |
---|---|---|
240*320 320*480\240 480*800 | 800*600\480 1024*768\600 | От 1024 пикселей |
Стандартный шаблон media-queries выглядит примерно так:
/* Smartphones (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px) {
/* Styles */
}
/* Smartphones (landscape) ----------- */
@media only screen
and (min-width : 321px) {
/* Styles */
}
/* Smartphones (portrait) ----------- */
@media only screen
and (max-width : 320px) {
/* Styles */
}
/* iPads (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px) {
/* Styles */
}
/* iPads (landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {
/* Styles */
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
/* Styles */
}
/* Desktops and laptops ----------- */
@media only screen
and (min-width : 1224px) {
/* Styles */
}
/* Large screens ----------- */
@media only screen
and (min-width : 1824px) {
/* Styles */
}
/* iPhone 4 ----------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
/* Styles */
}
Собственно основные подходы к проектирование адаптивного дизайна я перечислил. Напоследок мне остается только добавить, что конечно же рассмотреть в рамках одной статьи всю практику проектирования адаптивных макетов не возможно. Делать или нет адаптацию ваших макетов к разным устройствам решать вам.
Адаптируем сайты с помощью медиа-запросов @media
Задача
Адаптировать сайт под все устройства и под все разрешения. Сайт имеет одну версию, которая видоизменяется в зависимости от разрешения экрана.
Это вариант, не предусматривающий отдельный мобильный сайт. Вся работа ведется с одним основным сайтом. С помощью медиа-запросов можно выполнить совершенно различные версии одного и того же сайта для просмотра на настольном компьютере и смартфоне. Сложность метода в том, что нужно предусмотреть все возможные разрешения экрана, устройства и ориентацию устройств (горизонтальная, вертикальная).
Решение
Подключаем разные таблицы стилей CSS для разных разрешений экрана. Разрешения экрана ловим медиа-запросами @media.
Конструкция (пример)
@media screen and (min-device-width: 1600px) {
ваши стили CSS для этого разрешения
}
Теперь нужно просто указать все разрешения и предусмотреть возможные устройства для корректного отображения вашего сайта. Будем указывать возможные разрешения диапазонами, к примеру от 1024px до 1280px. Мы не затронем того, какие логические операторы используются в медиа-запросах. Подробная информация про них здесь.
Планшеты вертикально:
@media screen
and (orientation: portrait) and (device-width:768px) {
ваши стили CSS для этого разрешения
}
Телефоны вертикально:
@media screen
and (orientation: portrait) and (min-device-width : 320px) and (max-device-width : 700px) {
ваши стили CSS для этого разрешения
}
Планшеты горизонтально:
@media screen
and (min-width: 768px) and (max-width: 1024px)
ваши стили CSS для этого разрешения
}
Телефоны горизонтально:
@media screen
(max-width:640px) and (orientation:landscape)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1024px) and (max-width:1279px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1280px) and (max-width:1365px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1366px) and (max-width:1439px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1440px) and (max-width:1599px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1600px) and (max-width:1919px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (min-width:1920px) and (max-width:2559px)
ваши стили CSS для этого разрешения
}
Дипазон разрешения экрана:
@media screen
and (device-width:2560px)
ваши стили CSS для этого разрешения
}
Эти медиа-запросы позволяют перекрыть почти все устройства, что сегодня существуют. Появляется экзотика с разрешением в 4K и 5K. С ними нужно экспериментировать отдельно.
Применение CSS в мобильных приложениях
Применение CSS в мобильных приложениях
Последнее обновление: 31.10.2015
Учитывая особенности мобильных устройств — размеры, поддержку тех или иных стилей CSS и т.д. — может потребоваться определить какой-то особенный стиль для мобильных устройств.
В CSS2 уже было решение в виде правила media
, которое позволяет указать устройство, для которого используется данный стиль:
<html> <head> <title>Мобильный сайт</title> <link media="handheld" rel="stylesheet" href="mobile.css"> <link media="screen" rel="stylesheet" href="desktop.css"> </head> <body> ......................
Правило media="handheld"
указывает, что стили в mobile.css будут применяться к мобильным устройствам, в то время как правило
media="screen"
применяется к десктопным сайтам.
Однако многие современные мобильные браузеры по умолчанию считают, что страница предназначена для десктопов, поэтому в любом случае применяет
правило media="screen"
. Поэтому на подобное решение не стоит полагаться.
Для решения этой проблемы в CSS3 были введен механизм CSS3 Media Query. Например, чтобы применить стиль только к мобильным устройствам мы можем написать так:
<html> <head> <title>Мобильный сайт</title> <link rel="stylesheet" type="text/css" media="screen" href="desctop.css" /> <link rel="stylesheet" type="text/css" media="screen and (max-device-width:480px)" href="mobile.css" /> </head> <body> ................................
Значение атрибута media screen and (max-device-width:480px)
говорит нам о том, что стили из файла mobile.css будут
применяться к тем устройствам, максимальная ширина экрана которых составляет 480 пикселей — то есть фактически это и есть мобильные устройства.
Как вариант, можно использовать правила CSS3 Media Query в самом файле css:
@media screen{ body { background-color: red; } /*Далее остальные стили*/ } @media screen and (max-device-width:480px){ body { background-color: blue; } /*Далее остальные стили*/ }
К примеру настройка стилей под смартфоны, планшеты и десктопы может выглядеть так:
/*Стили только для смартфонов*/ @media screen and (max-device-width:480px){ body { background-color: blue; } /*Далее остальные стили*/ } /*Стили только для планшетов*/ @media screen and (min-device-width:481px){ body { background-color: red; } /*Далее остальные стили*/ } /*Стили только для десктопов*/ @media screen and (min-width:769px){ body { background-color: yellow; } /*Далее остальные стили*/ }
Применяемые функции в CSS3 Media Query:
aspect-ratio: отношение ширины к высоте области отображения (браузера)
device-aspect-ratio: отношение ширины к высоте экрана устройства
max-width/min-width и max-height/min-height: максимальная и минимальная ширина и высота области отображения (браузера)
max-device-width/min-device-width и max-device-height/min-device-height: максимальная и минимальная ширина и высота экрана мобильного устройства
orientation: ориентация (портретная или альбомная)
Например, мы можем задать разные стили для разных ориентаций мобильных устройств:
/*Стили для портретной ориентации*/ @media only screen and (orientation: portrait){ } /*Стили ландшафтной ориентации*/ @media only screen and (orientation: landscape){ }
Таким образом, мы меняем лишь определение стилей в зависимости от устройства, а сами стили css по сути остаются теми же, что мы используем для создания обычных сайтов. Теперь посмотрим, как мы можем создавать мобильные приложения непосредственно на платформе ASP.NET MVC 4.
Медиа-запросов | htmlbook.ru
Internet Explorer | Хром | Opera | Safari | Firefox | Android | iOS |
9.0+ | 1.0+ | 10.0+ | 4.0+ | 3.6+ | 2.0+ | 2.0+ |
Краткая информация
Версии CSS
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|---|---|---|
Описание
Наряду с типами носителей в CSS3 включены различные технические устройства, на которых используются различные стили. Например, можно определить смартфон с максимальным разрешением 640елов и для него установить одни стилевые свойства, а для других устройств другие. Также можно выявить различные характеристики вроде наличия монохромного экрана, ориентации (портретная или альбомная) и др.Все характеристики комбинируются, поэтому допустимо задать стиль только для устройств в альбомной ориентации с заданным разрешением экрана.
Возможности медиа-запросов не ограничиваются их выявлением мобильных устройств, с помощью можно создать адаптивный макет. Такой макет подстраивается под разрешение монитора и окна, меняя при необходимости ширину макета, число колонок, размеры изображений и текста. Медиа-запросы ограничивают ширину макета и при достижении этого (к примеру, с уменьшением размера окна) уже применяемый стиль.
Синтаксис
Все запросы начинаются с правила @media, после чего следует условие, в котором используются типы носителей, логические операторы и медиа-функции. Типы носителей в табл. 1.
Тип | Описание |
---|---|
все | Все типы. Это значение используется по умолчанию. |
шрифт Брайля | Устройства, основанные на системе Брайля, предназначены для чтения слепыми людьми. |
с тиснением | Принтеры, использующие для печати систему Брайля. |
портативный | Смартфоны и аналогичные им аппараты. |
печать | Принтеры и другие печатающие устройства. |
выступ | Проекторы. |
экран | Экран монитора. |
речь | Речевые синтезаторы, а также программы для воспроизведения текста вслух.Сюда, например, можно отнести речевые браузеры. |
tty | устройство с фиксированным размером символов (телетайпы, терминалы, устройства с ограничениями дисплея). |
телевизор | Телевизоры. |
Логические операторы, запросы в медиа
и
Логическое И. Указывается для объединения условий.
Пример. Стиль для всех цветных устройств
@media all and (цвет) {...}
не
Логическое НЕ. Указывается для отрицания условия.
Пример. Стиль для всех устройств кроме смартфонов
@media all and (не для портативных устройств) {...}
Оператор не имеет низкого приоритета и оценивается в последнем запросе, поэтому выражение
@media not all and (color) {...}
следует понимать как
@media not (all and (color)) {...}
а не
@media (не все) и (цвет) {...}
ТолькоПрименяется для старых браузеров, которые не содержат медиа-запросы.
Пример. Стиль для новых браузеров
@media only all and (not handheld) {...}
В списке нет логического оператора ИЛИ, его роль запятая. Перечисление нескольких условий через запятую говорит о том, что если хотя бы одно условие выполнено, то стиль будет применён.
Пример. Стиль для устройств с минимальной шириной 480 пикселей.
@media all and (ориентация: альбомная), all and (min-width: 480px) {...}
При использовании указателя следует указывать скобки, чтобы менять приоритет операций.
Медиа-функции
Медиа-функции задают технические характеристики устройства, на котором отображается документ. Стиль выполняется в том случае, если запрос возвращает истину, иными словами, условия выполняются.
Основные функции содержат приставку min- и max-, которые соответствуют минимальному и максимальному значению.Так, max-width: 400px означает, что ширина окна меньше 400 пикселей, а min-width: 1000px, наоборот, сообщает, что ширина окна больше 1000 пикселей.
Соотношение сторон(минимальное соотношение сторон, максимальное соотношение сторон)
Тип носителя: портативный, печать, проекция, экран, tty, tv
Значение: целое число / целое число
Определяет соотношение ширины и высоты отображаемой области устройства. Значение указывается в виде двух целых чисел разделяемых между собой слэшем (/).
цвет (мин-цвет, макс-цвет)
Тип носителя: карманный, принт, проекция, экран, tty, tv
Значение: целое число
Определяет число бит на канал цвета. К примеру, значение 3 означает, что красный, зелёный и синий канал могут отображать 2 3 цветов, что в общем составляет 512 цветов (8 × 8 × 8). Если значение не указано, тогда проверяется что устройство цветное. В возможности 1 такая проверка.
Пример 1. Стиль для цветных устройств
@media screen and (color) {/ * Для цветных экранов * /
тело {фон: # fc0; }
}
@media screen и (min-color: 3) {/ * Минимум 512 цветов * /
тело {фон: #ccc; }
}
индекс цвета (минимальный индекс цвета, максимальный индекс цвета)
Тип носителя: портативный, печать, проекция, экран, tty, tv
Значение: целое число
Определяет количество цветов, которое поддерживает устройство.В примере 2 показан стиль для экранов отображающих не меньше 256 цветов.
Пример 2. Цветной дисплей
@media all and (min-color-index: 256) {
...
}
соотношение сторон устройства (минимальное соотношение сторон устройства, максимальное соотношение сторон устройства)
Тип носителя: портативный, печать, проекция, экран, tty, tv
Значение: целое число / целое число
Определяет соотношение сторон экрана устройства. Значение указывается в виде двух целых чисел разделяемых между собой слэшем (/).В примере 3 показано, как установить стиль для экранов с использованием сторон 16: 9 и более.
Пример 3. «Киношное» соотношение
@media screen and (min-device-aspect-ratio: 16/9) {
...
}
высота устройства (минимальная высота устройства, максимальная высота устройства)
Тип носителя: все кроме речи
Значение: размер
Определяет всю высоту экрана устройства или печатной страницы.
ширина устройства (минимальная ширина устройства, максимальная ширина устройства)
Тип носителя: все кроме речи
Значение: размер
Определяет всю доступную ширину экрана устройства или печатной страницы.В зависимости от разрешения экрана устанавливается ширина слоя. Так, для значения 1280 пикселов ширина макета задаётся как 1100px.
Пример 4. Ширина макета
HTML5CSS3IECrOpSaFx
Ширина макета
<стиль>
div {
отступ: 10 пикселей;
фон: # e8bfad;
маржа: авто;
}
@media screen и (min-device-width: 1600px) {
div {ширина: 1500 пикселей;}
}
@media screen и (ширина устройства: 1280 пикселей) {
div {width: 1100px;}
}
@media screen и (ширина устройства: 1024 пикселя) {
div {width: 980px;}
}
Диабаз, формируя аномальные геохимические ряды, сменяет известняк,
образуя на границе с Западно-Карельским поднятием своеобразную систему грабенов.
сетка
Тип носителя: все
Значение: нет
Определяет, что это устройство с фиксированным размером символов. Размеры букв на таком устройстве занимают одинаковую ширину и высоту и выстраиваются по заданной сетке. К подобным устройствам можно отнести терминалы, а также телефоны, которые входят только один шрифт.
Если вам требуется форматировать текст, не указывайте его размер в пикселах, для подобных устройств используется единица em (пример 5).
Пример 5. Размер букв
HTML5CSS3IECrOpSaFx
Стиль для бабушкофона
<стиль>
@media handheld и (сетка) и (max-width: 15em) {
тело {размер шрифта: 2em; }
}
Привет! Как дела? Как сажа бела?
высота (мин-высота, макс. Высота)
Тип носителя: все кроме речи
Значение: размер
Высота отображаемой области.
монохромный (min-монохромный, max-монохромный)
Тип носителя: портативный, печать, проекция, экран, tty, tv
Значение: целое число
Определяет, что устройство монохромное. Если указано число, то оно обозначает число бит на пиксел. Так, значение 8 равнозначно 256 оттенкам серого (или другого цвета). В примере 6 показан стиль для монохромного и цветного принтера.
Пример 6. Стиль для принтера
@media print and (монохромный) {
тело {font-family: Times, 'Times New Roman', serif; }
h2, h3, p {цвет: черный; }
}
@media print и (цвет) {
тело {font-family: Arial, Verdana, sans-serif; }
h2, h3, p {цвет: # 556b2f; }
}
ориентация
Тип носителя: портативный, печатный, проекционный, экран, tty, tv
Значение: пейзаж | портрет
Определяет, что устройство находится в альбомном режиме (ширина больше высоты) или портретном (ширина меньше высоты).
В примере 7 устанавливается разная фоновая картинка в случае альбомной (пейзажной) или портретной ориентации (портретной).
Пример 7. Использование ориентации устройства
@ экран мультимедиа и (ориентация: альбомная) {
#logo {background: url (logo1.png) no-repeat; }
}
@media screen и (ориентация: портретная) {
#logo {background: url (logo2.png) no-repeat; }
}
Разрешение(минимальное разрешение, максимальное разрешение)
Тип носителя: портативный, печатный, проекционный, экран, телевизор
Значение: разрешение в dpi (на дюйм) или dpcm (точек на сантиметр)
Определяет разрешение устройства, например, принтер.В примере 8 стиль будет работать для принтера с минимальным разрешением 300 точек на дюйм.
Пример 8. Разрешение принтера
@media print and (мин. Разрешение: 300 dpi) {
...
}
сканирование
Тип носителя: tv
Значение:
чередование | прогрессивный
Определяет тип развертки телевизора — чересстрочная (чересстрочная) или прогрессивная (прогрессивная). При чересстрочной развёртке телевизор вначале показывает нечётные строки кадра, затем чётные, что позволяет сокращаемые данные.В прогрессивной развёртке кадр передаётся и показывается целиком.
ширина (минимальная ширина, максимальная ширина)
Тип носителя: все кроме речи
Значение: размер
Описывает ширину отображаемой области. Это может быть окно или печатная страница. В примере 9 при уменьшении окна до 600 пикселей и меньше меняется цвет фона веб-страницы.
Пример 9. Использование max-width
HTML5CSS3IECrOpSaFx
Ширина страницы
<стиль>
тело {фон: # f0f0f0; }
@media screen и (max-width: 600px) {
тело {фон: # fc0; }
}
Пока магма остается в камере, мусковит сингонально поднимает шток,
в то время как значения максимумов изменяются в широких пределах.
.Медиа запросов в CSS — шпаргалка основных медиа запросов
Я здесь не буду расписывать основы адаптивного веб-дизайна и преимущества адаптивного сайта. Когда страница автоматически подстраивается под разрешение разрешения мониторов — это безусловно, здорово и принесёт вам дополнительный трафик с мобильных устройств и планшетов. Владельцы ноутов с небольшим разрешением монитора тоже скажут вам спасибо.
Я оставлю шпаргалку основных медиа запросов ( медиа-запросов ), которые используют на практике сам.Понятное дело, что абсолютно все устройства эти запросы не покроют. При необходимости пишите свои медиа-запросы, проставляя нужные контрольные точки. Существует уже определенная статистика, которой есть ряд популярных разрешений согласно мониторов, на которые стоит ориентироваться в первую очередь. Вот такая статистика за 2020 год:
Разрешение | Пользователей | Динамика |
---|---|---|
1366×768 | 21.15% | -1,46% |
360×640 | 18,28% | + 2.31% |
1920×1080 | 12,29% -0,85% | -0,85% |
1280×1024 | 6,94% | -0,40% |
1600×900 | 4,57% | -0,23% |
375×667 | 4.36% | + 0,48% |
1024×768 | 4,08% | -0,26% |
320×568 | 3,83% | + 0,10% |
1440×900 | 3,16% | -0,19% |
1280×800 | 3,08% | -0,02% |
1680×1050 | 2.03% | -0,25% |
768×1024 | 2,00% | + 0,07% |
1536×864 | 1,93% | + 0,22% |
320×534 | 1,84% | + 0,05% |
320×570 | 1,62% | + 0,09% |
1280×720 | 1.42% | + 0,04% |
1360×768 | 1,05% | -0,22% |
Должен быть подключен мета тег область просмотра
:
Шпаргалка Медиа-запросы CSS
/ * Смартфоны (вертикальная и горизонтальная ориентация) ----------- * / @media only screen и (min-width: 320px) и (max-width: 480px) { / * стили * / } / * Смартфоны (горизонтальная) ----------- * / @media only screen и (min-width: 321px) { / * стили * / } / * Смартфоны (вертикальная) ----------- * / @media only screen и (max-width: 320px) { / * стили * / } / * iPad (вертикальная и горизонтальная) ----------- * / @media only screen и (min-width: 768px) и (max-width: 1024px) { / * стили * / } / * iPad (горизонтальная) ----------- * / @media only screen and (min-width: 768px) and (max-width: 1024px) and (Ориентация: альбомная) { / * стили * / } / * iPad (вертикальная) ----------- * / @media only screen and (min-width: 768px) and (max-width: 1024px) and (Ориентация: портрет) { / * стили * / } / * iPad 3 ********** / @media only screen and (min-width: 768px) and (max-width: 1024px) and (Ориентация: альбомная) и (-webkit-min-device-pixel-ratio: 2) { / * стили * / } @media only screen и (min-width: 768px) and (max-width: 1024px) and (Ориентация: портрет) и (-webkit-min-device-pixel-ratio: 2) { / * стили * / } / * Настольные компьютеры и ноутбуки ----------- * / @media only screen и (min-width: 1224px) { / * стили * / } / * Большие экраны ----------- * / @media only screen и (min-width: 1824px) { / * стили * / } /* Ай фон 4 ----------- */ @media only screen and (min-width: 320px) and (max-width: 480px) and (Ориентация: альбомная) и (-webkit-min-device-pixel-ratio: 2) { / * стили * / } @media only screen and (min-width: 320px) and (max-width: 480px) and (Ориентация: портрет) и (-webkit-min-device-pixel-ratio: 2) { / * стили * / } / * iPhone 5 ----------- * / @media only screen and (min-width: 320px) and (max-height: 568px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 2) { / * стили * / } @media only screen and (min-width: 320px) and (max-height: 568px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 2) { / * стили * / } /* Айфон 6 ----------- */ @media only screen and (min-width: 375px) and (max-height: 667px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 2) { / * стили * / } @media only screen and (min-width: 375px) and (max-height: 667px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 2) { / * стили * / } / * iPhone 6+ ----------- * / @media only screen and (min-width: 414px) and (max-height: 736px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 2) { / * стили * / } @media only screen and (min-width: 414px) and (max-height: 736px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 2) { / * стили * / } /* Samsung Galaxy S3 ----------- */ @media only screen and (min-width: 320px) and (max-height: 640px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 2) { / * стили * / } @media only screen and (min-width: 320px) and (max-height: 640px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 2) { / * стили * / } /* Самсунг гэлакси с4 ----------- */ @media only screen and (min-width: 320px) and (max-height: 640px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 3) { / * стили * / } @media only screen and (min-width: 320px) and (max-height: 640px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 3) { / * стили * / } / * Samsung Galaxy S5 ----------- * / @media only screen and (min-width: 360px) and (max-height: 640px) and (Ориентация: альбомная) и (-webkit-device-pixel-ratio: 3) { / * стили * / } @media only screen and (min-width: 360px) and (max-height: 640px) and (Ориентация: портрет) и (-webkit-device-pixel-ratio: 3) { / * стили * / }
Сервисы по проверке сайта на адаптивность:
.Адаптивная верстка: медиа-запросы — AlexdevAlexdev
Добрый день, уважаемые читатели!
Сегодня я бы хотел продолжить обсуждение адаптивной верстки.
В прошлой статье мы обсудили, как сделать простенький адаптивный дизайн. После создания мы выявили 1 большой минус:
На небольших экранах изображения будут слишком мелкими.
Как решить проблему? Медиа-запросы!
Данную проблему можно решить благодаря возможности новой CSS: медиа-запросов .
С их помощью мы можем пропускать экран пользователя и отображать необходимые стили для каждого разрешения или устройства.
Рассмотрим пример:
@media screen и (max-width: 960px) { .учебный класс { фон: красный; } }
В результате, если у пользователя экран меньше или равен 960 пикселей, то задний фон для класса .class будет красным.
Таким образом мы можем подстраивать наши стили под каждый экран в отдельной.
Условия для Media Queries
Условия можно задать следующие условия:
@media screen и (max-width: XXXpx) {} @media screen и (min-width: XXXpx) {} @media screen и (min-width: XXXpx) и (max-width: YYYpx) {} @media screen и (max-device-width: XXXpx) {}
Лично я чаще всего использую первое условие.
Способы подключения CSS-таблиц
Так же можно подключиться условия, для каких экранов будет та или иная таблица стилей:
Практика
Давайте доработаем пример из прошлой статьи:
HTML
...
...
КСС
h2 { размер шрифта: 24 пикселя; выравнивание текста: центр; } div.Галерея { маржа: 0 авто; ширина: 1000 пикселей; выравнивание текста: центр; максимальная ширина: 90%; / * контейнер не превышает 90% ширины экрана * / минимальная ширина: 500 пикселей; } img { плыть налево; максимальная ширина: 31%; высота: авто; набивка: 1%; / * небольшие оступы для изображений * / }
Что получилось? Смотрим: демонстрация 1
При небольшом разрешении картинки становятся слишком мелкими, а текст в заголовке огромным.
Решим нашу проблему!
Добавляем Media Queries
Добавим в CSS следующий код:
/ * прошлый CSS * / h2 {} div.image_gallery {} img {} @media screen и (max-width: 768px) {/ * разрешение планшета * / h2 { размер шрифта: 20 пикселей; } div.image_gallery { минимальная ширина: 320 пикселей; } img { максимальная ширина: 48%; / * 2 изображения в ряд * / высота: авто; набивка: 1%; / * небольшие оступы для изображений * / } }
Мы добавили проверку на разрешение.Если разрешение экрана меньше или равно 768 пикселей, то наша галерея перестраивается. В ряд у нас умещается теперь по 2 изображения (ширина 48% + отступ 2%).
Демонстрация 2
В результате фотографии на планшете стали выглядеть намного лучше!
Теперь разберемся с экраном поменьше.
@media screen и (max-width: 480px) {/ * разрешение смартфона * / h2 { минимальная ширина: 320 пикселей; размер шрифта: 16 пикселей; } div.Галерея { ширина: 320 пикселей; минимальная ширина: 320 пикселей; } img { максимальная ширина: 98%; высота: авто; набивка: 1%; / * небольшие оступы для изображений * / } }
После добавления этого кода при разрешении экрана меньше либо равного 480 пикселей, снова перестраиваются и теперь по одному в ряд.
Демонстрация 3
Итог
Теперь мы имеет фотогалерею, которая удобно подстраивается под устройство.При желании можно добавить и другие разрешения (320 пкс, 960 пкс и т.д.).
Ничего сложного и такая хорошая возможность подстроить наш сайт под разные экраны!
Демонстрация 1
Демонстрация 2
Спасибо за внимание, жду вас в следующих статьях! Следующая статья: Адаптивная верстка: анимация
Подписывайтесь на рассылку 😉
Что-то осталось неясным, неточным? Пишите в комментариях!
Автор статьи: Алексей.Раздел: CSSДата публикации: 16.12.2013 .