Медиа-запросы в адаптивном дизайне 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. Однако, в течение нескольких месяцев, рынок устройств и разнообразие их размеров быстро расширился. Нет смысла ориентироваться на отдельные устройства.
Таким образом, девайсы, размер экрана которых меньше этой контрольной, точки получат сетку для мобильных устройств, а те, что больше — сетку, которая использует все доступное горизонтальное пространство окна. Не имеет значения, является ли устройство 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, дабы избежать использования пары медиа-запросов, но нет причин избегать их. Как я надеюсь, я продемонстрировала, что есть новые и полезные функции, которые помогут нам улучшить наши пользовательские интерфейсы для большего количества пользователей. Вот несколько дополнительных ссылок, статей и презентаций, чтобы изучить данный материал подробнее. Некоторые из них я использовала при подготовке этой статьи, другие полезны для дополнительного чтения.
- «7 Habits of Highly Effective Media Queries», Brad Frost
- «Vertical Media Queries and Wide Sites», Trent Walton
- «Media Queries 4», Florian Rivoal, dotCSS 2017 (video)
- «Interaction Media Features and their Potential (for incorrect assumptions)», Patrick H. Lauke, Dev.Opera
Медиа-запросы CSS — описание, специфические особенности использования и рекомендации
Медиа-запросы — это функция CSS, которая позволяет содержимому веб-страницы адаптироваться к разным размерам экрана и разрешениям. Они являются неотъемлемой частью гибкого веб-дизайна и используются для настройки внешнего вида веб-сайтов для нескольких устройств с различным размером экрана. Так, Media Queries — это модуль CSS3, позволяющий преобразовывать контент в такие условия, как разрешение экрана смартфона или компьютера. Стал рекомендованным W3C стандартом в июне 2012 года и активно применяется сегодня в веб-разработке и графическом дизайне.
Медиа-запросы CSS полезны, если вы хотите применять стили в зависимости от общего типа устройства (например, от печати или экрана), от конкретных характеристик (например, от ширины окна просмотра браузера) или от среды (например, от условий внешнего освещения). Огромное количество подключенных к Интернету устройств, доступных сегодня, делает медиа-запросы важным инструментом для создания веб-сайтов и приложений, которые достаточно стабильны для работы на любом оборудовании.
История
Медиа-запросы были впервые обозначены в первоначальном предложении CSS Hocon Wium Lie в 1994 году, но на тот момент не стали частью CSS1. Рекомендация HTML4 от 1997 года показывает пример того, как в будущем могут быть добавлены эти компоненты.
В 2000 году W3C начал работу над Media Queries. Первый публичный рабочий проект для медиа-запросов был опубликован в 2001 году. Спецификация стала рекомендацией W3C в 2012 году после того, как браузеры добавили поддержку.
Как пишутся в CSS медиа-запросы?
Запросы могут быть вставлены в HTML-файл веб-страницы или включены в отдельный файл .CSS, на который она ссылается. Ниже приведено описание и пример медиа-запроса в CSS:
@media screen and (max-width: 768px)
{
header { height: 70px; }
article { font-size: 14px; }
img { max-width: 480px; }
}
Запрос на мультимедиа выше активируется, если окно браузера пользователя составляет 768 пикселей в ширину или меньше. Это может произойти, если вы сократите свое окно на настольном компьютере или используете мобильное устройство, например планшет, для просмотра веб-содержимого.
Как использовать медиа-запросы CSS3?
В ответном веб-дизайне медиа-запросы действуют как фильтры для разных размеров экрана. Как и все модули в каскадной таблице стилей, те, которые появляются дальше по списку, переопределяют те, что над ними. Поэтому стили по умолчанию обычно определяются сначала в документе CSS, за которым следуют медиа-запросы для разных размеров экрана. Например, сначала могут быть определены стили рабочего стола, а затем мультимедийный запрос со стилями для пользователей планшетов, а затем — для пользователей смартфонов. Стили также могут быть определены в обратном порядке.
В то время как минимальная ширина является наиболее распространенной функцией, используемой в медиа-запросах, многие другие также широко доступны. Размеры изображения в медиа-запросах CSS включают:
- минимальную ширину устройства;
- минимальную высоту устройства;
- соотношение сторон;
- максимальный индекс цвета;
- максимальное разрешение;
- ориентацию экрана.
Например, значение разрешения может использоваться для обнаружения дисплеев HiDPI (таких как изображения сетчатки) и загрузки графики с высоким разрешением вместо стандартных изображений.
Использование и ошибки
Почему не работают медиа-запросы CSS? Данный компонент состоит из типа носителя и одного или нескольких выражений с использованием медиа-функций, которые возвращают либо true, либо false. Результат запроса является истинным, если тип носителя, указанный в нем, соответствует тому типу устройства, на котором отображается документ, и все выражения в запросе на мультимедиа являются истинными. В случаях, когда не работают медиа-запросы CSS, необходимо проверить соответствующие правила стиля и нормы каскадирования. Возможно, эти данные содержат ошибку.
Типы носителей
Тип носителя можно объявить в заголовке HTML-документа, используя атрибут «media» внутри элемента <link>. Значение атрибута «media» указывает, на каком устройстве будет отображаться связанный документ. Типы носителей также могут быть объявлены в инструкциях XML-обработки, @import at-rule и @media at-rule. Вид мультимедиа «все» также может использоваться для указания, что таблица стилей применяется ко всем типам носителей.
Что такое CSS?
CSS (Cascading Style Sheet или каскадные таблицы стилей) используется для форматирования макета веб-страниц, определения стилей текста, размеров таблиц и других аспектов веб-содержимого, которые ранее могли быть определены только в HTML-структуре страницы.
CSS помогает веб-разработчикам создавать единый формат для нескольких страниц сайта. Вместо определения вида каждой таблицы и каждого блока текста в HTML стили определяются только один раз в документе CSS. Когда формат определен в каскадной таблице стилей, он может использоваться любой страницей, ссылающейся на файл CSS. Кроме того, CSS упрощает изменение стилей на нескольких страницах одновременно. Например, веб-разработчик может запланировать увеличение размера текста по умолчанию с 10 до 12 pt на пятидесяти страницах веб-сайта. Если при этом все страницы ссылаются на одну и ту же таблицу стилей, размер текста достаточно будет изменить только в таблице, и на всех страницах он окажется нужного размера.
Хотя CSS отлично подходит для создания текстовых стилей, он также полезен для форматирования других аспектов макета веб-страницы. Например, CSS можно использовать для определения заполнения ячеек таблицы, стиля, толщины и цвета границы, а также для заполнения элементов изображения или других объектов. CSS, в сравнении с HTML, предоставляет веб-разработчикам более точный контроль над тем, как будут выглядеть веб-страницы.
Типы мультимедиа-запросов
Типы носителей описывают общую категорию устройства. Хотя веб-сайты обычно разрабатываются с учетом экранов, программист может создавать стили, предназначенные для специальных устройств, таких как принтеры или аудиоредакторы. Например, этот фрагмент CSS-кода предназначен для принтеров: @media print {…}.
Вы также можете настроить таргетинг на несколько устройств. Например, это правило @media использует два медиа-запроса для таргетинга на устройства экрана и печати: @media screen, print {…}.
Медиа-функции CSS
Функции мультимедиа описывают конкретные характеристики пользовательского агента, устройства вывода или среды. Например, вы можете применять определенные стили к широкоформатным мониторам, компьютерам или к устройствам, которые используются в условиях низкой освещенности. В этом примере применяются стили, когда основной механизм ввода пользователя (например, мышь) может зависать над элементами: @media (hover: hover) {…}.
Многие функции мультимедиа — это функции диапазона, что означает, что они могут иметь префикс «min-» или «max-» для выражения ограничений минимального или максимального условия. Например, эта команда будет применять стили только в том случае, если ширина видового экрана браузера равна или меньше 12,450px: @media (max-width: 12450px) {…}.
Если вы создаете запрос функции мультимедиа без указания значения, вложенные стили будут использоваться до тех пор, пока значение функции не равно нулю. Например, этот CSS будет применяться к любому устройству с цветным экраном: @media (цвет) {…}.
Если функция не применяется к устройству, на котором работает браузер, выражения, содержащие эту функцию мультимедиа, всегда являются ложными. Например, стили, вложенные в следующий запрос, никогда не будут использоваться, потому что ни одно речевое устройство не имеет формата экрана: @media speech и (соотношение сторон: 11/5) {…}.
Техническая спецификация
Медиа-запросы — это ключевой компонент адаптивного дизайна, который позволяет адаптировать CSS на основе различных параметров или характеристик устройства. Например, мультимедийный запрос может применять разные стили, если экран меньше определенного размера, или на основе того, удерживает ли пользователь свое устройство в портретном или альбомном режиме.
Синтаксис запросов к мультимедиа также используется в других контекстах, например, в медиа-атрибуте элемента <source>, который может быть настроен на строку запроса мультимедиа для использования, чтобы определить, следует ли применять этот источник при выборе конкретного изображения для употребления в элементе <picture>.
Метод Window.matchMedia () может использоваться для проверки окна на запросе в медиа. Вы также можете применить функцию MediaQueryList.addListener () для уведомления при изменении состояния запросов. С помощью этой функции ваш сайт или приложение смогут реагировать на изменения конфигурации устройства, ориентации или состояния.
Запросы мультимедиа для вызова стилей
Адаптивный веб-дизайн столкнулся с медленной загрузкой содержимого. Сейчас процесс по устранению этого недостатка хорошо документирован. Есть несколько способов, которые разработчики используют для лучшей загрузки контента и изображений на разных устройствах.
Один из них — использование медиа-запросов, которые работают для вызова стилей пользовательского устройства на основе его размеров. В прошлом программисты спорили о том, являются ли медийные запросы наилучшим решением в случае с мобильными устройствами, и эти дебаты по-прежнему продолжаются. Сейчас официально признано, что CSS медиа-запросы (media queries) — это простой и эффективный способ обслуживания различного контента для ряда устройств, и наиболее часто используемые запросы — это те, которые касаются высоты и ширины окна просмотра.
Вызов с использованием внешней таблицы стилей
CSS-стили для медиа-запросов сначала проверяют тип медиафайлов на строку пользовательского агента, прежде чем переходить к проверке физических атрибутов окна просмотра. Они являются объявлением CSS, которое можно вызвать с помощью внешней таблицы стилей. Внешний вызов будет выглядеть так: <link rel = «stylesheet» media = «и (min-width: 320px) и (max-width: 480px)» href = «css/yourstylesheet.css» />.
Прямой же вызов CSS будет выглядеть так:
@media screen and (min-width:320px)
and (max-width:480px){
/*Insert your styles here
}.
Медиа-запросы CSS не являются модульными, а значит, это может затруднить их работу. Запрос элемента похож на медийный запрос, потому что он использует CSS при выполнении определенных условий. Однако эти виды данных основаны на элементах, а не на браузере, которые в настоящее время не поддерживаются в CSS3. Элементные запросы набирают обороты, тем более что они дополняют медиа-запросы CSS. Это означает, что оба могут в конечном итоге работать вместе, чтобы создавать более модульные и гибкие конструкции.
Работа с изображениями
Масштабирование изображений для гибкого дизайна — достаточно простой процесс. Тем не менее, есть несколько проблем, на которые нужно обратить внимание. Речь идет о потере деталей и изображений при сжатии для размещения контента страницы на более мелких устройствах. Чтобы создать масштабируемые изображения, просто добавьте следующий код в таблицу стилей:
img {
max-width: 100%;
}
Это уменьшит изображение, чтобы оно соответствовало размеру контейнера, который меньше ширины картинки. Установка максимальной ширины на 100% означает, что изображение не будет увеличиваться больше, чем его фактический размер.
Однако это может быть проблемой, когда дело доходит до производительности сайта, потому что вы по существу доставляете полноразмерный образ на каждое устройство. Для этого нет простого решения, особенно если вы работаете на сайте с устаревшими изображениями. Однако Adaptive Images — это плагин, который может оптимизировать ваши изображения на основе размеров экрана. Адаптивный дизайн на основе медиа-запросов Framework Foundation также позволяет обмениваться изображениями на основе размеров экрана.
При работе с изображениями необходимо использовать SVG, веб-шрифты, веб-тип и CSS.
Как вы пишете запрос CSS Media?
Отзывчивый веб-дизайн — это подход к созданию веб-страниц, где эти страницы могут динамически изменять их макет и внешний вид на основе размера экрана посетителя. Большие экраны могут получать макет, подходящий для этих больших дисплеев, в то время как более мелкие устройства, такие как мобильные телефоны, могут получать тот же веб-сайт, отформатированный таким образом, который подходит для этого меньшего экрана. Этот подход обеспечивает более удобную работу пользователей для всех пользователей, и это может даже помочь улучшить ранжирование в поисковых системах. Важной частью адаптивного веб-дизайна является CSS Media Queries.
Запросы в средствах массовой информации похожи на небольшие условные утверждения внутри CSS-файла вашего веб-сайта, что позволяет вам устанавливать определенные правила CSS, которые будут действовать только после выполнения определенного условия — например, когда размер экрана выше или ниже определенных пороговых значений.
Медиа-запросы в действии
Итак, как вы используете Media Queries на веб-сайте? Вот очень простой пример:
- Вы начнете с хорошо структурированного HTML-документа, свободного от любых визуальных стилей (для чего нужен CSS)
- В вашем файле CSS вы начнете, как обычно, путем стилизации страницы и установки базовой линии для того, как будет выглядеть веб-сайт. Скажем, вы хотели, чтобы размер шрифта страницы составлял 16 пикселей, вы можете написать этот CSS:
body {font-size: 16px; }
- Теперь вы можете увеличить размер шрифта для больших экранов, которые имеют достаточно недвижимости для этого. Здесь вызывается Media Queries. Вы должны запустить Media Query следующим образом:
@media и (min-width: 1000px) {}
- Это синтаксис медиа-запроса. Он начинается с @media для создания самого медиа-запроса. Затем вы устанавливаете «тип носителя», который в этом случае является «экраном». Это относится к экранам настольных компьютеров, планшетам, телефонам и т. Д. Наконец, вы завершаете Media Query «медиа-функцией». В нашем примере выше, это «mid-width: 1000px». Это означает, что Media Query будет использоваться для дисплеев с минимальной шириной в 1000 пикселей.
- После этих элементов Media Query вы добавляете открывающую и закрывающуюся фигурные скобки, похожие на то, что вы делали бы в любом обычном правиле CSS.
- Последним шагом к медиа-запросу является добавление правил CSS, которые вы хотите применить, когда это условие выполнено. Вы добавляете эти правила CSS между фигурными фигурными скобками, которые составляют Media Query, например:
@media screen и (min-width: 1000px) {body {font-size: 20px; }
- Когда условия Media Query будут выполнены (окно браузера будет шириной не менее 1000 пикселей), этот стиль CSS вступит в силу, изменив размер шрифта нашего сайта с 16 пикселей, которые мы установили первоначально, на наше новое значение 20 пикселей.
Добавление дополнительных стилей
Вы можете разместить столько CSS-правил в этом медиа-запросе, сколько необходимо, чтобы настроить внешний вид вашего веб-сайта. Например, если вы хотите не только увеличить размер шрифта до 20 пикселей, но и изменить цвет всех абзацев на черный (# 000000), вы можете добавить это:
@media screen и (min-width: 1000px) {body {font-size: 20px; } p {color: # 000000; }}
Добавление дополнительных запросов к мультимедиа
Кроме того, вы можете добавить дополнительные медиа-запросы для всех больших размеров, добавив их в таблицу стилей следующим образом:
@media screen и (min-width: 1000px) {body {font-size: 20px; } p {color: # 000000; {} экран @media и (min-width: 1400px) {body {font-size: 24px; }}
Первые медиа-запросы будут иметь ширину 1000 пикселей, изменив размер шрифта до 20 пикселей. Затем, как только браузер будет выше 1400 пикселей, размер шрифта снова изменится на 24 пикселя. Вы можете добавить столько запросов к материалам, сколько необходимо для вашего конкретного веб-сайта.
Минимальная ширина и максимальная ширина
Обычно существует два способа записи медиапрограмм — с использованием «min-width» или «max-width». До сих пор мы видели «минимальную ширину» в действии. Это приводит к тому, что медиа-запросы вступают в силу после достижения браузером минимальной ширины. Таким образом, запрос, который использует «min-width: 1000px», будет применяться, если браузер имеет ширину не менее 1000 пикселей. Этот стиль Media Query используется, когда вы строите сайт с помощью «мобильного».
Если вы используете «max-width», это работает противоположным образом. Запрос СМИ «max-width: 1000px» будет применяться после того, как браузер упадет ниже этого размера.
Что касается старых браузеров
Одной из задач Media-запросов является отсутствие поддержки в более старых версиях Internet Explorer. К счастью, есть полиполки, которые могут исправлять поддержку медиа-запросов в старых браузерах, что позволяет использовать их на веб-сайтах сегодня, при этом сохраняя при этом, что отображение этого сайта не выглядит сломанным в более старом программном обеспечении браузера.
Отредактировано Джереми Жирардом на 1/24/17
7
Медиа-запросы CSS: основы работы | 8HOST.COM
28 мая, 2022 12:07 пп 1 views | Комментариев нетDevelopment | Amber | Комментировать запись
Медиа-запросы – это очень мощный способ настройки стилей в соответствии с такими факторами, как тип используемого устройства, размер области просмотра, плотность пикселей на экране и даже ориентация устройства. Поскольку медиа-запросы существуют уже довольно давно, вы, вероятно, уже знакомы с их основным синтаксисом и использованием. Поэтому в данном мануале мы постараемся кратко и понятно объяснить основы их работы, а также покажем несколько трюков, о которых вы не знали.
Основные медиа-запросы
Медиа-запросы определяются с помощью правила @media, за которым указывается тип и функции медиа. Доступные типы медиа: all, print, screen и speech (если тип не указан, по умолчанию подразумевается all). Одновременно можно использовать несколько типов, в таком случае их разделяют запятыми:
@media screen, print { /* Styles for screen and print devices */ }
Примечание: Такие типы медиа, как tv или projection, устарели с выходом Media Queries level 4.
Что касается медиа-функций, они определяются в скобках. Вы можете протестировать широкий спектр функций. Некоторые из наиболее популярных — это width, height, aspect-ratio, orientation и resolution. Многие из этих популярных функций являются функциями диапазона, поэтому они также имеют минимальную и максимальную версии (то есть min-width, max-width, min-aspect-ratio, max-aspect-ratio и т.п.)
В следующем простом примере цвет фона по умолчанию — ярко-розовый, но экранные устройства с шириной области просмотра 650 пикселей или меньше вместо него будут отображать цвет rebeccapurple:
body { background: hotpink; } @media screen and (max-width: 650px) { body { background: rebeccapurple; } }
Обратите внимание, при указании типа и функции медиа между ними нужно использовать логический оператор and.
Вот еще несколько примеров простых медиа-запросов, которые указывают либо тип медиа, либо медиа-функцию, либо и то, и другое:
@media print { /* styles for print media only */ } @media (max-width: 65rem) { /* styles for any device that has a display width of 65rem or less */ } @media screen and (min-width: 800px) { /* styles for screen viewports that have a width of 800px or more */ }
Несколько медиа-функций
Вы можете указать несколько медиа-функций, если того требует ваш запрос. Для этого между функциями используется логический оператор and. При использовании and запрос будет выполнен только в том случае, если все функции оцениваются как истинные. Например, очень часто макеты настраиваются на несколько разных диапазонов ширины области просмотра:
/* Extra-small */ @media screen and (max-width: 360px) { /* ... */ } /* Small */ @media screen and (min-width: 361px) and (max-width: 480px) { /* . .. */ } /* Medium-only */ @media screen and (min-width: 481px) and (max-width: 960px) { /* ... */ } /* ... */
Логический оператор or и запятые
Также можно определить несколько запросов и разделить их запятыми. В этом случае запятые действуют как логические операторы or, и запрос становится по сути списком запросов. Медиа-запрос будет применяться, если какой-либо из перечисленных запросов отвечает шаблону.
В следующем примере медиа-запрос будет истинным, если устройство имеет портретную ориентацию или если окно просмотра устройства имеет минимальную ширину 3rem и максимальное соотношение сторон 2/1:
@media (orientation: portrait), (min-width: 3rem) and (max-aspect-ratio: 2/1) { /* ... */ }
Логический оператор not
Вы можете использовать логический оператор not в начале запроса, чтобы изменить истинность всего запроса. Оператор not полезен для применения стилей, когда определенные условия не выполняются браузером или устройством. В следующем примере медиа-запрос будет применяться, когда основное указывающее устройство не может наводить курсор на элементы:
@media not screen and (hover: hover) { /* ... */ }
Примечание: Тип медиа нужно указывать обязательно. Кроме того, not меняет не весь список запросов (запросы, разделенные запятыми), а только один запрос.
Логический оператор only
Логический оператор only особенный – он скрывает весь запрос для старых браузеров. Другими словами, старые браузеры не понимают ключевое слово only, поэтому игнорируют весь медиа-запрос. Иначе ключевое слово only не действует.
@media only all and (min-width: 320px) and (max-width: 480px) { /* ignored by older browsers */ }
Примечание: Как и в случае с оператором not, при использовании only тип носителя является обязательным. Обратите внимание, что устаревшие браузеры, которые не поддерживают Media Queries level 3, сейчас встречаются редко, поэтому в большинстве случаев only можно не использовать.
Дополнения из Media Queries Level 4
В последнем выпуске спецификации Media Queries Level 4 появилось довольно много новых медиа-функций, которые можно протестировать:
- pointer: определяет, есть ли у вас первичное указывающее устройство (none, coarse и fine).
- any-pointer: определяет, доступно ли какое-либо указывающее устройство (none, coarse и fine).
- hover: определяет, может ли основное указывающее устройство наводить курсор на элементы (none или hover).
- any-hover: определяет, может ли любое из доступных указывающих устройств наводиться на элементы (none или hover).
- color-gamut: диапазон доступных цветов (srgb, p3 или rec2020).
- overflow-inline: способ обработки потенциального переполнения на внутренней оси (none, paged, optional-paged или scroll).
- overflow-block: способ обработки потенциального переполнения на оси блока (none, paged, optional-paged или scroll).
- update: частота, с которой может обновляться макет (none, slow или fast).
Медиа-запросы для дисплеев Retina
За последние несколько лет наблюдается распространение устройств с дисплеями с более высокой плотностью пикселей. Определенные аспекты дизайна для устройств с более высокой плотностью пикселей можно определять иначе. К примеру, можно использовать определенную графику с высоким разрешением.
Чтобы добиться этого, используют медиа-функцию с минимальным разрешением со значением 192 dpi. Однако функция resolution поддерживается не всеми браузерами, и для более надежного подхода можно также добавить дополнительную нестандартную функцию -webkit-min-device-pixel-ratio со значением 2:
@media screen and (min-resolution: 192dpi), (-webkit-min-device-pixel-ratio: 2) { /* ... */ }
Проверить поддержку медиа-функции в браузерах можно на Can I Use.
Ниже вы найдете несколько очень полезных ресурсов, связанных с медиа-запросами:
- Медиа-запросы CSS-Tricks для стандартных устройств
- MQTest. io позволяет проверить, на какие мультимедийные функции реагирует ваше устройство.
- Страничка MDN по доступным медиа-функциям.
Читайте также: CSS-свойство will-change: как использовать
Tags: CSSМедиа запросы в CSS — шпаргалка основных media queries
Я здесь не буду расписывать основы адаптивного веб-дизайна и преимущества адаптивного сайта. Когда страница автоматически подстраивается под различные разрешения мониторов — это, безусловно, здорово и принесёт вам дополнительный трафик с мобильных устройств и планшетов. Владельцы ноутов с небольшим разрешением монитора тоже скажут вам спасибо.
Я оставлю шпаргалку основных медиа запросов (media queries), которые использую на практике сам. Понятное дело, что абсолютно все устройства эти запросы не покроют. При необходимости пишите свои media queries, проставляя нужные контрольные точки. Существует уже определённая статистика, согласно которой есть ряд особо популярных разрешений мониторов, на которые стоит ориентироваться в первую очередь. Вот такая статистика за 2020 год:
Должен быть подключен мета тег viewport
:
<meta name="viewport" content="width=device-width, initial-scale=1">
Шпаргалка Media queries CSS
/* Smartphones (вертикальная и горизонтальная ориентация) ----------- */ @media only screen and (min-width : 320px) and (max-width : 480px) { /* стили */ } /* Smartphones (горизонтальная) ----------- */ @media only screen and (min-width: 321px) { /* стили */ } /* Smartphones (вертикальная) ----------- */ @media only screen and (max-width: 320px) { /* стили */ } /* iPads (вертикальная и горизонтальная) ----------- */ @media only screen and (min-width: 768px) and (max-width: 1024px) { /* стили */ } /* iPads (горизонтальная) ----------- */ @media only screen and (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) { /* стили */ } /* iPads (вертикальная) ----------- */ @media only screen and (min-width: 768px) and (max-width: 1024px) and (orientation: portrait) { /* стили */ } /* iPad 3**********/ @media only screen and (min-width: 768px) and (max-width: 1024px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 2) { /* стили */ } @media only screen and (min-width: 768px) and (max-width: 1024px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 2) { /* стили */ } /* Настольные компьютеры и ноутбуки ----------- */ @media only screen and (min-width: 1224px) { /* стили */ } /* Большие экраны ----------- */ @media only screen and (min-width: 1824px) { /* стили */ } /* iPhone 4 ----------- */ @media only screen and (min-width: 320px) and (max-width: 480px) and (orientation: landscape) and (-webkit-min-device-pixel-ratio: 2) { /* стили */ } @media only screen and (min-width: 320px) and (max-width: 480px) and (orientation: portrait) and (-webkit-min-device-pixel-ratio: 2) { /* стили */ } /* iPhone 5 ----------- */ @media only screen and (min-width: 320px) and (max-height: 568px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2){ /* стили */ } @media only screen and (min-width: 320px) and (max-height: 568px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2){ /* стили */ } /* iPhone 6 ----------- */ @media only screen and (min-width: 375px) and (max-height: 667px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2){ /* стили */ } @media only screen and (min-width: 375px) and (max-height: 667px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2){ /* стили */ } /* iPhone 6+ ----------- */ @media only screen and (min-width: 414px) and (max-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2){ /* стили */ } @media only screen and (min-width: 414px) and (max-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2){ /* стили */ } /* Samsung Galaxy S3 ----------- */ @media only screen and (min-width: 320px) and (max-height: 640px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2){ /* стили */ } @media only screen and (min-width: 320px) and (max-height: 640px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2){ /* стили */ } /* Samsung Galaxy S4 ----------- */ @media only screen and (min-width: 320px) and (max-height: 640px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3){ /* стили */ } @media only screen and (min-width: 320px) and (max-height: 640px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3){ /* стили */ } /* Samsung Galaxy S5 ----------- */ @media only screen and (min-width: 360px) and (max-height: 640px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3){ /* стили */ } @media only screen and (min-width: 360px) and (max-height: 640px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3){ /* стили */ }
Сервисы по проверке сайта на адаптивность:
- http://adaptivator. ru
- http://iloveadaptive.com
- Google PageSpeed
Лучшие практики (S)CSS, о которых вы еще не знали
Хочешь знать больше про веб?
Подпишись на наш телеграм-канал TechRocks WEB-разработка?
Подписаться
×
Даже если вы сейчас строите свои приложения используя популярные фреймворки, такие как React, Angular или Vue.js, вам все равно нужно добавить к ним какие-нибудь стили. Способ написания стилей зависит от используемой вами технологии. Например, в случае с React, из-за его компонентной природы, лучше писать стили используя CSS-модули. Если вы хотите использовать совершенно новые функции CSS, будет мудро остановить свой выбор на CSSNext. Не забудьте о старых добрых CSS-препроцессорах, таких как Saass или LESS. Возможно, вы думаете: “Так много инструментов. Поручусь, что у них разное написание стилей”. Да, вы правы. Но основа одна и та же.
В этой статье я хочу представить несколько отличных рекомендаций для написания понятного и обслуживаемого CSS, причем неважно, являетесь ли вы поклонником CSS-модулей или Sass/LESS. Данные рекомендации представлены в синтаксисе SCSS, так что стоит немного познакомиться с Sass. Если вы используете простой CSS, расширенный с помощью CSS Next, вам также пригодится эта статья. Приведенные базовые концепции с легкостью могут быть использованы с другими инструментами CSS или препроцессорами.
Структурируйте ваши стили
Хорошо продуманная структура папок поможет с обслуживанием вашего проекта. То же самое касается и ваших стилей. Это важно, разделять ваш код в зависимости от элементов, которые к нему относятся. Сохранение всех ваших директив в одном огромном файле styles.scss наверняка приведет к проблемам. Особенно если вы хотите масштабировать свой проект и добавлять новые компоненты.
В условиях масштабирования проекта жизненно необходимо установить правильную структуру стилей. Вы должны сфокусироваться на внедрении структуры, которая упорядочит ваши файлы в соответствии с компонентами, используемыми в вашем проекте. Я советую вам отделять основные стили от стилей компонентов и тем. Также есть смысл собирать все примеси и переменные в одной папке, в зависимости от их роли.
Ниже приведен пример структуры папки:
├── /base │ ├── _core.scss │ ├── _colors.scss │ ├── _settings.scss │ └── _typography.scss ├── /utils │ ├── _animations.scss │ ├── _easings.scss │ ├── _grid.scss │ └── _misc.scss ├── /components │ ├── _header.scss │ ├── _footer.scss │ ├── _button.scss │ └── _sidebar.scss └── main.scss
И main.scss:
// *** Vendor *** @import 'sanitize.css'; // *** Settings *** @import './base/settings'; @import './base/colors'; // *** Utils *** @import './utils/easings'; @import './utils/animations'; @import '. /utils/grid'; @import './utils/ui'; // *** Base *** @import './base/core'; @import './base/typography'; // *** Components *** @import './components/header'; @import './components/footer'; @import './components/button'; @import './components/sidebar';
Давайте названия цветам
Итак, у вас есть дизайн сайта и вы хотите приступить к написанию кода для макета. Как разумно подойти к управлению цветами в вашем проекте? Вы можете просто записать обозначения цветов прямо в стилевые правила. Но такой подход в будущем принесет проблемы. К счастью, как CSS, так и Sass дают нам переменные.
В Sass вы можете сохранять любое значение в качестве переменной, так что будет разумным сохранять код цвета как переменную. Главным образом мы используем HEX (hexadecimals, шестнадцатеричную систему) для определения значения цвета. Для людей HEX выглядит как шифр, потому что этот формат разрабатывался для компьютеров. Тяжело сказать, какой цвет записан как #7fffd4 или #ffd700 (если вы их понимаете, возможно, вы бы не прошли CAPTCHA-тест). Первый это «аквамарин», а второй — золотой. Не проще ли будет именовать их таким образом?
Некоторые цвета имеют специфическую роль в дизайне вебсайта. Один может быть выбран как основной цвет, а другой предназначен для фона. Поскольку мы пишем код для браузера, мы должны построить какую-то понятную структуру для наших цветов. Хорошо, если вам поможет дизайнер. Если вы не сможете убедить его описать цветовую палитру, придется это сделать самому.
Для начала дайте цветам названия. Перевести код HEX в читабельное название непросто. К счастью, у нас есть для этого подходящие инструменты. Я использую сайт Name that Color, но вы можете пользоваться каким пожелаете.
Когда у ваших цветов есть названия, вы можете определить их роли. Вы должны определить, какой цвет используется как первичный, а какой в качестве вторичного. Если вы не уверены, как установить роли для ваших цветов, можете поискать вдохновение в цветовых схемах Bootstrap.
Вот пример установок цвета:
// Names $white: #fff; $black: #000; $aquamarine: #7fffd4; $alabaster: #f9f9f9; $alto: #d9d9d9; $mine-shaft: #333; // Roles $primary: $white; $secondary: $alabaster; $accent: $aquamarine; $text: $mine-shaft; $border: $alto;
Упрощайте вложенные объявления
Использование препроцессора CSS не только добавляет некоторые полезные функции к вашему набору инструментов, но также помогает в организации кода. Лучшим примером является вложенность объявлений стилей. В Sass можно вкладывать селектор в другие селекторы, так что вы можете видеть, какие отношения существуют между ними. Это действительно мощная функция, и ею легко злоупотребить.
Я советую вам углубляться не более чем на три уровня. Это касается как специфичности, так и вложенности селекторов в препроцессорах CSS. Превышение этого ограничения усилит селектор, но может затруднить чтение кода.
Посмотрите на этот пример:
// Bad .article { .title { color: $accent; } .text { color: $text; .img { width: 100%; } @media only screen and (min-width: 720px) { .text { .img { width: 300px; height: auto; margin: 0 auto; } } } } } // Good .article { .title { color: $accent; } . text .img { width: 100%; } } @media only screen and (min-width: 720px) { .article { .text .img { width: 300px; height: auto; margin: 0 auto; } } }
Не переусердствуйте с родительскими ссылками
В Sass можно делать отсылки к селектору родителя. В комбинации со вложенностью, вы можете определить правила для родительского селектора. Например:
.link { &:hover { color: $accent; } &::after { display: inline-block; content: '\0362'; vertical-align: middle; } }
Иногда использование & может вводить в заблуждение. Вот пример плохого использования этого селектора:
.text { // compiles to .article .text .article & { color: $text; } // compiles to .text + .text & + & { margin-top: 15px; } }
Как вы видите, селектор амперсанд может ненужным образом усложнить ваши стили и затруднить чтение кода.
Записывайте свойства в правильном порядке
Сортировать свойства не обязательно, но желательно. Правильно рассортированные свойства демонстрируют, что ваш код стилей единообразен. Более того, это делает сканирование вашего кода более удобным. Не существует единственно правильного способа сортировки свойств. Вы можете располагать их в алфавитном порядке или по какому-либо другому принципу. Я использую слегка измененные правила, включенные в руководство по форматированию в методологии SMACSS. Вот мой рекомендуемый порядок:
- Контейнер (позиция, отображение, ширина, отступы и т. д.)
- Текст
- Фон
- Граница
- Другие (по алфавиту).
// Before .action-button { height: 30px; z-index: 3; background-color: $accent; position: fixed; width: 30px; color: $white; bottom: 15px; right: 15px; } // After .action-button { position: fixed; right: 15px; bottom: 15px; z-index: 3; width: 30px; height: 30px; color: $white; background-color: $accent; }
Используйте соглашение по названиям классов
Когда ваш проект растет, стили могут стать довольно запутанными. Особенно если есть необходимость расширить существующие правила. К сожалению, CSS не предоставляет для этого каких-либо полезных механизмов, которые могли бы предотвратить противоречия в пространстве имен. Другими словами, все стили, записанные в CSS, глобальны, поэтому высока вероятность того, что вы можете неожиданно перезаписать некоторые свойства.
Вследствие каскадной природы CSS важно определять очень специфические селекторы. Это не значит что нужно использовать очень специфические селекторы. Нужно избегать общих селекторов, вроде селекторов тэгов, когда вы хотите добавить стили для конкретного элемента.
Пример:
// Bad .menu { li { display: inline-block; padding: 0 20px; border-bottom: 1px solid $accent; } ul li { padding: 0 10px; border-bottom: 0; // Unnecessary border reset } } // Good .menu-item { display: inline-block; padding: 0 20px; border-bottom: 1px solid $accent; } . nested-menu-item { padding: 0 10px; }
Написание обслуживаемых селекторов не так сложно, если мы используем одно из популярных соглашений по именованию классов: BEM, OOCSS или SMACSS. Я предпочитаю BEM, очень популярную методологию, созданную разработчиками Яндекса. Это название является сокращением слов «контейнер», «модификатор» и «элемент» (block, modifier, element). Если вы не знакомы с BEM, я советую почитать документацию.
Вот наш пример после «бемификации»:
.menu { &__item { // it compiles to .menu__item display: inline-block; padding: 0 20px; border-bottom: 1px solid $accent; } } .submenu { &__item { padding: 0 10px; } }
Пишите описательные медиа-запросы
Медиа-запросы являются самой важной частью разработки адаптивных вебсайтов. Благодаря им мы можем определять стили для разных разрешений и изменять вид в соответствии с девайсом пользователя. В CSS медиа-запросы это набор правил, которые проверяются браузером пользователя. После проверки к вебсайту применяются стили, определенные в блоке медиа-запросов.
Вы можете предусмотреть использование разных девайсов используя запросы, описывающие типы и свойства медиа. Вследствие комбинирования многих правил медиа-запросы могут стать сложными.
// target devices with min width of 768px (possibly tablets) and with wide screen @media only screen and (min-width: 768px) and (max-device-aspect-ratio: 9 / 16) { body { font-size: 20px; } }
Чтобы сделать медиа-запросы более дружественными к разработчику, мы можем назначить эти правила переменным. В Sass можно использовать строку как обычный CSS-код при помощи вставки фигурных скобок #{}.
$medium: 768px; $screen-medium-wide: 'only screen and (min-width: #{$medium}) and (max-device-aspect-ratio: 9 / 16)'; @media #{$screen-medium-wide} { body { font-size: 20px; } }
Тот же фокус можно использовать для других правил со знаком @ (at-rules). Это может быть удобно для определения комплексных правил @supports.
Добавляйте модульные стили
CSS имеет набор очень полезных селекторов. В большинстве случаев вы используете селектор класса или селектор потомка. Но есть другой селектор, эффективный при написании модульных стилей. Это селектор «ближайшего соседа» (adjacent sibling selector), известный также как селектор плюс.
Представьте, что вы хотели бы написать стили, которые будут применяться только когда какой-то элемент предшествует элементу с селектором. Например, Вы можете добавить отступ к тексту статьи, когда у нее есть название. Сделать это можно вот так:
.article { &__title { color: $accent; } // Applies margin only, when .article__title is present &__title + &__text { margin-top: 15px; } &__text { color: $text; } }
Это очень удобный способ определения стилей, и мой любимый. Но есть и минусы. Во-первых, это не самый эффективный селектор. Его не стоит использовать, если вам важнее эффективность чем модульность. Во-вторых, использование селектора соседа повышает специфичность, из-за чего может быть трудно позже перезаписать его сили. Но этот селектор стоит использовать если вы хотите применять стили основываясь на наличии элементов.
Теперь вы знаете, как писать читабельные, легкие в обслуживании и модульные стили.
***
Подписывайтесь на наш канал в Telegram
Как использовать медиазапросы в CSS для адаптивного дизайна?
CSS является одним из основных столпов веб-разработки и дизайна. В то время как CSS начинался как нечто, что может изменить стиль веб-страницы, каждая итерация спецификации CSS теперь приносит больше пользы, особенно когда речь идет о кросс-браузерной совместимости.
Сегодня CSS — это больше, чем просто «фоновый цвет» и спецификации тегов, которые сделали первые дни веб-разработки очень увлекательными. CSS стал вспомогательным инструментом для реализации дизайна, ориентированного на мобильные устройства, и адаптивного веб-дизайна в веб-приложениях без особых усилий.
В этом посте мы углубимся в концепцию медиа-запросов в CSS: свойство CSS, которое может внести некоторые изменения в веб-страницу, взглянув на устройство. Мы также увидим, как все развивалось, и сосредоточимся на том, как мы можем реализовать мультимедийные запросы CSS с адаптивным дизайном, чтобы создать удобный пользовательский интерфейс для вашего веб-сайта.
Новичок в селекторах CSS? Ознакомьтесь с этой шпаргалкой Ultimate CSS Selector, чтобы повысить свою карьеру веб-дизайнера.
СОДЕРЖАНИЕ
- Что такое медиазапросы в CSS?
- Действительно ли нам нужны медиа-запросы в CSS?
- Как вы пишете медиа-запросы в CSS для адаптивного дизайна?
- Правила медиа-функции
- Точки останова и их методы
- Кроссбраузерная совместимость для медиазапросов в CSS
- Часто задаваемые вопросы (FAQ)
Что такое медиа-запросы в CSS
Медиа-запросы в CSS начались со спецификации CSS2, которая включала в свою библиотеку правило мультимедиа CSS. Медиа-правила были введены в CSS после наблюдения за различными медиа-устройствами, которые наводнили рынок и были хорошо приняты пользователями.
Например, это было захватывающее время, когда появились речевые устройства, которые могли читать веб-страницу за вас. Но, к сожалению, даже несмотря на то, что правила для СМИ были так важны, они не произвели впечатления на сообщество разработчиков. Веская причина в том, что медиаустройства не были готовы к такой трансформации (по крайней мере, до этого момента!).
Итак, забегая вперед, разработчики CSS подумали об изменении этого свойства. Несмотря на то, что в сообществе не работали медиа-правила, они могут вводить запросы, которые могут анализировать одно медиа-устройство и соответствующим образом применять CSS. Они были названы медиа-запросами CSS.
Как мы знаем, медиа-запросы в CSS изменили то, как мы сегодня разрабатываем адаптивное веб-приложение. Медиа-запросы CSS — это условия и запросы, которые отлично работают в наш век сотен устройств и браузеров.
В то время как медиа-правила рассматривали смартфон, медиа-запросы CSS учитывали область просмотра, разрешение и ориентацию. Эти медиа-запросы в CSS дали уникальную возможность рендеринга контента в соответствии с типом устройства или его ориентацией, что привело нас к следующему шагу в адаптивном веб-дизайне. Изменение, о котором думали разработчики CSS, было хорошо воспринято и стало неотъемлемой частью веб-дизайна с помощью медиа-запросов CSS.
Проверка совместимости медиазапросов CSS в более чем 3000 браузерных средах. Попробуйте лямбда-тест прямо сейчас!
Действительно ли нам нужны медиа-запросы CSS?
Первое, что может прийти вам в голову: «Действительно ли нам нужны медиа-запросы CSS, учитывая изобилие технологий и спецификаций, которые появляются с каждым днем»? Это подлинный и распространенный вопрос для тех, кто начинает свой путь с медиа-запросов в CSS.
Теперь CSS намного более зрелый, чем когда был представлен CSS 2. Сейчас у нас так много продвинутых методов в CSS, что многие стандартные проблемы покрываются новыми концепциями в CSS.
Одной из таких вещей, которые приходят на ум, являются сетки и подсетки CSS. Сетки CSS являются адаптивными и часто предназначены для больших макетов. Они требуют ручного кодирования с медиа-запросами для уменьшения и увеличения размера столбца в соответствии с экраном устройства.
Другой частью CSS-сеток является CSS Flexbox, который также является адаптивным и наиболее подходящим для небольших макетов. Вы также можете иметь свой собственный набор высокочувствительных инструментов в качестве веб-разработчика. Эти инструменты сокращают наши усилия и экономят много времени, оставляя нас с этим затянувшимся вопросом «Должны ли мы изучать медиа-запросы CSS»?
Я полагаю, что при ответе на этот вопрос нужно учитывать две вещи: нужны ли нам медиа-запросы CSS в 2022 году. Безусловно, новые трюки и элементы CSS дают более быстрые и лучшие результаты с точки зрения отзывчивости. Однако также верно и то, что как веб-разработчик я бы порекомендовал своим коллегам-разработчикам использовать новые спецификации, а не сосредотачиваться на медиа-запросах.
Но новые спецификации не полностью заменяют контроль, который мы получаем через медиа-запросы, а представляют собой просто решение стандартных проблем веб-разработки. Например, в случае адаптивного дизайна медиа-запросы в CSS предоставят больше контроля и возможностей для реализации различных вариантов использования.
С другой стороны, спецификации CSS фиксированы. Сетки CSS всегда будут работать со структурой «сетка», но медиа-запросы можно использовать со многими другими параметрами. Это достаточно хорошо для использования, если требования вашего проекта могут быть выполнены с новыми спецификациями! Тем не менее, медиа-запросы придут вам на помощь, чтобы разработать что-то новое и креативное.
Еще одна веская причина для изучения медиа-запросов CSS сегодня — это улучшение спецификации и элементов CSS. При использовании отзывчивого элемента CSS, такого как CSS-сетки, вы можете использовать медиа-запросы поверх него, чтобы улучшить его функциональные возможности и добавить некоторые свои собственные: например, изменить цвет (очень простой пример).
Таким образом, даже если может показаться, что медиа-запросы в CSS не используются, когда вы начинаете разработку проекта, вы обнаружите множество сценариев, для реализации которых требуются медиа-запросы CSS. Всегда лучше изучать и практиковать их для реализации в проекте веб-разработки.
Как вы пишете медиа-запросы в CSS для адаптивного дизайна?
Синтаксис медиа-запросов в CSS напоминает аннотации TestNG, которые вы найдете немного уникальными для начинающего веб-разработчика.
Медиа-запрос может быть реализован словом «медиа» следующим образом:
Соединитель @media
@media Соединитель |
Например:
Только экран @media и (максимальная ширина: 480 пикселей) { /* применяемые правила CSS /* }
Только экран @media и (максимальная ширина: 480 пикселей) { /* Применяемые правила CSS /* } |
Этот медиа-запрос будет искать экраны («только экран», как написано) с максимальной шириной 480 пикселей. Если он его найдет, условия будут выполнены, и в HTML-код будут внесены изменения.
Для применения только типа мультимедиа, а не выражений мультимедиа (запросов), допустимы следующие значения:
- все
- печать
- экран
- речь
@медиа печать { .заголовок { размер шрифта: 12px } }
@media print { .heading { размер шрифта: 12px } } |
Приведенный выше запрос сделает содержимое с заголовком имени класса размером шрифта 12 пикселей, когда страницу необходимо напечатать.
Правила функций мультимедиа
Чтобы обеспечить быстродействие нашего веб-приложения, мы должны знать размер устройства для отображения определенного контента. Правила медиа-функций помогают нам в этом. Мы можем определить наше конкретное состояние с помощью медиа-функций и соответствующим образом реализовать CSS. Хотя существует множество правил медиа-функций, мы обсудим лишь некоторые из них, важные для адаптивного дизайна.
Правила медиа-функций ширины и высоты
Первое правило медиа-функций, которое следует учитывать, — это проверка ширины и высоты окна просмотра. Операции с шириной можно проверить с помощью свойств «width», «max-width» и «min-width» для значений узких мест.
Пример правила медиа-функции максимальной ширины:
Экран @media и (максимальная ширина: 840 пикселей){ п { красный цвет; } }
@экран мультимедиа и (макс. ширина: 840 пикселей){ p { цвет: красный; } } |
Полный код для создания адаптивного дизайна с помощью медиа-правил можно записать так:
<голова> <мета-кодировка="utf-8">
Проверка правил обработки мультимедиа
центр> тело>1 2 3 4 5 6 7 8 10 110003 12 13 14 19990001 9000 214 9000 3 9000 3 9000 3 9000 2 9000 214 9000 3 9000 3 9000 29000 3 9000 3 9000 3 18 19 20 |
<Центр> Проверка правил среды тело > |
Для экрана шириной более 840 пикселей тег «p» будет отображать содержимое черным цветом следующим образом:
Приведенный выше снимок экрана сделан на платформе LambdaTest.
На экране шириной менее 840 пикселей правило мультимедиа изменит содержимое на красный цвет и размер шрифта следующим образом:
окно просмотра, чтобы увидеть эффект.
Используемый выше браузер — Opera на платформе Windows 10. Точно так же вы можете использовать правило высоты и ширины.
Код был обработан в удобном для разработчиков браузере под названием LT Browser, который помогает в быстром тестировании и разработке на более чем 50 разрешениях экрана. Вы можете выполнять тесты мобильных веб-сайтов в LT Browser быстрее и проще, используя такие функции, как параллельный просмотр, синхронизация прокрутки, мгновенная отладка, тестирование веб-сайтов в различных сетевых условиях и многое другое. Кроме того, LT Browser позволяет вам сотрудничать с вашей командой для масштабирования процесса разработки за счет интеграции с инструментами управления проектами.
СКАЧАТЬ LT БРАУЗЕР
Ознакомьтесь с приведенным ниже руководством по началу работы с LT Browser:
Подпишитесь на наш канал LambdaTest на YouTube и будьте в курсе последних руководств по тестированию Selenium, тестированию Cypress E2E, тестированию Playwright и многому другому.
Ориентация в медиа-запросах CSS
Ориентация устройства — одна из основных проблем, нарушающих отзывчивость вашего веб-сайта. Отзывчивость никогда не может быть достигнута, если веб-приложение не может понять ориентацию и реагировать соответствующим образом. Как и в медиа-запросах, знание ориентации устройства может помочь нам по-другому организовать контент, что приведет к большей отзывчивости.
В качестве следующего примера можно применить правило ориентации носителя:
@media (ориентация: альбомная){ п { красный цвет; размер шрифта: 36px; } }
1 2 3 4 5 6 | @media (ориентация: альбомная){ p { цвет: красный; размер шрифта: 36 пикселей; } } |
Приведенный выше код применит правила мультимедиа в альбомной ориентации, в то время как книжная ориентация будет работать нормально.
Приведенный выше снимок экрана сделан из браузера LT, который может отображать два устройства одновременно для тестирования.
Соединители в правилах мультимедиа
В большинстве случаев одного правила мультимедиа недостаточно для достижения скорости отклика. Что, если мы хотим реализовать правило мультимедиа на определенных устройствах и с определенными условиями? Для таких требований мы используем соединители (логические) в медиа-правилах. Коннекторы принимают три значения в медиа-запросах CSS:
- и
- или
- не
Эти соединители имеют то же значение, что и в логических выражениях и языках программирования. Чтобы применить соединитель «и», вам поможет следующий код:
@media (ориентация: альбомная) и (минимальная ширина: 1080 пикселей){ п { красный цвет; размер шрифта: 36px; } }
1 2 3 4 5 6 | @media (ориентация: альбомная) и (минимальная ширина: 1080 пикселей){ p { цвет: красный; размер шрифта: 36 пикселей; } } |
Приведенный выше код работает только при минимальной ширине экрана 1080 пикселей и альбомной ориентации. Поскольку мобильный телефон не попадает в эту категорию, давайте посмотрим, хорошо ли работает правило мультимедиа в ландшафте.
@media (ориентация: альбомная), (минимальная ширина: 1080 пикселей){ п { красный цвет; размер шрифта: 36px; } }
1 2 3 4 5 6 | @media (ориентация: альбомная), (минимальная ширина: 1080 пикселей){ p { цвет: красный; размер шрифта: 36 пикселей; } } |
Приведенное выше правило обработки мультимедиа будет применяться, если ориентация альбомная или минимальная ширина равна 1080 пикселей. На мобильных устройствах можно наблюдать следующие изменения:
Поскольку правило ландшафта выполняется, соответственно применяются правила мультимедиа. Тот же эффект будет виден на экране шириной более 1080 пикселей.
Правило «не» может применяться с ключевым словом «не» и будет хорошей практикой для читателей. Прокомментируйте ниже свои уникальные медиа-запросы, чтобы помочь сообществу.
Показанный выше код был представлен на уровне 3 спецификации. На уровне 4 мы получаем немного больше гибкости в определении чисел и интервалов без использования логических операторов, то есть соединителей. Спецификация уровня 4 в правилах обработки мультимедиа вводит в запросы диапазоны. Итак, запрос следующего вида:
(минимальная ширина: 640 пикселей) и (максимальная ширина: 1080 пикселей)
(минимальная ширина: 640 пикселей) и (максимальная ширина: 1080 пикселей) |
Может быть записан со спецификацией уровня 4 следующим образом:
(640 пикселей <= ширина <= 1080 пикселей)
(640 пикселей <= ширина <= 1080 пикселей) |
Что немного лучше и понятнее в определении правил мультимедиа. Однако ограничений для разработчика нет; оба могут быть использованы для достижения отзывчивости.
Вы также можете обратиться к приведенному ниже руководству по проведению адаптивного тестирования на платформе LambdaTest.
Точки останова и их методы
В посте до сих пор показано, как добиться адаптивного веб-дизайна с помощью медиа-запросов в CSS, правил и выражений. Забавно управлять элементами и видеть, как они трансформируются в соответствии с нашими желаниями. Но проблема в том, как решить, в какой момент мы хотим, чтобы эти медиа-правила применялись к элементам? 640px или 1080px или что-то еще? Это число, которое работает как точка отражения, называется точкой останова при выполнении медиа-запросов.
Выбор случайных точек останова является плохой стратегией адаптивного дизайна и никогда не должен применяться без анализа. Пожалуйста, обратитесь к нашему блогу о контрольных точках CSS для адаптивного дизайна, чтобы узнать больше о контрольных точках.
Лучший способ анализа точек останова — через адаптивную панель браузера. Отзывчивая панель в браузере позволяет изменять размер окна (или выбирать несколько разрешений), помогая нам быстро и точно определить узкие места.
Чтобы открыть панель в Google Chrome, откройте веб-сайт (как LambdaTest открылся в этой демонстрации).
- Щелкните правой кнопкой мыши и выберите Проверить.
- Щелкните значок, показанный ниже, после открытия панели «Проверка».
Обратите внимание, как меняется разрешение при уменьшении/расширении экрана (верхняя панель). Эта панель поможет разработчикам увидеть точки останова, в которых код выходит за пределы экрана. Затем то же самое можно применить к правилам для СМИ.
Мобильные браузеры стали основным выбором пользователей во всем мире. Что касается стратегии дизайна, то в настоящее время всегда рекомендуется использовать стратегию дизайна, ориентированную на мобильные устройства, для идеального адаптивного дизайна. Посетите наш блог, чтобы узнать, как выполнить тестирование мобильного веб-браузера.
Будучи разработчиком, оставление вторичного мобильного приложения в списке может раздражать ваших пользователей. Начните свою разработку с мобильных устройств и постепенно двигайтесь вверх по цепочке (или назад во времени). Такой метод всегда гарантирует, что ваши мобильные пользователи будут довольны, а созданный вами веб-сайт будет отзывчивым. Для проверки ваших проектов предпочтительнее использовать браузер для мобильных устройств, такой как LT Browser, поскольку он обеспечивает больше функций, гибкость и масштабируемость.
Кроссбраузерная совместимость для медиазапросов в CSS
Как видно на изображении ниже, кросс-браузерная совместимость для медиа-запросов в CSS действительно . Однако он не поддерживает более старые версии Internet Explorer и Mozilla Firefox.
Опять же, браузеры продолжают развиваться, и есть вероятность, что они могут измениться с течением времени. На данный момент вам не нужно беспокоиться о кросс-браузерной совместимости для медиа-запросов в CSS.
Завершаем!
Медиа-запросы в CSS — полезный помощник при создании адаптивного дизайна и разработке с дополнительными возможностями управления и улучшения. Медиа-запросы в CSS, хотя и начинались грубо, сегодня широко используются в проектах и веб-приложениях. Вы можете следовать этой шпаргалке по CSS, чтобы освежить свои навыки CSS.
В этом посте рассказывается об основных целях медиа-запросов в CSS и о том, как добиться их отклика с помощью различных правил и выражений. Меня удивляет, что на Codepen и других веб-сайтах такие красивые дизайны создаются разработчиками с минимальной поддержкой библиотек.
Подходя к концу поста, мы призываем к таким проектам в разделах комментариев и хотели бы включить лучшие из них в этот пост. Надеюсь увидеть творческие работы!
Часто задаваемые вопросы (FAQ)
Что такое медиа-запрос в CSS?
Медиа-запросы в CSS полезны для изменения веб-сайтов и приложений в зависимости от типа устройства или определенных характеристик, таких как размер экрана или ширина области просмотра.
Можно ли использовать медиа-запросы в CSS?
Несмотря на то, что медиа-запросы обычно связаны с CSS, их также можно использовать в HTML и JavaScript. Кроме того, вы можете напрямую использовать медиа-запросы в HTML.
Хариш Раджора
Я инженер по информатике. Мне нравится продолжать расти по мере роста технологического мира. Я чувствую, что нет более мощного инструмента, чем компьютер, чтобы хоть как-то изменить мир. Помимо моей специальности, я очень люблю читать книги и иногда пишу на https://www.themeaninglesslife.com.
Посмотреть профиль автора
Медиа-запросы — Learn.co
Ключом к разработке и созданию адаптивных макетов является наличие вашего контента. реагировать на размер устройства (или «средний»). Ваш CSS может запросить «медиа» (множественное число от «среднего»), чтобы узнать их размеры и пропорции. Эти «медиа запросы» находятся в центре внимания этого урока. Написав «медиа-запросы», вы можете убедитесь, что ваш сайт отлично выглядит на всех устройствах.
Цели
- Какова цель медиа-запросов
- Что такое синтаксис мультимедийного запроса
- Где должны быть созданы «точки останова»
Какова цель медиа-запросов?
Медиа-запросы — это функция CSS. Это наборы стилей, которые применяются когда среда удовлетворяет определенным условиям. Медиа-запросы чаще всего решить, применяется ли группа правил CSS на основе «окна просмотра» устройства (или, «Размер экрана. Точки, в которых макет корректируется в зависимости от некоторых медиа свойство (или свойства!), называется «точкой останова».
Что такое синтаксис медиазапроса?
Ниже приведены несколько примеров синтаксиса для написания оператора медиа-запроса в наш код CSS:
@media (максимальная ширина: 992 пикселя) { тело { цвет фона: синий; } }
Ниже приведены более конкретные и полные примеры синтаксиса медиа-запроса:
@media screen и (max-width: 992px) { тело { цвет фона: синий; } }
@media только экран и (макс. ширина: 992px) { тело { цвет фона: синий; } }
При определении медиа-запроса мы используем ключевое слово @media
, за которым следует
условные операторы, которые будут запускать медиа-запрос для применения или нет. Ниже
мы разберем каждое свойство, доступное в медиа-запросах:
не
, только
Логические ключевые слова «не» или «только» могут использоваться для включения или
исключить определенные типы носителей или размеры экрана. Например, мы можем захотеть
указать, что панель навигации должна простираться по ширине нашей страницы, но только на экранах больше 800px
по высоте. Может быть и так, что
вы хотите, чтобы правило CSS применялось ко всем устройствам, но , а не экранов меньше, чем 400px
в ширину.
@media только экран и (макс. ширина: 992px) { тело { цвет фона: синий; } }
@media не экран и (максимальная ширина: 992px) { тело { цвет фона: синий; } }
тип носителя
В настоящее время поддерживаются только следующие типы носителей: экран, печать или все (имеются в виду все устройства). Мобильные, планшетные и настольные устройства относятся к screen mediatype, в то время как print используется для отображения контента в ‘print режим предварительного просмотра. Чаще всего нас интересует только экран .
@media [экран|печать|все] и (макс. ширина: 992 пикселя) { тело { цвет фона: синий; } }
и
, ,
Мы можем использовать и
и ,
для разделения или объединения условий.
- Использование
и
требует, чтобы оба условия с каждой стороныи
верны для применения запроса. - При использовании
,
означает или , что означает, что только одно из условий сторона запятой должна быть истинной для запуска запроса.
Экран @media и (минимальная ширина: 992 пикселей) и (максимальная ширина: 1136 пикселей) { тело { цвет фона: синий; } }
Экран @media и (минимальная ширина: 992 пикселей), (максимальная ширина: 1136 пикселей) { тело { цвет фона: синий; } }
(выражение)
Мы определяем условные выражения, записывая тест и заключая его в
скобки. Выражение должно быть истинным, чтобы запрос
триггер, если не используется ,
. За этими выражениями следует набор {}
фигурные скобки, заключающие в себе селекторы и правила CSS, которые будут применяться при
медиа-запрос срабатывает.
@media (максимальная ширина: 992 пикселя) { тело { цвет фона: синий; } }
Usage
Чтобы дать лучший контекст, давайте создадим медиа-запрос, который изменит
текст абзаца меняется с красного на зеленый, когда размер экрана падает ниже 800px
:
/* исходный стиль */ п { красный цвет; } /* медиа-запрос */ Только экран @media и (максимальная ширина: 800 пикселей) { п { цвет: зеленый; } }
Во второй строке мы указываем некоторый начальный стиль, который будет применяться , если только срабатывает наш медиа-запрос. Мы установили для нашего абзаца красный текст. В строке 5,
мы создаем медиа-запрос, используя @media
, и устанавливаем его на только триггер
для экрана
. устройства, которые имеют максимальную ширину
из 800px
.
Другими словами, стиль будет применяться только к экранам размером менее 801px
в ширину. За условием следует пара фигурных скобок ( {}
), которые
приложите стили, которые будут применяться, когда условие выполнено. В нашем случае на
экранах шириной 800px
или меньше, мы меняем цвет текста абзацев на
зеленый вместо красного.
Для наших условий размера мы можем использовать свойства min-width
, максимальная ширина
, min-height
и max-height
, все относятся к размеру устройства.
область просмотра (т. е. размер экрана). Выше мы рассмотрели max-width
; теперь давайте
исследовать min-width
:
/* начальный стиль */ п { красный цвет; } /* медиа-запрос */ Только экран @media и (минимальная ширина: 400 пикселей) { п { цвет: зеленый; } }
В строке 2 мы снова устанавливаем красный цвет абзацев по умолчанию. В строке 5 мы
установить условия нашего медиа-запроса, а именно, что ширина экран
устройство
должно быть 400px
или больше.
Итак, max-width
срабатывает, когда экран меньше указанного размера, и min-width
срабатывает, когда размер экрана больше определенного.
Как упоминалось ранее, мы можем использовать ключевые слова и
для объединения нескольких условий.
вместе. Давайте посмотрим на пример:
/* начальный стиль */ п { красный цвет; } /* медиа-запрос */ Только экран @media и (минимальная ширина: 400 пикселей) и (максимальная ширина: 800 пикселей) { п { цвет: зеленый; } }
Здесь мы меняем цвет текста на зеленый только на экранах между 400 пикселей
и 800 пикселей
.
Одна из приятных особенностей медиазапросов заключается в том, что они автоматически наследуют все
стили, написанные вне фигурных скобок {}
. Итак, внутри медиа-запроса мы только
нужно написать CSS для свойств, которые мы хотим изменить. С набором
различные медиа-запросы, можно иметь определенный стиль для мобильных и
размеры экрана настольного компьютера, а также размеры экрана планшета между ними.
Где должны создаваться точки останова?
Позвольте своему содержимому определять, где должны располагаться точки останова. Используйте инструменты разработчика и эмуляторы, чтобы обнаружить, где ваш контент начинает ломаться. Затем создайте соответствующую точку останова (медиа-запрос такой ширины) для решения проблемы. Этот гарантирует, что ваш контент будет хорошо выглядеть на всех без исключения устройствах, а не только на популярные.
Усовершенствованные методы компоновки, такие как сетка (которые будут рассмотрены позже
уроки), позволяют нам свести точки останова медиа-запросов к минимуму. Вы можете, для
Например, установите медиа-запрос для max-width: 414px
, ширина iPhone 6+,
который повлияет практически на все мобильные телефоны, но позволит сетке CSS
динамически регулировать ширину элементов веб-страницы для небольших телефонов.
Заключение
Запросы CSS Media предоставляют нам способ изменить наш CSS на определенном экране
размеров, установив точек останова при разной ширине экрана. С использованием max-width
выражений условий для запуска стилей ниже определенного
размер и выражения условия min-width
для запуска стилей выше
определенный размер может помочь вам создать мощные, гибкие интерфейсы для различных
размеры экрана и устройства. Вместо того, чтобы пытаться ориентироваться на определенные размеры устройств,
используйте инструменты разработки в браузере для экспериментов и разрешите свой уникальный контент
чтобы определить, при каких размерах записывать точки останова медиазапроса. Запись медиа
запросы по мере необходимости, независимо от размера вашего контента, который начинает становиться неприглядным.
Ресурсы
- MDN — CSS — Медиа-запросы
- CSS-трюки — Медиа-запросы
- Имитация мобильных устройств в режиме устройства в Google Chrome
Просмотрите медиа-запросы на Learn. co и начните бесплатное обучение программированию.
Понимание медиазапросов CSS — Сообщество разработчиков 👩💻👨💻
Джаред Ютси | нг-конф | июль 2020 г.
Это не предназначено для глубокого погружения в медиа-запросы, а для начинающих, помогающих понять некоторые распространенные способы использования медиа-запросов в качестве веб-разработчиков.
Медиа-запрос — это часть CSS, определяющая правила о том, когда следует применять набор определений CSS. Он всегда начинается с
@media
Как веб-разработчики, мы больше всего заинтересованы в выводе экрана, поэтому почти всегда мы следуем за @media
с
screen
. экран
означает, что он применяется к экранным устройствам, таким как телефон, планшет или экран компьютера. Есть и другие варианты, но они используются реже.
Затем мы обычно добавляем запрос к оператору, так что в итоге мы получаем что-то вроде:
@media screen и . ..
Запросы, как и все css, применяются в том порядке, в котором они определены.
Это очень важно понимать, так как мы обычно хотим заниматься разработкой Mobile-First .
Что такое Mobile-First?Mobile-First означает, что мы сначала определяем правила макета в CSS для наименьшего форм-фактора (телефон в портретном режиме). Затем мы определяем запросы к целевым устройствам по мере их увеличения. Обычно у нас есть некоторые переменные SASS, которые примерно соответствуют стандартным размерам устройств.
Почему у нас нет переменных для конкретных устройств? Правила станет невозможно писать и поддерживать. Разрешение устройства резко меняется от одного телефона к другому.
Мы, вероятно, будем использовать два очень распространенных запроса: min-width
и max-width
.
Значение минимальной ширины и максимальной ширины
Переменные SASS и запросы к целевым диапазонам устройств.
Медиа-запросы можно комбинировать с и
. Например, следующий запрос будет нацелен только на телефоны с горизонтальной ориентацией (плюс-минус телефон/планшет произвольного размера).
Экран @media и (min-width: $sm-min-width) и (max-width: $sm-max-width)
Вот простой пример, где мы адаптируем представление некоторых кнопок в зависимости от размера устройства, на котором они отображаются.
<голова> <стиль> /* * ПЕРВЫЙ МОБИЛЬНЫЙ! * Технически это то же самое, что и этот медиа-запрос: * Экран @media и (мин. ширина: 0em) * Что означает «ширина больше или равна 0em» или «все». */ тело { отступ: 16px; } .button-контейнер { дисплей: гибкий; flex-направление: столбец; выравнивание элементов: по центру; } . добавить-кнопка, .удалить-кнопка { радиус границы: 50%; ширина: 64 пикселя; высота: 64 пикселя; размер шрифта: 48px; белый цвет; нижняя граница: 16px; } .добавить-кнопка { граница: сплошная 1px темно-зеленая; фоновый цвет: лесной; } .удалить-кнопка { граница: сплошная бордовая 1px; цвет фона: красный; } диапазон.текст { дисплей: нет; поле: 0 16px; } span.fab { отображение: встроенный блок; положение: родственник; верх: -5px; } .телефон-портрет, .phone-пейзаж, .планшет-портрет, .таблетка-пейзаж { дисплей: гибкий; выравнивание содержимого: по центру; вес шрифта: полужирный; размер шрифта: 24px; } .phone-портрет { размер шрифта: 48px; } .phone-пейзаж, .планшет-портрет, .таблетка-пейзаж { дисплей: нет; } /* * Альбомная ориентация телефона или больше */ Экран @media и (min-device-width: 35. 5em) { /* Эти настройки добавляются к предыдущим или переопределяют их */ .button-контейнер { flex-направление: строка; выравнивание содержимого: пробел между; } .phone-пейзаж { дисплей: гибкий; } .телефон-портрет, .планшет-портрет, .таблетка-пейзаж { дисплей: нет; } } /* * Планшет в портретном режиме или больше */ Экран @media и (min-device-width: 48em) { .добавить-кнопка, .удалить-кнопка { радиус границы: 6px; ширина: не установлена; высота: не установлена; } span.fab { дисплей: нет; } диапазон.текст { отображение: встроенный блок; } } /* * ТОЛЬКО портрет для планшета * Наследуется от предыдущих запросов. * Последующие запросы не будут наследовать эти значения. */ Экран @media и (минимальная ширина устройства: 48em) и (максимальная ширина устройства: 63,9)99эм) { . добавить-кнопка, .удалить-кнопка { радиус границы: 32px; ширина границы: 4px; } .планшет-портрет { дисплей: гибкий; } .телефон-портрет, .phone-пейзаж, .таблетка-пейзаж { дисплей: нет; } } /* * Планшет Альбомная или крупнее * Отображение как текста, так и значка. */ Экран @media и (min-device-width: 64em) { span.fab { отображение: встроенный блок; поле слева: 16px; верх: -3px; } .таблетка-пейзаж { дисплей: гибкий; } .телефон-портрет, .phone-пейзаж, .планшет-портрет { дисплей: нет; } } стиль> голова> <тело> <дел> <кнопка> + Добавить кнопка> <кнопка> х Удалить кнопка>
css-media-queries.
html, размещенный на GitHub В этом примере мы используем min/max-device-width
вместо min/max-width
, так как пример написан на простом HTML/CSS.
Если вы используете Angular, вы можете использовать min/max-width
. Я не уверен, что делает или настраивает процесс компиляции SASS, чтобы это работало. Просто знайте, что там, где вы видите min/max-device-width
в образце HTML, вы можете использовать min/max-width
в Angular с скомпилированным SASS. Это может быть или не быть правдой с простым CSS в Angular или другими компиляторами SASS?
- Сохраните этот HTML/CSS как media-queries.html и откройте его в Chrome.
- Открыть инструменты разработчика Chrome
- Нажмите кнопку «Адаптивный»
- Выберите iPhone 6/7/8
- Обратите внимание, что кнопки представляют собой удивительные кнопки, расположенные друг над другом, и они помечены как Phone Portrait.
- Переключиться на альбомную ориентацию
- Обратите внимание, что кнопки согнуты к обоим концам экрана и помечены как «Пейзаж телефона».
- Выбрал iPad
- Обратите внимание, что кнопки изогнуты к любому концу экрана и теперь используют текстовые метки, а также помечены как «Портрет планшета».
- Переключиться на альбомную ориентацию
- Обратите внимание, что кнопки изогнуты к любому концу экрана и используют как потрясающие значки, так и текстовые метки, и он помечен как Планшет Альбомная/Рабочий стол.
- Строки 76–126 определяют стиль по умолчанию, который, как мы продиктовали, будет ориентирован на мобильные устройства. Так что это стили по умолчанию для телефона в портретном режиме.
Строки 76–126 Телефон Портрет
Строки 131–145 определяют стиль для чего-либо, по крайней мере, такого же большого, как телефон в ландшафтном режиме. Единственные стили, определенные в этом блоке, — это те, которые переопределяют , которые определены в разделе мобильного телефона в портретной ориентации. Таким образом, мы ожидаем, что во всех форм-факторах выше портретного телефона кнопки будут расположены в ряд, а не в столбец.
Строки 131–145 Телефон в альбомной ориентации
Строки 150–163 определяют стиль для чего-либо, по крайней мере, такого размера, как планшет в портретном режиме. Опять же, мы переопределяем только те стили, которые необходимо изменить. Мы скрываем иконку и теперь показываем текст на кнопке. Мы также переходим к закругленной угловой кнопке, а не к потрясающей кнопке. Для этого нет изображения, потому что последующие запросы наследуются от этого, а затем устанавливают дополнительные стили. Нет представления, где применяется этот запрос, а другие, основанные на нем, — нет.
Строки 170–184 определяют стиль ТОЛЬКО для планшета в портретном режиме. Этот блок наследуется от предыдущих запросов, т.е. показывает текст вместо значка. Но он переопределяет границы и радиус кнопки, делая ее более круглой и выраженной. Последующие запросы не будут наследоваться от этого, потому что у него есть как минимальный, так и максимальный запрос.
Строки 150–184 Планшет Портрет
Строки 190–204 определяют стиль любого планшета в альбомной ориентации или больше. Он наследуется от всех предыдущих запросов, кроме блока 170–184, область действия которого ограничена запросом min + max. Он покажет и значок, и текст.
Проверь себя!- Какие границы будут у кнопок?
- Какое расположение кнопок будет?
Как видите, медиа-запросы предоставляют нам большие возможности для постепенной адаптации нашей презентации для эффективной мобильной презентации. Конечно, медиазапросы можно использовать для адаптации представления для других целей, таких как печать или даже чтение с экрана.
Изображение Photoshot с Pixabay
Узнайте у членов и лидеров сообщества о лучших способах создания надежных веб-приложений, написания качественного кода, выбора масштабируемых архитектур и создания эффективных автоматизированных тестов. Присоединяйтесь к нам на саммите Reliable Web Summit 26 и 27 августа 2021 г. на платформе ng-conf.
https://reliablewebsummit.com/
Полное руководство для начинающих
общеизвестный термин, и очень важно, чтобы все фронтенд-разработчики знали, как использовать медиа-запросы CSS в 2022 году. Базовый синтаксис медиа-запроса CSS несложно запомнить, но не так просто вспомнить все различные медиа-функции. у вас есть доступ при создании адаптивных веб-сайтов.
Это руководство по использованию медиа-запросов CSS охватит все, что вам нужно знать, чтобы начать работу.
📚 Содержание:
- Синтаксис медиазапросов CSS #
- Определение типов мультимедиа в медиазапросах CSS #
- Модификаторы медиазапросов (логические операторы) #
- Общие медиа-функции для мультимедийных запросов CSS #
- Менее распространенные медиа-функции для медиа-запросов CSS #
- Медиа-функции из медиа-запросов CSS уровня 5 #
- Нестандартные функции носителя #
- Рекомендации по медиазапросам CSS #
Как использовать медиа-запросы CSS: синтаксис
Прежде чем я перейду к различным медиа-функциям, давайте рассмотрим базовый синтаксис медиа-запроса CSS. Медиа-запрос выглядит так:
Кодовый язык: CSS (css)
@media screen и (min-width: 900px) { статья { набивка: 1рем 3рем; } }
Чтобы помочь вам разбить каждую из частей, вот удобное изображение, которое идентифицирует все части типичного медиа-запроса CSS:
А вот сводка вместе с дополнительными подробностями о том, что находится на изображении:
-
@ media
— правило CSS, указывающее, что вы пишете медиа-запрос . -
экран
— один из доступных типов мультимедиа для определения устройств, на которые должен быть нацелен мультимедийный запрос. Это необязательно, если вы не используетене
итолько
операторов. -
и
— модификатор медиа-запроса, также называемый логическим оператором, который помогает вам условно ориентироваться на определенные устройства и медиа-функции. -
(минимальная ширина: 900 пикселей)
— одна из многочисленных мультимедийных функций и значений, доступных для определенных размеров устройств, типов устройств, возможностей устройства и т. д. -
article { ... }
— Селекторы и правила CSS, вложенные в открывающие и закрывающие фигурные скобки, указывающие, какие правила CSS вы хотите применить к своим медиа-запросам.
Вы можете включить столько CSS, сколько хотите, в открывающие и закрывающие фигурные скобки медиазапроса, если CSS правильно отформатирован и не ломается (т.
Перейти к началу
Как использовать запросы мультимедиа CSS: определение типов мультимедиа
Как показано в предыдущем разделе, вы можете дополнительно определить, какие типы мультимедиа вы хотите использовать для своего медиазапроса. Типы носителей описывают категорию устройств, к которым вы хотите применить стили. Типы носителей определяются одним из трех ключевых слов:
-
все
— указывает, что вы хотите настроить таргетинг на все устройства без исключения. -
печать
— Нацелены на устройства, которые отправляют вывод на дисплей для печати, такой как окно «Предварительный просмотр» в веб-браузере. -
screen
— это противоположностьprint
, предназначенная для всех устройств, которые не подпадают под категориюprint
.
Выше приведены единственные типы носителей, которые следует использовать, если таковые имеются. В спецификации запросов мультимедиа CSS уровня 4 многие ранее поддерживаемые типы мультимедиа теперь объявлены устаревшими. Спецификация не рекомендует использовать их, и браузерам предписывается игнорировать их, но при этом рассматривать их как «действительный» код (чтобы убедиться, что код не сломается в будущем). Эти типы носителей включают в себя: tty
, tv
, проекционный
, портативный
, шрифт Брайля
, рельефный
, слуховой
и речь
.
Обратите внимание, что спецификация также поясняет:
Ожидается, что все типы носителей также будут со временем объявлены устаревшими, поскольку будут определены соответствующие функции носителей, которые отражают их важные различия.
Другими словами, ожидается, что однажды мы будем писать все наши медиа-запросы без медиа-типов.
Вас также могут заинтересовать:
- Шаблоны дизайна материалов для Vue, Angular, React (Material UI)
- Эволюция пользовательского интерфейса WordPress (значительные изменения с 2003 по 2021 год)
- Учебное пособие по Webpack для начинающих: полный шаг Пошаговое руководство на 2022 год
Перейти к началу
Модификаторы медиа-запросов (логические операторы)
Каждый медиа-запрос также имеет доступ к двум конкретным модификаторам или логическим операторам, которые помогают добавлять условную логику в ваши медиа-запросы.
Модификатор — это отдельное ключевое слово, влияющее на значение следующей за ним мультимедийной функции. Доступны следующие модификаторы:
Модификатор
not
Когда этот модификатор предшествует медиа-функции, он исключает целевые устройства из медиа-запроса (аналогично тому, как работает селектор CSS :not()
).
Вот пример:
Кодовый язык: CSS (css)
@media not print { статья { набивка: 1рем 3рем; } }
Приведенный выше медиа-запрос будет нацелен на все устройства, не являющиеся устройствами печати, поэтому вышеприведенное будет эквивалентно использованию экрана
без модификатора.
Модификатор
только для Этот модификатор специально предназначен для того, чтобы помочь устаревшим браузерам правильно анализировать медиа-запрос. Как поясняется в спецификации: «Ключевое слово only
не влияет на результат медиа-запроса, но приведет к тому, что медиа-запрос будет проанализирован устаревшими пользовательскими агентами как указание неизвестного типа медиа «только» и, следовательно, будет проигнорирован».
Взгляните на пример:
@media only screen {
статья {
набивка: 1рем 3рем;
}
}
Кодовый язык: CSS (css)
Модификатор
и
Используется для объединения нескольких медиафункций в одном медиазапросе.
Пример:
Экран @media и (min-width: 800px) {
статья {
набивка: 1рем 3рем;
}
}
Кодовый язык: CSS (css)
Вышеупомянутое предназначено для всех непечатающих устройств, ширина которых равна или превышает 800 пикселей.
Модификатор
,
Запятая позволяет включить список медиа-запросов, которые работают аналогично логическому оператору или
.
Вот пример:
@media screen and (min-width: 800px), print and (min-width: 1000px) {
статья {
набивка: 1рем 3рем;
}
}
Кодовый язык: CSS (css)
Стили в приведенном выше медиа-запросе будут нацелены на любой из двух медиа-запросов, разделенных запятой. Это похоже на то, как работает запятая при использовании селекторов CSS.
Перейти к началу
Общие мультимедийные функции для мультимедийных запросов CSS
Теперь мы подошли к сути этого руководства по использованию мультимедийных запросов CSS — различным мультимедийным функциям, которые вы можете использовать. Эти целевые устройства имеют определенные характеристики, указанные выбранными функциями мультимедиа.
Функции мультимедиа улучшают использование типов мультимедиа, позволяя использовать более детальный подход к применению стилей в определенных обстоятельствах. В этом и следующих разделах я опишу, на что нацелен каждый из них, а также приведу пример кода, показывающий каждое из возможных значений или типов значений.
В этом разделе рассматриваются наиболее часто используемые и поддерживаемые функции мультимедиа:
ширина
: Ширина области просмотра, включая ширину полосы прокрутки. Также позволяет использовать min-
и max-
префиксы.
@media (ширина: 800 пикселей) { ... }
@media (минимальная ширина: 360 пикселей) { ... }
@media (максимальная ширина: 1400 пикселей) { ... }
Кодовый язык: CSS (css)
height
: Высота окна просмотра. Принимает префиксы min-
и max-
.
@media (высота: 500 пикселей) { . .. }
@media (минимальная высота: 400 пикселей) { ... }
@media (максимальная высота: 400 пикселей) { ... }
Кодовый язык: CSS (css)
ориентация
: Ориентация окна просмотра.
@media (ориентация: книжная) { ... }
@media (ориентация: альбомная) { ... }
Язык кода: CSS (css)
display-mode
: режим отображения приложения, указанный в манифесте веб-приложения.
@media (режим отображения: полноэкранный) { ... }
@media (режим отображения: автономный) { ... }
@media (режим отображения: минимальный интерфейс) { ... }
@media (режим отображения: браузер) { ... }
Кодовый язык: CSS (css)
соотношение сторон
: На основе указанного соотношения сторон, обозначаемого двумя положительными целыми числами, разделенными косой чертой.
@media (соотношение сторон: 16/9) { ... }
Кодовый язык: CSS (css)
цвет
: Количество битов на компонент цвета устройства вывода или ноль, если устройство не использует цвет. Также позволяет использовать префиксы min-
и max-
. Отсутствие значения означает, что вы ориентируетесь на любое цветное устройство.
@media (цвет) { ... }
@media (цвет: 8) { ... }
@media (минимальный цвет: 8) { ... }
@media (макс. цвет: 16) { ... }
Язык кода: CSS (css)
сетка
: определить, использует ли устройство экран на основе сетки (например, текстовый терминал) или экран на основе растрового изображения (как большинство современных компьютеров, планшетов и смартфоны). Значение 1
означает на основе сетки, значение 0
означает на основе растрового изображения.
@media (сетка: 0) { ... }
@media (сетка: 1) { ... }
Кодовый язык: CSS (css)
монохромный
: Число бит на пиксель в монохромном буфере кадров устройства.
@media (монохромный: 0) { ... }
@media (монохромный) { ... }
Кодовый язык: CSS (css)
разрешение
: Плотность пикселей устройства вывода. Также можно использовать мин-
и макс-
префиксы.
@media (разрешение: 72 dpi) { . .. }
@media (минимальное разрешение: 300 точек на дюйм) { ... }
@media (максимальное разрешение: 150 dpi) { ... }
Кодовый язык: CSS (css)
Перейти к началу
Менее распространенные мультимедийные функции для мультимедийных запросов CSS
Следующие мультимедийные функции используются не так часто, но могут оказаться полезными в определенных обстоятельствах. Некоторые из них также могут не поддерживаться браузером, поэтому перед использованием любого из них обязательно обратитесь за поддержкой на caniuse.com или MDN.
любое наведение
: Наличие или отсутствие функции наведения.
@media (любое наведение: нет) { ... }
@media (любое наведение: наведение) { ... }
Язык кода: CSS (css)
любой указатель
: Имеется ли указывающее устройство и насколько оно точное.
@media (любой указатель: нет) { ... }
@media (любой указатель: курс) { ... }
@media (любой указатель: отлично) { ... }
Кодовый язык: CSS (css)
цветовая гамма
: приблизительный диапазон цветов, поддерживаемых устройством.
@media (цветовая гамма: srgb) { ... }
@media (цветовая гамма: p3) { ... }
@media (цветовая гамма: rec2020) { ... }
Кодовый язык: CSS (css)
индекс цвета
: Количество записей в таблице поиска цветов устройства вывода. Также позволяет использовать мин-
и макс-
префиксы. Отсутствие значения означает, что вы ориентируетесь на любой цветовой индекс.
@media (индекс цвета) { ... }
@media (индекс минимального цвета: 15000) { ... }
@media (max-color-index: 30000) { ... }
Язык кода: CSS (css)
наведение
: Если пользователь может наводить курсор на элементы.
@media (наведение курсора: нет) { ... }
@media (наведение: наведение) { ... }
Кодовый язык: CSS (css)
overflow-block
: Как устройство обрабатывает контент, который переполняется вдоль оси блока.
@media (блок переполнения: нет) { . .. }
@media (блок переполнения: прокрутка) { ... }
@media (блок переполнения: опционально выгружаемый) { ... }
@media (блок переполнения: выгружается) { ... }
Кодовый язык: CSS (css)
overflow-inline
: Как устройство обрабатывает содержимое, выходящее за пределы окна просмотра вдоль встроенной оси.
@media (встроенное переполнение: нет) { ... }
@media (переполнение-встроенное: прокрутка) { ... }
Язык кода: CSS (css)
указатель
: Если на устройстве присутствует указатель.
@media (указатель: нет) { ... }
@media (указатель: грубый) { ... }
@media (указатель: отлично) { ... }
Кодовый язык: CSS (css)
сканирование
: Если устройство чересстрочное (например, некоторые плазменные телевизоры) или прогрессивное (как большинство компьютерных мониторов).
@media (сканирование: чересстрочная развертка) { ... }
@media (скан: прогрессивный) { ... }
Кодовый язык: CSS (css)
обновление
: То есть частота обновления. Как часто устройство вывода может изменять внешний вид содержимого.
@media (обновление: нет) { ... }
@media (обновление: медленно) { ... }
@media (обновление: быстро) { ... }
Кодовый язык: CSS (css)
Наверх
Медиа-функции из медиа-запросов CSS уровня 5
Следующие медиа-функции являются новыми в спецификации медиа-запросов уровня 5. На данный момент лишь немногие из них поддерживаются браузерами, но полезно знать, что вас ждет на горизонте, когда вы научитесь использовать медиа-запросы CSS.
динамический диапазон
: Комбинация яркости, контрастности и глубины цвета, поддерживаемая устройством.
@media (динамический диапазон: стандартный) { ... }
@media (динамический диапазон: высокий) { ... }
Кодовый язык: CSS (css)
принудительные цвета
: определить, включено ли на устройстве выбранная пользователем ограниченная цветовая палитра, например, если включен режим высокой контрастности Windows.
@media (принудительный цвет: нет) { ... }
@media (принудительный цвет: активный) { ... }
Кодовый язык: CSS (css)
horizontal-viewport-segments
: Количество логических горизонтальных сегментов окна просмотра.
@media (горизонтальные сегменты области просмотра: 3) { ... }
Кодовый язык: CSS (css)
смешивание среды
: запрос характеристик пользовательского дисплея.
@media (смешивание с окружающей средой: непрозрачный) { ... }
@media (смешивание с окружающей средой: добавка) { ... }
@media (смешивание среды: вычитание) { ... }
Кодовый язык: CSS (css)
инвертированные цвета
: Если браузер или ОС инвертируют цвета.
@media (инвертированные цвета: нет) { . .. }
@media (перевернутые цвета: инвертированный) { ... }
Язык кода: CSS (css)
nav-controls
: Предоставляет ли браузер обнаруживаемые элементы управления навигацией.
@media (навигация: нет) { ... }
@media (навигация: назад) { ... }
Кодовый язык: CSS (css)
предпочитает контраст
: Если пользователь предпочитает увеличение или уменьшение контраста между соседними цветами.
@media (предпочтительный контраст: без предпочтения) { ... }
@media (предпочитает контраст: больше) { ... }
@media (предпочитает контраст: меньше) { ... }
Кодовый язык: CSS (css)
предпочитает цветовую схему
: Если пользователь предпочитает светлую или темную цветовую схему.
@media (предпочитает цветовую схему: светлая) { ... }
@media (предпочитает цветовую схему: темный) { ... }
Язык кода: CSS (css)
предпочитает уменьшенные данные
: Если пользователь предпочитает альтернативный контент, который использует меньше данных.
@media (предпочитает сокращенные данные: без предпочтений) { ... }
@media (предпочитает уменьшенные данные: уменьшить) { ... }
Кодовый язык: CSS (css)
предпочитает уменьшенное движение
: Если пользователь предпочитает меньше движения на странице.
@media (предпочитает уменьшенное движение: без предпочтений) { . .. }
@media (предпочитает уменьшенное движение: уменьшить) { ... }
Кодовый язык: CSS (css)
предпочитает уменьшенную прозрачность
: Если пользователь запросил систему минимизировать количество эффектов прозрачного или полупрозрачного слоя.
@media (предпочитает пониженную прозрачность: без предпочтения) { ... }
@media (предпочитает уменьшенную прозрачность: уменьшить) { ... }
Кодовый язык: CSS (css)
сценарии
: Если доступны сценарии (почти всегда JavaScript).
@media (сценарий: нет) { ... }
@media (сценарий: только начальный) { ... }
@media (скрипты: включены) { ... }
Кодовый язык: CSS (css)
vertical-viewport-segments
: Количество логических горизонтальных сегментов окна просмотра.
@media (vertical-viewport-segments: 3) { ... }
Кодовый язык: CSS (css)
цветовая гамма видео
: приблизительный диапазон цветов, поддерживаемых браузером и устройством.
@media (цветовая гамма видео: srgb) { ... }
@media (цветовая гамма видео: p3) { ... }
@media (цветовая гамма видео: rec2020) { ... }
Кодовый язык: CSS (css)
видео-динамический диапазон
: приблизительный диапазон цветов, поддерживаемых браузером и устройством.
@media (видео-динамический диапазон: стандартный) { . .. }
@media (видео-кодинамический диапазон: высокий) { ... }
Кодовый язык: CSS (css)
Наверх
Нестандартные функции мультимедиа
Наконец, вот некоторые нестандартные функции мультимедиа, которые не рекомендуется использовать, но в некоторых случаях они могут оказаться полезными для определенных типов устройств (например, iOS планшеты и телефоны):
-webkit-device-pixel-ratio
: Альтернатива мультимедийной функции разрешения
, определяемой числовым значением.
@media (-webkit-device-pixel-ratio: 2) { ... }
Язык кода: CSS (css)
webkit-animation
: Если устройство поддерживает анимацию с префиксом поставщика.
@media (-webkit-animation: true) { . .. }
@media (-webkit-animation: false) { ... }
Язык кода: CSS (css)
webkit-transform-2d
: если устройство поддерживает двумерные преобразования CSS с префиксом поставщика.
@media (-webkit-transform-2d: true) { ... }
@media (-webkit-transform-2d: false) { ... }
Язык кода: CSS (css)
webkit-transform-3d
: если устройство поддерживает 3D-преобразования CSS с префиксом поставщика.
@media (-webkit-transform-3d: true) { ... }
@media (-webkit-transform-3d: false) { ... }
Язык кода: CSS (css)
webkit-transition
: Устаревшая функция, определяющая, поддерживает ли устройство переходы с префиксом поставщика.
@media (-webkit-transition: true) { ... }
@media (-webkit-transition: false) { ... }
Кодовый язык: CSS (css)
Как видите, диапазон мультимедийных функций, используемых в медиазапросах CSS, значительно вырос с тех пор, как началось движение адаптивного веб-дизайна. Вы можете обнаружить практически все, что захотите, и написать CSS для каждого типа возможностей устройства.
Перейти к началу
Передовой опыт работы с медиа-запросами CSS
В этом руководстве я рассмотрел много необработанного кода по использованию медиа-запросов CSS, но сам по себе код не сделает вас экспертом по медиа-запросам. Вот несколько общих советов и рекомендаций, как максимально эффективно использовать мультимедийные запросы CSS:
- ❌ Не создавайте медиа-запросы для устройств определенного размера, таких как iPad, iPhone и т. д. Пишите медиа-запросы в соответствии с тем, как ваши макеты «разрываются» в разных точках (отсюда и термин «точки останова»). Это означает, что вы позволяете содержимому определять точки останова.
- 👍 Если возможно, используйте подход, ориентированный на мобильные устройства, с вашими медиа-запросами, где ваш CSS-запрос, не относящийся к медиа, будет применяться к наименьшему устройству, а затем при необходимости добавьте медиа-запросы для больших окон просмотра.
- 👍 Воспользуйтесь преимуществами функций макета CSS, такими как flexbox и CSS grid, чтобы естественным образом создавать макеты, которые реагируют без необходимости медиа-запросов, если это возможно.
- 💡 Не игнорируйте возможность использования вертикальных медиазапросов, которые проверяют высоту области просмотра. Это может помочь вам избежать некоторых ошибок макета на небольших устройствах.
- 💡 Не зацикливайтесь только на ширине и высоте. Используйте некоторые другие хорошо поддерживаемые мультимедийные функции, которые могут помочь с доступностью и общим UX ваших макетов на разных устройствах.
Наверх
Медиа-запросы CSS в 2022 году и далее
Все новые медиа-функции, представленные за последние несколько лет, сделали возможности написания медиа-запросов CSS захватывающими и мощными!
Вам определенно следует воспользоваться преимуществами наиболее поддерживаемых медиа-функций. Вы также можете начать рассматривать возможность использования многих новых медиа-функций и ожидать, что в один прекрасный день типы медиа уйдут в прошлое.
Если у вас есть какие-либо вопросы о том, как использовать мультимедийные запросы CSS в 2022 году, сообщите нам об этом в разделе комментариев ниже.
…
Не забудьте присоединиться к нашему ускоренному курсу по ускорению вашего сайта WordPress. С помощью некоторых простых исправлений вы можете сократить время загрузки даже на 50-80%:
Макет и презентация Karol K.
Запросы мультимедиа CSS - GeeksforGeeks
Просмотреть обсуждение
Улучшить статью
Сохранить статью
- Последнее обновление:
03 ноя, 2021
Читать Обсудить Посмотреть обсуждение
Улучшить статью
Сохранить статью
Медиа-запрос в CSS используется для создания адаптивного веб-дизайна. Это означает, что представление веб-страницы отличается от системы к системе в зависимости от типа экрана или мультимедиа. Точка останова указывает, при каком размере ширины устройства содержимое только начинает ломаться или деформироваться.
Медиа-запросы можно использовать для проверки многих вещей:
- ширина и высота окна просмотра
- ширина и высота устройства
- ориентация
- разрешение
Медиа-запрос состоит из типа мультимедиа, который может содержать один или несколько выражений, которые могут быть либо истинными, либо ложными. Результат запроса истинен, если указанный носитель соответствует типу устройства, на котором отображается документ. Если медиа-запрос верен, применяется таблица стилей.
Синтаксис:
@media not | только медиатип и (выражение) {
// Содержимое кода
}
Пример: Этот пример иллюстрирует мультимедийный запрос CSS с различной шириной устройства, чтобы сделать его отзывчивым.
<
html
>
<
head
>
<
title
>CSS media query
title
>
<
style
>
body {
text-align : центр;
}
. GFG {
9
: 40556
9
9 9056 9056
.
вес шрифта: полужирный;
цвет: зеленый;
}
@media screen and (max-width:800px) {
body {
text-align: center;
цвет фона: зеленый;
}
. GFG {
Font-Size: 30px;
вес шрифта: полужирный;
цвет: белый;
}
.Geeks {
Color: White;
}
}
@media screen and (max-width:500px) {
body {
text- выровнять: по центру;
цвет фона: синий;
}
}
style
>
head
>
<
body
>
<
div
class
=
"gfg"
>GeeksforGeeks
div
>
<
div
class
=
"geeks"
>A computer science portal for geeks
div
>
body
>
html
>
Вывод: Из вывода мы видим, что если максимальная ширина экрана уменьшена до 800 пикселей, то цвет фона изменится на зеленый, а если максимальная ширина экрана уменьшается до 500 пикселей, тогда цвет фона станет синим. Для ширины рабочего стола цвет фона будет белым.
Типы носителей в CSS: Существует множество типов носителей, которые перечислены ниже:
- все: Используется для всех мультимедийных устройств
- печать: Используется для принтера.
- экран: Используется для экранов компьютеров, смартфонов и т. д.
- речь: Используется для программ чтения с экрана, которые читают экран вслух.
Особенности медиа-запроса: Существует множество функций медиа-запроса, которые перечислены ниже:
- цвет: Количество битов на компонент цвета для устройства вывода.
- сетка: Проверяет, является ли устройство сеткой или растровым изображением.
- height: Высота области просмотра.
- Соотношение сторон: Соотношение между шириной и высотой окна просмотра.
- индекс цвета: Количество цветов, которые может отображать устройство.
- max-resolution: Максимальное разрешение устройства с использованием dpi и dpcm.
- монохромный: Количество битов на цвет на монохромном устройстве.
- сканирование: Сканирование устройств вывода.
- обновление: Насколько быстро может изменяться устройство вывода.
- ширина: Ширина области просмотра.
Поддерживаемые браузеры: Браузеры, поддерживаемые CSS media query , перечислены ниже:
- Chrome 21.0 и выше
- Mozilla 3.5 и выше
- Microsoft Edge 12.0
- Opera 9.0 и выше
- Internet Explorer 9.0 и выше
- Safari 4.0 и выше
Рекомендуемые статьи базовая структура для разработки современных веб-сайтов — наряду с HTML и JavaScript. CSS — это язык программирования, но он не описывает отдельные шаги, которые вы предпринимаете для решения проблемы. Вместо этого определяется цель, которая должна быть достигнута. Это делает CSS декларативным языком, подобным SQL.
Частью CSS являются так называемые медиа-запросы, которые запрашивают свойства устройства вывода. Они используются для адаптивного веб-дизайна . Итак, как именно это работает?
Содержание
- Что такое мультимедийные запросы CSS?
- CSS Media Queries как центральный элемент управления для адаптивного веб-дизайна
- Активация переменного окна просмотра для адаптивного дизайна
- Понимание единиц CSS для адаптивного веб-дизайна
- Понимание расширенных медиазапросов
- Понимание CSS-точки останова
- Понимание мобильных-это процессоры CSS и CSS Utility Frameworks
- Понимание CSS Pre- и Post-Rocessors
- Понимание CSS COMMITSILTING
- Понимание CSS COMMITSILTING
Понимание CSS COUMTILTIN TLD менее чем за 1 доллар в первый год. Зачем ждать? Получите свое любимое доменное имя сегодня!
Соответствующий адрес электронной почты
Сертификат SSL
Поддержка 24/7/365
Что такое медиа-запросы CSS?
Запросы мультимедиа CSS были введены вместе с развертыванием спецификации CSS3. Медиа-запрос связывает назначение свойств CSS элемента с одним или несколькими условиями носителя. В простейшей форме проводится различие между носителем, на котором представлена информация – например, на экране, на печатной странице (PDF) или в текстовом виде:
Запрос мультимедиа CSS определяется в блоке кода CSS с использованием специального правила «@ media». Селекторы CSS и содержащиеся в них правила активируются только при указанном условии . Это означает, что вы можете скрыть неотображаемые элементы при печати страницы:
/* Скрыть неотображаемые элементы */
@медиа печать {
видео, аудио {
дисплей: нет;
}
}
Помимо используемого носителя, CSS Media Queries можно использовать для запроса определенных свойств соответствующего носителя. Следовательно, медиазапросы CSS — это центральная техническая функция, которая в первую очередь обеспечивает адаптивный веб-дизайн.
CSS Media Queries как центральный элемент управления адаптивным веб-дизайном
Адаптивный веб-дизайн направлен на максимально оптимальную адаптацию веб-сайта к устройству, на котором он просматривается. Медиа-запросы используются для запроса различных свойств устройства отображения, так называемых медиа-функций . Это позволяет устанавливать правила стиля для разных размеров экрана. Кроме того, можно определить оптимизированные правила стиля, если мобильное устройство наклонено.
Вот обзор мультимедийных функций, наиболее часто используемых для адаптивного дизайна:
Давайте рассмотрим несколько примеров. Представьте себе главный заголовок веб-сайта. В HTML это обозначается как «h2». Во-первых, мы определяем правила стиля для элемента h2 независимо от того, на каком устройстве он отображается :
h2 {
размер шрифта: 24px;
высота строки: 1,25;
}
Затем мы определяем медиа-запрос , который запрашивает ширину экрана . В запросе мы определяем правила стиля, которые должны применяться к заголовку в зависимости от ширины. В приведенном ниже примере мы хотим увеличить размер шрифта заголовка h2 на экранах шириной не менее 1024 пикселей:
Экран @media и (минимальная ширина: 1024px) {
ч2 {
размер шрифта: 36px;
}
}
Обратите внимание, что мы настраиваем только свойство «размер шрифта» заголовка h2. Междустрочный интервал определяется как относительная единица с использованием свойства «высота строки» и наследуется, поскольку он явно не перезаписывается. В этом примере межстрочный интервал элемента h2 в базовом состоянии составляет 24 пикселя * 1,25 = 30 пикселей. На экранах шириной 1024 пикселя и более межстрочный интервал составляет пропорционально 36 пикселей * 1,25 = 45 пикселей.
В «CSS» смешивание существующих и вновь определенных правил стиля выражается словом «каскадирование»: элемент наследует правила стиля от родительских элементов или общих правил, которые были предварительно определены . Обычно вы определяете основные свойства элементов, а затем выборочно перезаписываете свойства при определенных условиях.
Давайте посмотрим на другой пример. Представьте, что мы хотим отобразить три элемента в контейнере. Элементы должны отображаться один под другим на экране мобильного устройства, когда устройство удерживается вертикально. При наклоне устройства в альбомный формат макет должен переключаться так, чтобы элементы отображались рядом . С модулем Flexbox Layout и CSS Media Query, который запрашивает выравнивание устройства, макет можно реализовать с помощью нескольких строк HTML и CSS. Во-первых, мы определяем контейнер и содержащиеся в нем элементы в HTML:
<дел>…дел>
<дел>…дел>
<дел>…дел>
Мы также устанавливаем следующие правила CSS. Мы устанавливаем свойство «display: flex» в контейнере и условно настраиваем для него свойство «flex-direction» с помощью CSS Media Query. Если устройство удерживается в ландшафтном формате, элементы отображаются в ряд рядом друг с другом. При использовании в портретном формате элементы располагаются один под другим в линию:
.контейнер {
дисплей: гибкий;
}
/* Альбомный формат */
Экран @media и (ориентация: альбомная) {
.контейнер {
flex-направление: строка;
}
}
/* Горизонтальный формат */
Экран @media и (ориентация: книжная) {
.контейнер {
flex-направление: столбец;
}
}
В дополнение к размерам экрана и выравниванию устройства мы также можем запросить физическое разрешение экрана с помощью медиа-запроса . Это представляет особый интерес для отображения пиксельных изображений. В качестве примера представьте логотип, доступный в двух версиях: одна оптимизирована для экранов с низким и одна для экранов с высоким разрешением. Простой трюк для отображения соответствующего логотипа для каждого из них — разместить оба варианта на странице. Мы используем CSS Media Query для запроса разрешения экрана и скрытия ненужной версии с помощью «display: none». Следующий код показывает, как это может выглядеть в коде HTML и CSS:
png" alt="Логотип в высоком разрешении">
/* Скрыть изображение с высоким разрешением на экране с низким разрешением */
@media (максимальное разрешение: 149 точек на дюйм) {
.logo -- высокое разрешение {
дисплей: нет;
}
}
/* Скрыть изображение с низким разрешением на экране с высоким разрешением */
@media (минимальное разрешение: 150 точек на дюйм) {
.logo -- низкое разрешение {
дисплей: нет;
}
}
Активировать переменное окно просмотра для адаптивного дизайна
Ранее мы говорили об «экране» в связи с доступной шириной носителя вывода. Это концептуально правильно, но технически не совсем так. Браузер работает внутри с концепцией «области просмотра». Чтобы ширина области просмотра соответствовала ширине экрана, требуется спецификация «мета-области просмотра» в «
» HTML-документа. Без этой информации страница будет отображаться на мобильных устройствах так же, как и на настольных устройствах, только общий размер значительно уменьшится. <голова>
Понимание единиц CSS для адаптивного веб-дизайна
При адаптивном веб-дизайне элементы должны адаптироваться к существующему экрану. Часто речь идет об определении размеров элементов при различных условиях . Спецификация CSS определяет различные единицы измерения; простейшей единицей является пиксель. Например, изображение 1080p имеет размеры 1,920 пикселей в ширину и 1080 пикселей в высоту.
Пиксель является абсолютной единицей и по определению не адаптируется к доступному пространству. Давайте посмотрим на примере, почему это может быть проблематично. Скажем, веб-страница содержит изображение шириной 1920 пикселей. Если мы установим ширину изображения в это значение с помощью CSS, отображение может быть нарушено на маленьких экранах. Изображение выйдет за пределы доступного пространства.
Ниже мы определяем изображение в HTML с помощью тега «»:
png">
Мы используем CSS, чтобы установить ширину до 1920 пикселей:
.img-1080p {
ширина: 1920 пикселей;
}
В этом сценарии было бы лучше использовать относительную единицу вместо пикселей . На заре макетов на основе таблиц CSS использует процент в качестве относительной единицы. Если мы установим ширину изображения на «100%» с помощью CSS, изображение плавно адаптируется к доступному пространству. Это работает, потому что проценты всегда относятся к окружающему элементу.
изображение {
ширина: 100%;
}
Теперь мы приблизились к нашей цели — адаптировать ширину изображения к доступному пространству. Однако мы создали новую проблему: на экране шире 1920 пикселей изображение отображается увеличенным и, следовательно, пикселизированным. Поэтому мы также должны ограничить максимальную ширину изображения его фактическими размерами в пикселях :
.img-1080p {
/* неявно наследуется от `img` */
/* ширина: 100%; */
максимальная ширина: 1920 пикселей;
}
Помимо пикселей и процентов, CSS понимает несколько других единиц измерения. Полезны относительные единицы em, rem и vw, vh для адаптивного дизайна . В таблице ниже представлен краткий обзор распространенных модулей CSS для адаптивного дизайна:
Понимание расширенных медиа-запросов
Помимо простых медиа-запросов, можно написать сложные медиа-запросы CSS . Логические операторы «и», «или» и «не» полезны для этой цели. Вот пример сложного запроса:
Экран @media и (минимальная ширина: 30 em) и (ориентация: альбомная) { /* … */ }
В дополнение к установленным функциям мультимедиа, которые можно запросить через CSS Media Query, в будущих версиях CSS запланировано несколько интересных функций. Например, спецификация «CSS Media Queries Level 5» (CSS5) включает следующие новые параметры запроса (среди прочего):
С запуском CSS5 ожидается добавление контейнерных запросов . Используя их, можно будет впервые связать правила стиля элемента со свойствами окружающего их контейнера. Это означает, что контейнерные запросы контрастируют с CSS Media Queries, которые запрашивают глобальные свойства отображаемого устройства. Использование контейнерных запросов позволит обрабатывать особые случаи, для которых ранее использовался JavaScript или сложные медиа-запросы.
Понимание точек останова CSS
В связи с адаптивным веб-дизайном и CSS Media Queries часто используются «точки останова». Точка останова — это определенная ширина экрана , для которой активируется набор правил CSS, как определено в CSS Media Query. Вы можете визуализировать точки останова на веб-сайте, открыв инструменты разработчика в браузере. Если активно адаптивное представление, контрольные точки отображаются в виде цветных полос над фактическим веб-сайтом.
Общие сведения о мобильных устройствах, процессорах CSS и служебных средах CSS
Одной из признанных передовых практик адаптивного веб-дизайна является подход, ориентированный на мобильные устройства. Когда веб-дизайн и разработка следуют этому подходу, сначала устанавливаются спецификации стиля для самых маленьких экранов . Эти определения составляют основу дизайна. Исходя из этого, устанавливается несколько точек останова для последовательного увеличения размеров экрана. Новые правила стиля для элементов выборочно определяются в точках останова, тем самым перезаписывая существующие правила для небольших экранов.
Подход, ориентированный на мобильные устройства, легко понять, взглянув на служебную структуру CSS «Тахионы». Это определяет три точки останова по умолчанию: «немаленький», «средний» и «большой»:
/* Точки останова по тахионам */
/* 'немаленькая' точка останова */
Экран @media и (min-width: 30em) { /* … */ }
/* 'средняя' точка останова */
Экран @media и (минимальная ширина: 30em) и (максимальная ширина: 60em) { /* … */ }
/* 'большая' точка останова */
@media screen and (min-width: 60em) { /* … */ }
Обратите внимание, что в соответствии с подходом, ориентированным на мобильные устройства, отдельной «маленькой» точки останова не существует. Детали для небольших устройств просто определяются без точки останова.
Правила стиля для элементов определяются в точках останова, и их отображение адаптируется к различным размерам экрана. Вы можете заметить, что централизация кодовой базы CSS веб-проекта проблематична . Обычно предпочтительнее собрать все свойства CSS элемента в отдельном файле.
Создайте бизнес-сайт с помощью IONOS
Включает дизайны для всех отраслей, инструменты SEO и более 17 000 стоковых изображений. Создайте свой собственный веб-сайт с MyWebsite Creator.
Домен
Электронная почта
Поддержка 24/7
Понимание пре- и постпроцессоров CSS
Для модуляции кода CSS проекта изначально использовались различные препроцессоры CSS. Возможно, вы уже знакомы с языками Sass, Less или Stylus. Позже в проекте Node.js PostCSS был добавлен постпроцессор CSS. Все упомянутые технологии позволяют инкапсулировать медиа-запросы CSS под селектором CSS 9.0012 . Таким образом, правила стиля элемента могут быть определены коллективно для всех медиасостояний. Вот пример использования стилуса:
Файл стилуса «text.styl» для свойств текста:
// Определения для мобильных устройств
п
размер шрифта: 16px
// Определения для «немаленькой» точки останова
Экран @media и (минимальная ширина: 30em)
размер шрифта: 18px
Файл стилуса 'link.styl' для свойств ссылки:
// Определения для мобильных устройств
а
цвет синий
// Определения для «немаленькой» точки останова
Экран @media и (минимальная ширина: 30em)
украшение текста: подчеркивание
Препроцессор пера преобразует файлы в CSS, и собирает правила CSS Media Query с отступом в одной точке останова . Показанный код стилуса транслируется в следующий код CSS:
/* Определения для мобильных устройств */
п {
размер шрифта: 16px;
}
а {
цвет синий;
}
/* Определения для «немаленькой» точки останова */
Экран @media и (минимальная ширина: 30em) {
п {
размер шрифта: 18px;
}
а {
оформление текста: подчеркивание;
}
}
Понимание служебных фреймворков CSS
Инкапсуляция медиазапросов CSS в правила стиля элемента и их обработка с использованием процессора CSS работает, но это заставляет разработчика переключаться между HTML и CSS. Им также необходимо присвоить уникальные имена классов элементам в HTML. Это приводит к нежелательной сложности. Здесь на помощь приходят фреймворки утилит CSS.
Фреймворк служебных программ CSS связывает атомарные свойства CSS с точками останова. Полученные классы CSS могут быть назначены любому элементу в HTML. Это позволяет определяют адаптивные макеты и компоненты только в HTML , без необходимости написания кода CSS. Использование служебной среды CSS позволяет быстро создавать прототипы и идеально подходит для разработки компонентов. Поэтому служебные среды CSS часто используются в сочетании с компонентно-ориентированными технологиями, такими как React и Vue.
Давайте рассмотрим еще один пример, заимствованный из служебной среды Tachyon CSS. Посмотрите на следующий код CSS. Во-первых, мы определяем классы от «mw1» до «mw3», которые ограничивают максимальную ширину любого элемента значениями между «1rem» и «3rem». Кроме того, внутри уже введенных точек останова «средний» и «большой» мы определяем соответствующие классы CSS, имена которых содержат сокращенные точки останова:
/* Тахионы */
/* Размер для мобильных устройств */
. mw1 { максимальная ширина: 1rem; }
.mw2 { максимальная ширина: 2rem; }
.mw3 { максимальная ширина: 3rem; }
/* 'средняя' точка останова */
Экран @media и (минимальная ширина: 30em) и (максимальная ширина: 60em) {
.mw1-m { максимальная ширина: 1rem; }
.mw2-m { максимальная ширина: 2rem; }
.mw3-m { максимальная ширина: 3rem; }
}
/* 'большая' точка останова */
Экран @media и (минимальная ширина: 60em) {
.mw1-l { максимальная ширина: 1rem; }
.mw2-l { максимальная ширина: 2rem; }
.mw3-l { максимальная ширина: 3rem; }
}
Используя эти классы CSS, мы можем полностью писать адаптивные элементы в HTML. Следующий фрагмент HTML-кода определяет изображение с максимальной шириной «1rem» на маленьких экранах. Изображение автоматически адаптируется к доступной ширине экрана . На средних экранах элемент занимает максимум «2rem», на больших экранах максимум «3rem».
Утилиты CSS определяют множество атомарных классов , при этом каждый класс определяет только одно свойство CSS. Помимо размеров элемента сюда входит информация о типографике, цвете и всех других мыслимых свойствах. Для каждого атомарного свойства служебная структура CSS содержит классы для каждой определенной точки останова. Комбинируя несколько классов, можно собрать практически любые адаптивные элементы.
Платформе Tachyons уже несколько лет, и она больше не разрабатывается активно. Однако из-за своей простоты Tachyons по-прежнему отличный способ научиться адаптивному веб-дизайну . Самый простой способ понять этот подход — взглянуть на компоненты Тахионов. Это примеры элементов, которые полностью определены с помощью служебных классов.
Преемником Tachyons является TailwindCSS. TailwindCSS имеет несколько преимуществ перед Tachyons. Проект продолжает активно развиваться и поддерживает множество популярных систем для фронтенд-разработки. Кроме того, TailwindCSS может быть полностью адаптирован к соответствующим потребностям проекта . Все предварительные настройки, такие как точки останова, масштаб размера шрифта и т. д., можно легко настроить.
Хотя работа с служебными структурами CSS практична, этот подход имеет один существенный недостаток : для определения одного элемента может потребоваться множество атомарных классов. Исходный файл CSS также содержит классы для всех комбинаций значений свойств CSS и точек останова по умолчанию. В случае с TailwindCSS существуют тысячи классов, а это означает, что файл CSS в несжатом состоянии может увеличиться до размера файла в несколько мегабайт — неприемлемого размера с точки зрения производительности.
К счастью, TailwindCSS решает эту проблему двумя способами. С одной стороны, фреймворк понимает инструкцию «@apply», которая используется для объединения многократно используемых комбинаций служебных классов под новым именем класса. С другой стороны, TailwindCSS поддерживает инструмент PurgeCSS . Это используется как часть процесса сборки для удаления любых неиспользуемых служебных классов из производственной сборки.