Товаров: 0 (0р.)

Адаптивная верстка media queries: Медиа-запросы в адаптивном дизайне 2018 / Хабр

Содержание

Медиа-запросы в адаптивном дизайне 2018 / Хабр

В июле 2010 года я написала статью «Как использовать CSS3 медиа-запросы для создания мобильной версии вашего сайта» для журнала Smashing. Спустя почти восемь лет эта статья по-прежнему очень популярна. Я решила вернуться к этой теме, поскольку теперь у нас есть такие методы компоновки, как Flexbox и CSS Grid. В этой статье мы рассмотрим современные методы использования медиа-запросов в адаптивном дизайне, а также рассмотрим, что может произойти в будущем.

Нужны ли вообще медиа-запросы?

Первое, что нужно сделать перед тем как написать медиа-запрос в 2018 году — спросить себя, нужно ли вообще его использовать. При построении сеток с использованием float мы создаем гибкую сетку, вычисляя размер наших колонок используя проценты. Эти проценты вычисляются методом Этана Маркотт (Ethan Marcotte), описанным в статье

Fluid Grids

. Этот метод лег в основу техники, которую мы теперь знаем как «отзывчивый дизайн». Чтобы изменить размер или пропорции колонок, мы должны добавить контрольную точку используя медиа-запрос и переопределить их. В работе с процентами других возможностей нет — колонки всегда будут равны проценту от контейнера, в котором они находятся, будь то широкий или узкий контейнер.

Flexbox, CSS Grid и многоколоночная верстка (Multi-column layout) адаптивны по умолчанию, так как их спецификации были написаны в мире, где адаптивный дизайн и кросс-девайсность уже стали реальностью. Это значит, что они уже включают в себя множество функций, которые позволяют легко создавать адаптивные сетки.

В этом CodePen приведены примеры того, как Multi-column, Flexbox и Grid меняют размеры и положение в соответствии с доступным пространством. Здесь нет медиа-запросов и совсем немного CSS.

Используя гибкость этих методов компоновки, мы можем создавать гибкие блоки, которые будут по-разному располагаться в зависимости от доступного пространства экрана без использования медиа-запросов. Например, объект мультимедиа, который вы хотите отобразить колонкой, когда пространство ограниченно, и как строка, когда пространства достаточно. Этого можно достичь с помощью всего нескольких строк CSS.

Допустим flex-basis для наших элементов составляет 250px. Если нет места для двух 250px колонок, они будут выстраиваться в колонку, а если задать положительный

flex-grow они еще будут заполнять все доступное пространство.

.media {
    display: flex;
    flex-wrap: wrap;
}

.media > * {
    flex: 1 1 250px;
}


Когда есть достаточно места для отображения двух колонок


Контент в одну колонку

Одна из особенностей использования Flexbox в том, что доступное пространство для блока ограничено или размером экрана или контейнером с меньшим доступным пространством. Медиа-запросы не могут решить эту задачу, поскольку они смотрят только на доступные размеры всего экрана. Таким образом, новые способы компоновки контента позволяют нам реализовать то, что не могут медиа-запросы.

В примере ниже показано, как контент может быть ограничен вьюпортом (измените размер окна, чтобы увидеть гибкость) и контейнером.

Только в том случае, если такого поведения сеток вам недостаточно, стоит задуматься о применении медиа-запросов. В связке медиа-запросов и CSS Grid вы можете полностью переопределить сетку. Медиа-запросы и CSS Grid отлично дополняют друг друга. Всего одной строкой CSS мы можем переопределить, как и где элементы будут расположены в сетке без изменения разметки. Начнем с одноколоночной сетки для узкой ширины.

grid {
    display: grid;
    grid-gap: 1em;
    grid-template-columns: 1fr;
}

Для более широкой сетки я использую медиа запрос для переопределения количества колонок и задаю свойство, чтобы некоторые блоки охватили несколько соседних ячеек.

@media (min-width: 40em) {
    .grid {
        grid-template-columns: 2fr 1fr;
    }

    header,
    footer {
        grid-column: 1 / 3;
    }
}

Сочетание уместно примененных медиа-запросов и новых методов компоновки предоставляет нам множество возможностей для достижения наилучшего UX на любом устройстве. В этом CodePen я объединила сетку выше с чуть ранее созданным медиа-объектом. Как вы видите, для контента вполне достаточно места на десктопе, но когда доступная область для содержимого становится слишком узкой, сетка преобразуется медиа-запросом, а блоки встают в одну колонку без медиа-запроса.


Медиа-запросы — лучшие практики

Думаю мы все согласимся, что медиа-запросы нам все еще нужны, но способы их применения однозначно меняются. Ниже приведены несколько советов, как использовать медиа-запросы в 2018 году по максимуму.

НЕ ОРИЕНТИРУЙТЕСЬ НА УСТРОЙСТВА, ДОБАВЬТЕ КОНТРОЛЬНЫЕ ТОЧКИ КОГДА СЧИТАЕТЕ, ЧТО СЕТКУ НАДО ПЕРЕСТРОИТЬ

Когда мы впервые начали использовать медиа-запросы, существовало очень мало устройств, о которых стоило бы беспокоиться. Большинство людей волновал iPhone. Однако, в течение нескольких месяцев, рынок устройств и разнообразие их размеров быстро расширился. Нет смысла ориентироваться на отдельные устройства. Вместо этого просто добавьте контрольные точки, где ваша сетка должна перестраиваться. Если растянуть окно браузера с мобильным дизайном, строки текста становятся слишком длинными. Заметили, что стало некомфортно читать? Именно в этот момент, на этой ширине можно добавить медиа-запрос и написать несколько дополнительных CSS свойств.

Таким образом, девайсы, размер экрана которых меньше этой контрольной, точки получат сетку для мобильных устройств, а те, что больше — сетку, которая использует все доступное горизонтальное пространство окна. Не имеет значения, является ли устройство iPhone, смартфоном Samsung или даже веб-дизайнером играющим со своим окном браузера.

СУЩЕСТВУЮТ НЕ ТОЛЬКО ПИКСЕЛИ

Создавая контрольные точки подумайте о переходе с пикселей. Слишком длинная строка текста является основным признаком, что пора задать контрольную точку. Лучше использовать

em

вместо пикселей, это обезопасит от случаев, когда у пользователя размер шрифта больше ожидаемого.

БУДЬТЕ ОСОБЕННО ОСТОРОЖНЫ МЕНЯЯ ПОРЯДОК FLEX И CSS GRID ЭЛЕМЕНТОВ

Дразнящая возможность CSS Grid и, в меньшей степени Flexbox — возможность изменить порядок элементов на разных контрольных точках. Этот функционал может обеспечить отличный UX для пользователей, пользующихся клавиатурой и мышью. Но для пользователей, которые используют свой палец для управления, это может создать значительные неудобства. В частности, это пользователи с плохим зрением. Хоть они и используют скринридер, но все равно могут видеть многое из того, что находится на экране. Также это касается пользователей, которые перемещаются на экране с помощью клавиатуры или какого-либо устройства отличного от мыши или пальца.

Эти пользователи переходят из заголовка к заголовку, от ссылки к ссылке, и их устройства будут следовать порядку, в котором элементы указаны в источнике документа, а не в порядке, который они отображают на экране. Если вы изменяете порядок контента на разных контрольных точках, обязательно перепроверьте, на сколько удобно перемещаться по вашему сайту при помощи клавиатуры.

Примечание. Для получения дополнительной информации прочитайте статью «Flexbox & the keyboard navigation disconnect».

НЕ ЗАБУДЬТЕ ПРО ВЕРТИКАЛЬНЫЕ МЕДИА-ЗАПРОСЫ

Большинство разработчиков ассоциируют медиа-запросы с шириной устройств. Главное — обеспечить достаточно горизонтального пространства для отображения нескольких столбцов контента. Но медиа-запросы можно использовать и для проверки доступной высоты.

Вертикальные медиа-запросы могут быть полезными, например, когда нужно убедиться, что экран имеет достаточно высоты для отображения и просмотра контента в несколько колонок рядом без необходимости прокрутки вверх и вниз. В приведенном ниже CSS, многоколоночная сетка будет перестраиваться только в том случае, если достаточно места для двух колонок по 15em. Я добавила медиа-запрос с min-height, чтобы проверять, когда достаточно высоты чтобы чем начинать выстраивать колонки. Если это небольшой экран в альбомном режиме, то покажется только один столбец, чтобы пользователь мог прокручивать вниз и читать.

@media (min-height: 500px) {
  section {
    column-width: 15em;
  }
}

Медиа-запросы Level 4: Что ожидать?

Медиа-запросы, которые мы используем для создания адаптивного дизайна пришли к нам из спецификации

CSS Level 3

. Новая спецификация

медиа-запросов Level 4

разрабатывается рабочей группой CSS. Эта спецификация добавит новый функционал, и произойдут некоторые изменения в синтаксисе. Не все еще реализовано и не все работает даже в современных браузерах, но уже стоит обратить внимание на новую спецификацию и изучить, что же может произойти в ближайшее время. Это поможет нам быть готовыми создавать пользовательские интерфейсы, которые хорошо работают с широким спектром устройств и разнообразием форматов вывода.

Определяем устройство ввода, а не размер экрана

Размер экрана — довольно грубый способ определить, каким устройством пользуется пользователь и как взаимодействует с ним. Современные экранные устройства — невероятно мощные мини-компьютеры. Пользователь может работать на своем телефоне с помощью внешней клавиатуры и мыши даже с небольшим размером экрана; вполне способен нажимать на маленькие элементы интерфейса. Но это может быть и большой планшет с громадным экраном — мобильная версия ему не подойдет. Однако, владельцы таких планшетов используют свой палец в качестве указывающего устройства, поэтому у них нет возможности сделать нормальное наведение, да и их пальцы не так точны, как указатель мыши.

Раньше мы могли выяснить только размер экрана пользователя, сейчас ситуация несколько иная. Теперь мы можем определить может ли пользователь наводить на элементы, а так же тип его указателя, будь то палец или мышь. Свойства pointer и hover помогут улучшить UX для разных типов пользователей и собирать более точные статистики. Приведенные ниже примеры будут работать в текущих версиях Chrome, Safari и Edge. Вы можете проверить, Can I Use для полного списка поддержки браузерами.

Нижеприведенный CodePen вы можете протестировать с любого мобильного браузера. Свойство content выведет результат проверки типа указателя, которым вы пользуетесь.

@media (pointer:coarse) {
    .which-pointer::after {
        content: "You have a coarse pointer, are you on a touchscreen device?";    
    } 
}

@media (pointer:fine) {
    .which-pointer::after {
        content: "You have a fine pointer, are you using a mouse or trackpad?";    
    } 
}

Чтобы узнать, можете ли вы навести курсор, проверим доступность функции наведения:

@media (hover) {
    .can-i-hover::after {
        content: "You look like you can hover.";    
    } 
}

@media  (hover:none) {
    .can-i-hover::after {
        content: "I don't think you can hover.";    
    } 
}

Тестирование поддержки курсора и состояния наведения на iPhone

Протестируйте сами в CodePen.

Существуют также свойства

any-pointer

и

any-hover

, которые проверяет все доступные возможности любого планшета и смартфона к указателям и наведениям. Следует проявлять большую осторожность при использовании этих свойств, поскольку переход пользователя с основного устройства указания может привести к плохому UX. Спецификация гласит:

«Проектирование страницы, основываясь на any-hover и any-pointer, вероятно, приведет к плохому UX, потому что свойства указывают только последний из доступных механизмов ввода. Тем не менее, авторы могут использовать эти свойства, чтобы определить функциональность, которую они хотят предоставить, на основе любых дополнительных указывающих устройств, доступных пользователю».

Firefox — браузер отстающий от реализации данного функционала. Вот

ссылка

на этот баг. Надеюсь, вскоре мы увидим полную поддержку.

Переполнение контента и Display Quality Media Features

Пока еще не реализованное свойство

overflow-block

, часть

Display Quality Media Features

, позволит проверить то, как поведет себя блок при переполнении контентом.

Медиа-запросы должны быть разными когда происходит переполнение контента. Стандартный способ решения данной проблемы для планшетов и десктопа — добавление прокрутки. Но некоторые устройства, например, электронный рекламный щит не могут переполняться. Так же у нас есть, Paged Media, если вы выводите контент для печати,.

Есть еще одно полезное свойство, которое поможет определить на каком устройстве отображается контент — overflow: block. Например, вы хотите проверить Paged Media ли контент.

@media (overflow-block: paged) {

}

Синтаксические изменения

Медиа-запросы — такие, какими мы их знаем, достаточно объемные в написании. Изменения синтаксиса медиа-запросов Level 4 поможет с этим. Часто мы используем диапазоны, например между 40em и 59em.

@media (min-width: 40em) and (max-width: 59em) {

}

Мы могли бы записать как диапазон в таком виде:

@media (40em <= width <= 59em ) {

}

Во втором примере кода мы ставим условие, что ширина должна быть больше или равна 40em, а также меньше или равна 59em. Это намного проще и короче, нежели префиксы с минимальной и максимальной шириной первого примера. По прежнему можно будет использовать старый синтаксис. Тем не менее, такая менее объемная альтернатива кажется очень полезной.

Медиа-запросы по-прежнему являются полезным инструментом в нашем арсенале для создания адаптивных сеток. Я видела, как люди лезли вон из кожи с CSS Grid, дабы избежать использования пары медиа-запросов, но нет причин избегать их. Как я надеюсь, я продемонстрировала, что есть новые и полезные функции, которые помогут нам улучшить наши пользовательские интерфейсы для большего количества пользователей. Вот несколько дополнительных ссылок, статей и презентаций, чтобы изучить данный материал подробнее. Некоторые из них я использовала при подготовке этой статьи, другие полезны для дополнительного чтения.

Как применяются медиа запросы CSS для создания адаптивных макетов: примеры работы с сеткой

От автора: в июле 2010 я написала статью на Smashing Magazine «создание мобильной версии сайта с помощью CSS3 медиа запросов». Прошло почти 8 лет, а статья все еще привлекает большой трафик. Я подумала, что было бы неплохо вернуться к этой теме теперь, когда у нас есть такие методы макетирования, как Flexbox и Grid Layout. Статья расскажет про то, как сейчас используются медиа запросы CSS в адаптивном дизайне, а также про то, что будет в будущем.

Нужны ли вообще медиа запросы?

Первое правило использования медиа запросов в 2018 – спросите себя, нужны ли они вам. При создании макетов с помощью обтеканий мы создаем гибкую сетку путем вычисления размера колонок в процентах. Полученные проценты мы используем в методе Ethan Marcotte, который описан в его статье «жидкие сетки» и сформировал основу для техники «адаптивный дизайн». Если нам понадобится изменить размер или пропорции колонок, необходимо добавить брейкпоинт с помощью медиа запроса и переопределить значения. Работая с процентами, у нас нет других вариантов, так как значения в процентах всегда привязаны к контейнеру, расширяется он или сужается.

Flexbox, Grid Layout и макет Multi-column по умолчанию адаптивны. Эти спецификации были написаны, когда уже был адаптивный дизайн и поддержка нескольких устройств. Поэтому в них много общей функциональности, активирующей адаптивный дизайн без лишней возни.

В демо ниже представлены гибкие компоненты Multicol, Flexbox и Grid. Все меняют свой размер и макет под доступное пространство. В примере не используются медиа запросы, всего пара строк CSS.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

Можно создавать гибкие компоненты, которые будут по-разному подстраиваться под пространство на экране без медиа запросов, используя встроенную гибкость методов разметки. Например, можно отображать медиа объект в виде колонки, когда пространство ограничено, и как строка, когда пространства достаточно. Сделать это можно парой строк CSS.

flex-basis для флекс элементов – 250 пикселей. Если для двух элементов размером 250 пикселей места не хватает, они отображаются друг под другом. Элементы могут расти (flex-grow – положительное значение), поэтому они будут расти и заполнять строки.

.media { display: flex; flex-wrap: wrap; } .media > * { flex: 1 1 250px; }

.media {

    display: flex;

    flex-wrap: wrap;

}

 

.media > * {

    flex: 1 1 250px;

}

Замечательное свойство Flexbox заключается в том, что компонент ведет себя так в случае, если пространство ограничено размером экрана или компонент помещен в контекст, где у него меньше пространства в контейнере. Медиа запросы не могут решить эту проблему, так как они смотрят на функции всего экрана. Таким образом, новый макет дает нам то, чего не могут медиа запросы.

В демо ниже компонент ограничен вьюпортом (измените размер окна, чтобы оценить гибкость) и контейнером.

Если необходимо что-то большее, то придется подключать медиа запросы. Медиа запросы превосходно работают с Grid – можно полностью переопределить сетку одной строкой CSS или изменить расположение элементов. Для этого вам не понадобится править разметку. Сначала я создам сетку в одну колонку для узких экранов.

grid { display: grid; grid-gap: 1em; grid-template-columns: 1fr; }

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; } }

@media (min-width: 40em) {

    .grid {

        grid-template-columns: 2fr 1fr;

    }

 

    header,

    footer {

        grid-column: 1 / 3;

    }

}

Тщательно подобранные медиа запросы и наследственная адаптивность этих новых методов макетирования дает нам возможность использовать все пространство экрана и предоставлять лучше UX пользователям на любых устройствах. В следующем демо я соединил макет сверху и ранее созданный медиа запрос. Заметьте, как макет трансформируется с помощью медиа запроса по мере уменьшения пространства на экране. Когда область контента становится слишком узкой, компонент схлопывается до одной колонки – без отсылки к медиа запросу.

Лучшие практики медиа запросов

Как мы видим, медиа запросы не ушли. Но изменился способ их применения. Ниже собраны советы по наилучшему использованию медиа запросов в 2018.

Не определяйте устройства — добавляйте брейкпоинты, когда дизайн должен меняться

Когда мы только начали использовать медиа запросы, устройств было не так много. В действительности, большинство заботились только об iPhone. За пару месяцев устройства и их размеры быстро увеличились. Определять конкретные устройства стало бесполезно. Вместо этого добавляйте брейкпоинты на те размеры, когда дизайн должен меняться. Если начать с дизайна для самого маленького устройства и растягивать окно браузера, в какой момент строки станут слишком длинными для удобного чтения? Когда экран можно использовать лучше? Это и есть та точка, где можно добавить медиа запрос и написать дополнительный CSS.

Таким образом, устройства, попадающие под брейкпоинт получат узкий макет, а все что превосходит брейкпоинт – макет, использующий больше горизонтального пространства на экране. И неважно, iPhone это или Samsumg, или веб-дизайнер, играющийся с окном браузера.

Пиксели используются не везде

При создании брейкпоинтов откажитесь от пикселей. Если строка слишком длинная, это явный индикатор, того, что дизайн должен измениться. Дизайну нужен брейкпоинт. Лучше всего указывать такие точки не в пикселях, а в em единицах. Так вы получите однообразный результат, если текст у пользователя будет больше ожидаемого.

Уделите больше внимания сортировке flex и grid элементов

Преимущество Grid Layout по отношению к Flexbox заключается в возможности изменить порядок элементов в макете на разных брейкпоинатах. Для пользователей мобильных устройств и десктоп пользователей с клавиатурой и мышью это обеспечит отличный UX. Однако некоторых пользователей это может запутать. В частности, это пользователи с плохим зрением, пользующиеся скрин ридером, но которые видят большую часть контента на экране, а также те пользователи, которые перемещаются по сайту с помощью клавиатуры или устройства, отличного от мыши или пальцев.

Такие пользователи прыгают от заголовка к заголовку, от ссылки к ссылке. Их устройства следуют порядку элементов, который задан в разметке, а не порядку отображения на экране. Если меняете порядок контента на разных брейкпоинтах, убедитесь, что по сайту все еще можно перемещаться с помощью клавиатуры.

Не забывайте о вертикальных медиа запросах

Как правило, мы думаем о медиа запросах под ширину устройства, проверяя, достаточно ли нам места для отображения колонок с контентом. Медиа запросы можно также использовать для проверки доступной высоты.

Один из примеров использования вертикальных медиа запросов или медиа запросов по высоте – проверка того, что высоты экрана достаточно для отображения многоколоночного макета без необходимость скролить окно вниз. В CSS коде ниже многоколоночный макет создаст колонки только, если места хватает под 2 колонки размером 15em. Поэтому нам не нужен медиа запрос по ширине. Я добавил медиа запрос min-height, чтобы текст перепрыгивал в колонки только при достижении разумной высоты. Если экран маленький и в альбомном режиме, я покажу только один столбец, и пользователь будет скролить вниз для чтения.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

@media (min-height: 500px) { section { column-width: 15em; } }

@media (min-height: 500px) {

  section {

    column-width: 15em;

  }

}

Media Queries Level 4: Чего ждать?

До сих пор мы используем медиа запросы для адаптивного дизайна из спецификации media queries Level 3. CSS Working Group разрабатывает новую спецификацию Media Queries Level 4. Эта спецификация изменит синтаксис и некоторый функционал. Не все еще реализовано в браузерах, однако интересно узнать, что нас может ждать в будущем, что нам поможет создавать UI, хорошо работающий с широким диапазоном устройств и форматов вывода.

Определяйте тип указателя, а не размер экрана

Размер экрана – довольно грубый способ определения типа устройства пользователя, а также используемого способа взаимодействия. Много маленьких устройств с экранами, которые похожи на миникомпьютеры – поэтому пользователи могут работать на телефонах, подключая внешнюю клавиатуру и мышь, и вполне удобно нажимать на маленькие элементы. Пользователь также может использовать большой планшет. На планшетах много пространства, и пользователи не хотят видеть мобильный макет. Тем не менее, для навигации они используют пальцы и не могут наводить курсор на элементы. Пальцы не так точны, как указатель мыши при выборе элементов.

Когда у нас был только размер экрана, мы могли делать предположения только на его основе. Но это меняется. Теперь можно использовать лучшие показатели и их функции вместе с настройкой UI для разных пользователей. Более полезный индикатор устройства – это тип указателя пользователя, а также есть ли у них возможность наводить курсор на элементы на странице. Именно эти функции предоставляет Interaction Media Features медиа запросам. Примеры ниже будут работать в текущих версиях Chrome, Safari и Edge. Полный список поддержки можно посмотреть на Can I Use.

В демо ниже (можете протестировать в любом браузере с поддержкой на устройствах) я использую сгенерированный контент для вывода типа устройства, который, по моему мнению, вы используете. Для проверки типа указателя я использую код ниже:

@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?»; } <p>}

@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?»;    

    }

<p>}

Для проверки возможности наведения курсора я тестирую функцию hover:

@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.»; } }

@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.»;    

    }

}

Проверьте сами в демо.

Также есть функции any-pointer и any-hover, которые проверяют возможности любых указывающих устройств пользователя – противоположность первичных указывающих устройств, проверяемых через pointer и hover. Советую использовать их осторожно, поскольку переход пользователя с основного устройства может ухудшить UX. Спецификация предлагает:

«Проектирование страницы с упором на возможность наведения курсора или точного выбора только потому, что any-hover и any-pointer указывают на то, что как минимум доступен один из механизмов ввода, поддерживающий эти возможности, скорее всего, приведет к ухудшению UX. Однако авторы могут использовать эту информацию, чтобы сообщить о выбранном стиле и функциональности, которые они хотят предоставить, на основе любых дополнительных указывающих устройств, доступных пользователю.»

Firefox отстает с реализацией Interaction Media Features. Можете подписаться и отслеживать баг по ссылке. Надеемся, в скором времени поддержка появится в этом браузере.

Определение переполнения с помощью Display Quality Media Features Link

Пока что не реализована функция overflow-block Display Quality Media Features с возможностью проверки того, как ведет себя медиа при переполнении контента.

При переполнении контента разные медиа ведут себя по-разному. Экран ПК или планшет отображают в этом случае полосу прокрутки. Некоторые устройства (например, билборды с цифровой рекламой) вообще не умеют переполнять контент. Контент также разбивается на страницы, если выводится на печать.

Поэтому функция overflow: block – еще одна полезная вещь, на которую нужно обратить внимание при определении того, на каком устройстве будет отображаться ваш контент. Например, для определения постраничного контента можно использовать:

@media (overflow-block: paged) { }

@media (overflow-block: paged) {

 

}

Изменения синтаксиса

Медиа запросы, какими мы их знаем, могут быть довольно длинными. В level 4 внесено пару изменений в синтаксис, что поможет решить эту проблему. Например, нам часто необходимо задавать диапазон, как в медиа запросе ниже (работает в диапазоне ширины от 40em до 59em).

@media (min-width: 40em) and (max-width: 59em) { }

@media (min-width: 40em) and (max-width: 59em) {

 

}

Его можно переписать в диапазон:

@media (40em <= width <= 59em ) { }

@media (40em <= width <= 59em ) {

 

}

Во втором примере width должна быть больше или равна 40em и меньше или равна 59em. Этот способ намного короче, по сравнению с min- и max- в предыдущем примере. Вы сможете использовать старый синтаксис, он удаляться не будет. Более короткий способ – это бонус.

Медиа запросы – все еще полезный инструмент в создании адаптивных макетов. Я видел, как люди делали костыли на Grid, чтобы не задействовать медиа запросы. Однако нет причин избегать полезных медиа запросов. Надеюсь, я продемонстрировала, что есть новые и полезные функции, которые помогут улучшить UI для большего количества пользователей.

Автор: Rachel Andrew

Источник: //www.smashingmagazine.com/

Редакция: Команда webformyself.

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Узнать подробнее

PSD to HTML

Практика верстки сайта на CSS Grid с нуля

Смотреть

Медиазапросы в адаптивной емейл-вёрстке — Блог EMAILMATRIX

Статья ориентирована на начинающих емейл-разработчиков и маркетологов. Она поможет разобраться с тем, для чего нужны медиазапросы в емейл, как их использовать в вёрстке емейл-сообщений и в каких почтовых клиентах они поддерживаются.

Я поделюсь с вами приёмами использования медиазапросов для вёрстки писем, которые мы применяем в агентстве EMAILMATRIX.

Что такое медиазапросы в емейл?

При разработке любой веб-страницы иногда требуется, чтобы на экранах мониторов пользователи видели одно, а при печати — немного другое. Например, расписание занятий фитнес-клуба на экране выглядит не только ярко и красочно, но имеет фильтры по времени, типу абонемента и ряду других свойств. При печати пользователь увидит полный перечень и описание занятий в табличной форме, без лишних цветных блоков и изображений.

Специально для решения подобных задач разделяют структуру веб-страницы и её оформление. Для описания структуры используют HTML, а для описания оформления — каскадные таблицы стилей (CSS). В них задают расположение блоков, их размер, цвет, параметры шрифта и ряд других параметров.

Чтобы определённые стили отображались только при выводе на конкретных типах устройств, в CSS используют правила @media, которые называют медиазапросами. Также медиазапросы используют, чтобы применять различные стилевые свойства в зависимости от характеристик устройства, например, ширины окна браузера, альбомной/книжной ориентации экрана, плотности пикселей и т. д. Это позволяет обеспечивать удобный пользовательский интерфейс на любом устройстве, например, при просмотре на планшете в альбомной или в книжной ориентации экрана.

Как использовать медиазапросы в емейл

В общем виде синтаксис медиазапроса выглядит следующим образом:

Медиазапрос всегда начинается с объявления @media. Затем перечисляются правила работы медиазапроса, объединённые логическими операторами (and или запятой). В фигурных скобках перечисляются стилевые свойства, которые будут действовать при выполнении перечисленных правил.

Рассмотрим правила подробнее.

Правила media types

Они отвечают за способ воспроизведения медиазапроса. Правила могут быть следующие:

ПравилоОписание
allВсе типы. Это значение используется по умолчанию
printПринтеры и другие печатающие устройства
screenЭкраны
speechРечевые синтезаторы, а также программы для воспроизведения текста вслух

Правила media queries

Они отвечают за технические параметры устройств, на которых должен сработать медиазапрос. Поддерживаются начиная со стандарта CSS3. Правил media queries очень много, вот самые важные:

ПравилоКомментарий
Размер устройства или отображаемая областьmax-width
min-width
Стили применяются, если ширина окна браузера меньше/больше указанной.
max-device-width
min-device-width
Стили применяются, если физическая ширина устройства меньше/больше указанной.
max-height
min-height
Стили применяются, если высота окна браузера меньше/больше указанной.
max-device-height
min-device-height
Стили применяются, если высота устройства меньше/больше указанной.
Ориентация экранаorientationВозможные значения:
  • portrait — вертикальная;
  • landscape — горизонтальная.
Плотность пикселейmax-resolution
min-resolution

К примеру, чтобы стили сработали, когда ширина окна браузера меньше 600 пикселей, медиазапрос должен выглядеть следующим образом:

	@media (max-width: 600px) {
		/*styles*/ }

Медиазапросы в емейл

В вёрстке адаптивных страниц медиазапросы незаменимы — с их помощью можно управлять внешним видом страниц в зависимости от размера экрана. В емейлах дела обстоят иначе из-за ограниченной поддержки почтовыми клиентами CSS в целом и медиазапросов в частности.

По данным компании Litmus, более половины (53%) электронных писем открываются на мобильных устройствах. Однако до сентября 2016 года медиазапросы поддерживались только стандартными почтовыми приложениями на iOS и Android — это обеспечивало небольшой охват аудитории.

При этом корректное отображение письма должно быть обеспечено не только в современных браузерах, но и во всём разнообразии почтовых клиентов, где интерпретирование html-кода бывает весьма своеобразно.

Если не учитывать особенности отображения, то может получиться следующее:

Для максимального охвата аудитории следует использовать «резиновый подход» совместно с блочной адаптацией, который работает в любых мобильных почтовых клиентах. Его особенность — использование размеров, заданных в процентах, что позволяет письму подстраиваться под любую ширину устройства (для сохранения общего дизайна чаще всего ограничивают максимальную ширину). А в случаях, когда изменение размеров недопустимо, — например, у товарной сетки — применяется подход блочной адаптации. Блоки располагаются рядом и, если не умещаются в одну строку на устройстве, перестраиваются друг под друга.

Поддержка

В сентябре 2016 компания Google анонсировала поддержку медиазапросов в веб-интерфейсе и мобильном приложении Gmail.com. Это позволило более точно контролировать поведение блоков при адаптации, активно применять отдельные элементы (специальное мобильное меню, блоки скачивания мобильных приложений и т. д.) для мобильных версий писем и получить практически полную свободу в изменении структуры письма на мобильном устройстве в Gmail. Несмотря на то, что Gmail на российском рынке занимает лишь 3 место (после Mail.ru и Yandex), данное приложение установлено почти на каждом Android-смартфоне.

Этот шаг со стороны Google стал сигналом для других почтовых провайдеров. И спустя год компания Mail.ru (крупнейший почтовый провайдер в России) анонсировала поддержку медиазапросов в своих мобильных приложениях.

C октября 2017 года медиазапросы поддерживаются большинством мобильных почтовых клиентов, включая стандартные приложения Mail на iOS и Android, Gmail, Mail.ru, Outlook и Yahoo. Приложение от Yandex и другие менее популярные почтовые клиенты по-прежнему медиазапросы не поддерживают.

Особенности

Емейл-вёрстка отстаёт от привычной веб-вёрстки, но при этом отчасти повторяет её историю. Подобно CSS-хакам, которые активно использовались в нулевых, чтобы достичь желаемого отображения в Internet Explorer 6–7, в емейл-вёрстке применяются определённые приёмы, такие как условные комментарии, VML (векторный язык разметки от компании Microsoft, который применяется в письмах для вставки фоновых изображений и некоторых других приёмов) и ряд других. Рассмотрим те, что относятся к медиазапросам.

Наибольшее количество нюансов связано с Yahoo, поэтому остановимся на нём немного подробнее.

Чтобы добавить стили, которые интерпретируются только почтовым клиентом Yahoo, используете следующий медиазапрос:

	@media yahoo{
		/* styles * }

Стоит отметить ряд моментов:

  • Yahoo поддерживает правило !important. Оно позволяет изменить приоритет задания стилевого свойства, в том числе перекрыть инлайновые стили, то есть те, что прописаны в атрибуте style элемента. Правило необходимо писать без пробела.
  • Yahoo не поддерживает max-device-width, min-device-width и -webkit-min-device-pixel-ratio.
  • Не используйте селекторы по атрибутам для решения бага в веб-интерфейсе Yahoo, как это делали пару лет назад, — эта проблема давно неактуальна. Они создадут проблемы при отображении в Gmail, который их не воспринимает.

Чтобы задать специальные стили, которые будут применены в мобильной версии письма (при условии, что ширина письма 600 px), медиаправило будет иметь следующий вид:

	@media screen and (max-width: 600px), screen and (max-device-width: 600px) {
		/* styles */ }

При этом Yahoo проигнорирует такую конструкцию. Чтобы задать стили для мобильной версии Yahoo, пропишите медиазапрос после :

	@media screen and (max-width: 600px) {
		/* styles */ }

Медиазапросы могут быть отличным решением при создании «интерактивных писем», которые позволяют создать в письмах различные интерактивные эффекты — карусели элементов, «аккордеоны» или отображение блока по выбору пользователя, например, картинка и ссылка на товар по клику в мини-каталоге письма.

Пример меню с эффектом «аккордеон»

Отображение блока по выбору пользователя

Нельзя однозначно сказать, стоит ли использовать медиазапросы как основной подход к адаптации писем. Для начала тщательно проанализируйте аудиторию. Выясните, какие почтовые клиенты используют подписчики и на каких операционных системах открывают емейлы.

Чтобы добиться корректного адаптивного отображения емейлов во всех почтовых клиентах, применяйте медиазапросы как вспомогательный инструмент для улучшения внешнего вида. В качестве основного подхода к адаптации используйте резиновую вёрстку с блочным перестроением.

Если у вас остались вопросы о медиазапросах и вёрстке писем, напишите на почту, обязательно ответим. А если вы ищете тех, кто возьмёт на себя емейл-маркетинг вашей компании — от концепции рассылки до её отображения в почтовых клиентах, — обращайтесь к нам.

Адаптивная верстка: media queries — AlexdevAlexdev

Добрый день, уважаемые читатели!

Сегодня я бы хотел продолжить обсуждение адаптивной верстки.

В прошлой статье мы обсудили, как сделать простенький адаптивный дизайн. После создания мы выявили 1 большой минус:

На небольших экранах изображения будут слишком мелкими.

 

Как решить проблему? Media Queries!

Данную проблему можно решить благодаря новой возможности CSS: media queries.

С их помощью мы можем отслеживать разрешение экрана пользователя и отображать необходимые стили для каждого разрешения или устройства.

Рассмотрим пример:

@media screen and (max-width: 960px) {
    .class {
        background: red;
    }
}

В результате, если у пользователя экран меньше или равен 960 пикселей, то задний фон для класса .class будет красным.

Таким образом мы может подстраивать наши стили под каждый экран в отдельности.

 

Условия для Media Queries

Условия можно задать следующие условия:

@media screen and (max-width: XXXpx) { }
@media screen and (min-width: XXXpx) { }
@media screen and (min-width: XXXpx) and (max-width: YYYpx) { }
@media screen and (max-device-width: XXXpx) { }

Лично я чаще всего использую первое условие.

 

Способы подключения CSS-таблиц

Так же можно добавлять условия, для каких экранов будет подключаться та или иная таблица стилей:

<link rel="stylesheet" media="screen and (max-width: 960px)" href="big.css" />
<link rel="stylesheet" media="screen and (min-width: 480px)" href="small.css" />

<!-- для iPhone 4 -->
<link rel="stylesheet" media="only screen and (-webkit-min-device-pixel-ratio: 2)" type="text/css" href="iphone4.css" />

<!-- для iPad portrait and landscape -->
<link rel="stylesheet" media="all and (orientation:portrait)" href="portrait.css"> 
<link rel="stylesheet" media="all and (orientation:landscape)" href="landscape.css">

 

 Практика

Давайте доработаем пример из прошлой статьи:

HTML

<h2>...</h2>
<div>
    <div>
        <img src="../images/1.jpg" title="Деревья, листики..." />
    </div>
    <div>
        <img src="../images/2.jpg" title="Зима"  />
    </div>
    ...
</div>

CSS

h2 {
    font-size: 24px;
    text-align: center;
}
div.image_gallery {
    margin: 0 auto;
    width: 1000px;
    text-align: center;
    max-width: 90%; /* контейнер не превышает 90% ширины экрана */
    min-width: 500px;
}
img {
    float: left;
    max-width: 31%;
    height: auto;
    padding: 1%; /* небольшие оступы для изображений */
}

Что получилось? Смотрим: демонстрация 1

При небольшом разрешении картинки становятся слишком мелкими, а текст в заголовке огромным.

Решим нашу проблему!

 

Добавляем Media Queries

Добавим в CSS следующий код:

/* прошлый CSS */
h2 {}
div.image_gallery {}
img {}

@media screen and (max-width: 768px) { /* разрешение планшета */
    h2 {
        font-size: 20px;
    }
    div.image_gallery {
        min-width: 320px;
    }
    img {
        max-width: 48%; /* 2 изображения в ряд */
        height: auto;
        padding: 1%; /* небольшие оступы для изображений */
    }
}

Мы добавили проверку на разрешение. Если разрешение экрана меньше или равно 768 пикселей, то наша галерея перестраивается. В ряд у нас умещается теперь по 2 изображения (width 48% + padding 2%).

Демонстрация 2

В результате фотографии на экране планшета стали выглядеть намного лучше!

 

Теперь разберемся с экраном поменьше.

@media screen and (max-width: 480px) { /* разрешение смартфона */
    h2 {
        min-width: 320px;
        font-size: 16px;
    }
    div.image_gallery {
        width: 320px;
        min-width: 320px;
    }
    img {
        max-width: 98%;
        height: auto;
        padding: 1%; /* небольшие оступы для изображений */
    }
}

После добавления этого кода при разрешении экрана меньше либо равного 480 пикселей, изображения вновь перестраиваются и теперь отображаются по одному в ряд.

Демонстрация 3

 

Итог

Теперь мы имеет фотогалерею, которая удобно подстраивается под устройства. При желании можно добавить и другие разрешения (320 пкс, 960 пкс и т.д.).

Ничего сложного и такая хорошая возможность подстроить наш сайт под разные экраны!

 

Демонстрация 1

Демонстрация 2

 

Спасибо за внимание, жду вас в следующих статьях! Следующая статья: Адаптивная верстка: анимация

Подписывайтесь на рассылку 😉

Что-то осталось неясным, неточным? Пишите в комментариях!

Автор статьи: Alex. Категория: CSS
Дата публикации: 16.12.2013

Адаптивный и мобильный дизайн с CSS3 Media Queries

Для начала посмотрим это в действии.

Если вы отлично умеете верстать, то это не делает вас отличным верстальщиком не зная медиа запросы! Сейчас, когда в моду вошли адаптивные шаблоны, каждый верстальщик должен уметь сделать свой адаптивный шаблон.
Пред началом посмотрите на финальное демо, что бы увидеть, как хорошо это выглядит. Изменяйте размер браузера, что бы увидеть как структура автоматически изменяется основываясь на ширине окна.

Обзор

Контейнер страницы имеет ширину 980px для любого разрешения, больше 1024px. Для проверки ширины используются media queries, если ширина меньше чем 980px, в этом случае макет становится резиновым, вместо фиксированной ширины. Если ширина меньше 650px, то контейнеры с контентом и боковой панелью расширяются на полный экран и становятся в одну колонку.


HTML

Не будем останавливаться на подробном описании HTML. Ниже описана основная структура макета. У меня есть «pagewrap», который включает в себя «header», «content», «sidebar» и «footer».

Код

<div>
  <header>
  <hgroup>
  <h2>Demo</h2>
  <h3>Site Description</h3>
  </hgroup>
  <nav>
  <ul>
  <li><a href=»#»>Home</a></li>
  </ul>
  </nav>
  <form>
  <input type=»search»>
  </form>
  </header>
  <div>
  <article>
  blog post
  </article>
  </div>
  <aside>
  <section>
  widget
  </section>  
  </aside>
  <footer>
  footer
  </footer>
</div>


HTML5.js

Обратите внимание, что в демо используется HTML5. Internet Explorer ниже 9-й версии не поддерживает новые элементы содержащиеся в HTML5, такие как и прочие. Поэтому подключаем Javascript файл html5.js в HTML документ, который позволит IE понимать новые элементы. 

Код

<!—[if lt IE 9]>
  <script src=»http://html5shim.googlecode.com/svn/trunk/html5.js»></script>
<![endif]—>


CSS

Сбрасываем HTML5 элементы в block

Следующий CSS сделает HTML5 элементы (article, aside, figure, header, footer, etc.) блочными.

Код

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {  
  display: block;
}


Описываем основную структуру в CSS

Я снова не буду вдаваться в подробности. Основной контейнер «pagewrap» имеет ширину 980px. «Header» имеет фиксированную высоту 160px. Контейнер «content» шириной 600px и прижат влево. «Sidebar» шириной 280px и прижат вправо.

Код

#pagewrap {
  width: 980px;
  margin: 0 auto;
}
#header {
  height: 160px;
}
#content {
  width: 600px;
  float: left;
}
#sidebar {
  width: 280px;
  float: right;
}
#footer {
  clear: both;
}/code]

Шаг 1

На первом шаге в демо не реализованы media queries, поэтому при изменении размера окна браузера, макет будет оставаться фиксированной ширины.

CSS3 Media Queries

Теперь начинается самое интересное – media queries.

Подключаем Media Queries Javascript

Internet Explorer 8 и более ранних версий не поддерживает CSS3 media queries. Вы можете включить ее, добавив Javascript файл css3-mediaqueries.js.

[code]<!—[if lt IE 9]>
  <script src=»http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js»></script>
<![endif]—>

Подключаем CSS media queries

Создаем новый CSS файл для media queries. Посмотрите мою прошлую статью, что бы увидеть как работают media queries.

Код

<link href=»media-queries.css» rel=»stylesheet»>

Размер экрана меньше 980px (резиновый макет)

Для размера экрана меньше 980px применим следующие правила:
pagewrap = ширина 95%;
content = ширина 60%;
sidebar = ширина 30%.

Совет: используйте проценты (%), чтобы сделать блоки резиновыми.

Код

@media screen and (max-width: 980px) {
  #pagewrap {
  width: 95%;
  }
  #content {
  width: 60%;
  padding: 3% 4%;
  }
  #sidebar {
  width: 30%;
  }
  #sidebar .widget {
  padding: 8% 7%;
  margin-bottom: 10px;
  }
}

Размер экрана меньше 650px (одноколоночный макет)

Затем, задаем CSS правила для размера экрана меньше 650px.
header = сбрасываем высоту в auto;
searchform = позиционируем — 5px сверху;
main-nav = сбрасываем позиционирование в static;
site-logo = сбрасываем позиционирование в static;
site-description = сбрасываем позиционирование в static;
content = устанавливаем ширину auto (это растянет контейнер на всю ширину)
sidebar = устанавливаем ширину 100% и убираем float.

Код

@media screen and (max-width: 650px) {
  #header {
  height: auto;
  }
  #searchform {
  position: absolute;
  top: 5px;
  right: 0;
  }
  #main-nav {
  position: static;
  }
  #site-logo {
  margin: 15px 100px 5px 0;
  position: static;
  }
  #site-description {
  margin: 0 0 15px;
  position: static;
  }
  #content {
  width: auto;
  float: none;
  margin: 20px 0;
  }
  #sidebar {
  width: 100%;
  float: none;
  margin: 0;
  }
}


Размер экрана меньше 480px

Этот CSS будет применяться для размеря экрана меньше 480px, которая соответствует ширине iPhone в альбомной ориентации.
html = отключаем регулировку размера шрифта. По умолчанию iPhone увеличивает размер шрифта, для более комфортного чтения. Вы можете это отключить добавив -webkit-text-size-adjust: none;
main-nav = сбрасываем размер шрифта до 90%. 

Код

@media screen and (max-width: 480px) {
  html {
  -webkit-text-size-adjust: none;
  }
  #main-nav a {
  font-size: 90%;
  padding: 10px 8px;
  }
}/code]


Эластичные изображения

Для того, чтобы сделать изображения эластичными, просто добавьте max-width:100% и height:auto. Изображения max-width:100% и height:auto работает в IE7, но не работает в IE8 (да, еще один странный баг). Для исправления нужно добавить width:auto\9 для IE8.

Код

img {
   max-width: 100%;
   height: auto;
   width: auto\9; /* ie8 */
}

Эластичные встраиваемые видео 

Для видео применяем те же правила, как для изображений. По непонятным причинам max-width:100% (для видео) не работает в Safari. Нужно использовать width: 100%. 

Код

.video embed, 
.video object, 
.video iframe { 
  width: 100%; 
  height: auto; 
}


Initial Scale Meta Tag (iPhone)

По умолчанию iPhone Safari сжимает станицы, что бы вместить в экран. Следующий мета-тег говорит iPhone Safari использовать ширину устройства как ширину окна и отключить.

Код

<meta name=»viewport» content=»width=device-width; initial-scale=1.0″>

Новые вопросы с меткой [media-queries]

Новые вопросы с меткой [media-queries] — Stack Overflow на русском

Это часть стандарта CSS, которая позволяет применять стили на основе информации об устройстве, например, о разрешении, о том, что устройство предназначено для печати, и о многом другом.

Мобильное Меню Media Queries

пишу первый раз на форуме, очень нужна помощь. делаю мобильную версию сайта с помощью Media Queries и на данном этапе учебы обьязан делать исключительно с этим. как расставить меню как на фото? все …

задан 26 авг в 11:58

Ограничение по контрольным точкам

Друзья, всем привет! Подскажите, пожалуйста, при создании медиазапросов, как правильней спроектировать контрольные точки? Часто в сети можно встретить руководства по типу «создаем контрольные …

задан 27 июл в 13:53

Как сделать в Swiper Slider Desktop first swiper?

Искал на русском и на англоязычных форумах, в документации, но как переключить swiper на desktop first, вместо mobile first(который у него по умолчанию), я не нашёл.

задан 5 июн в 18:33

Arrov192

7155 бронзовых знаков

Замена CSS свойства gap для Safari?

Сверстал календарь на флексах и гапах. Захожу тестить на сафари, а там гапы просто не работают. Искал в интернете, но не нашел ответа на свой вопрос. Итак, чем заменить gap? Пробовал gap: 1px; -moz-…

задан 26 апр в 13:30

Sire IMPACTUS

26011 серебряный знак99 бронзовых знаков

Браузер увеличивает media запросы css

Запрос на изменение данных css исходит из max-width 1330px. Всё отлично работало во всех браузерах, но как-то заметил, что яндекс браузер увеличивает сам по себе этот max-width 1330px. С чем может …

задан 26 фев в 20:57

Game_one

3511 серебряный знак55 бронзовых знаков

Как сделать медиа запрос ajax + php?

Имеется некоторый код, который генерируется на php. Необходимо сделать так, чтобы на моб. устройствах он не выполнялся. Подскажите способ реализации, свои попытки прилагаю. <?php if ($…

задан 22 дек ’20 в 22:09

Quick Brown Fox

15233 серебряных знака2121 бронзовый знак

aspect-ratio или max-width/min-width. Что лучше?

Вопрос такой: в каких случаях лучше использовать aspect-ratio, а в каких max-width/min-width в медиа-запросах? Не могу представить себе такого случая, в котором бы пригодилось использовать aspect-…

задан 27 окт ’20 в 21:26

Eva

1,79722 серебряных знака1313 бронзовых знаков

Странное поведение медиа запросов

Столкнулся со странным поведением медиа запросов. Верстаю страницу desctop-first и пишу медиа от max-width, от большего к меньшему. Однако почему-то один медиа запрос перебивает другой, хотя он …

задан 7 окт ’20 в 12:34

Можно ли внутри функции SCSS прописать условие Media?

Не могу разобраться с функциями Scss, хочется сделать внутри функции условие, чтобы при таком-то медиа возвращало другое значение. Моя функция ниже, хочу чтобы при @media(max-width:576px) возвращало …

задан 5 окт ’20 в 16:10

Текст не исчезает в десктопной версии сайта

При переходе на мобильную версию, должен появляться блок с текстом, а когда переходишь на десктоп версию, как и нужно пропадает блок, но текст при этом остаётся <div> &…

задан 3 сен ’20 в 9:29


Stack Overflow на русском лучше работает с включенным JavaScript

Ваша конфиденциальность

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Принять все файлы cookie Настроить параметры

 

Адаптивный дизайн с media запросами без переключения



Добрый день,

Я пытаюсь сделать свой сайт отзывчивым, но не могу заставить его работать. Я гуглил около часа или 3, и я почти уверен, что не делаю этого неправильно, но все же это не работает.

Вот мой код:

@media screen and (min-width: 1230px) { 
}

@media screen and (min-width: 750px) and (max-width: 1229px) {

    body{
    display: none;
    }
}

лучший способ, которым я могу лучше всего описать эту проблему, — это когда я посещаю свой веб-сайт с браузером в полноэкранном режиме, он загружается нормально, как я хочу, но когда я сжимаю окно, оно должно загрузить другую часть css, но просто не загружает никакой css. я вставил туда display:none, чтобы страница была белой, чтобы посмотреть, работает ли она.

У меня есть <meta name="viewport" content="width=device-width" /> в моем html.

Url сайта: http:/ / www.biebvragen.nl

css media-queries
Поделиться Источник Maantje     08 октября 2014 в 13:13

2 ответа


  • Jquery Mobile или адаптивный дизайн?

    Я провел много исследований по созданию адаптивного дизайна. Поэтому я наткнулся на эту статью отсюда: Является ли это избыточным при использовании jQuery мобильных и адаптивных макетов /CSS media запросов? И это заставило меня задуматься. Разве адаптивный дизайн не заменит создание сайта Jquery…

  • css3 media запросов адаптивный дизайн

    В настоящее время я использую css3 media запросов для построения макета. У меня все запросы media работают, но в дизайне есть небольшой quirk. Я приведу код ниже: @media (min-width: 1200px) { #LeftNav, #RightNav {display:block;} #MidCol {background:#ff0000;} } @media (min-width: 980px) and…



1

Не уверен, что мне разрешено ответить на мой собственный вопрос, но теперь это работает!

Вместо:

@media screen and (min-width: 1230px) { 
}

@media screen and (min-width: 750px) and (max-width: 1229px) {

body{
display: none;
}
}

Я изменил его на:

@media screen and (min-width: 750px) and (max-width: 1229px) {

body{
display: none;
}
}
@media screen and (min-width: 1230px) { 
}

И теперь, похоже, все работает нормально!

Поделиться Maantje     08 октября 2014 в 13:49



0

Он хорошо работает с iceweasel на моем linux, попробуйте с другим браузером или выполните обновление Ctrl + F5.

Возможно, очистка кэша тоже может быть решением, но ваш код работает хорошо, это не проблема css, или он не должен работать и в моем браузере.

Поделиться Supamiu     08 октября 2014 в 13:22


Похожие вопросы:


Адаптивный дизайн с jQuery изотопными и CSS Media-запросами

В настоящее время я пытаюсь создать адаптивный дизайн и нуждаюсь в некоторой помощи… В основном: a #wrapper DIV содержит миниатюры, отображаемые в сетке сетка строится с использованием jQuery…


Адаптивный дизайн с изменениями в CSS в отличие от HTML

Сценарий заключается в том, что мы используем сторонний продукт CMS, который размещает около 5-6 сайтов, и на всех сайтах используется много общих компонентов. Учитывая нашу конкретную реализацию и…


CSS на основе фреймворка типа SCSS (адаптивный дизайн)

Я разрабатываю веб-приложение с нуля, которое будет представлять собой жидкий макет, и один и тот же HTML будет отображаться на разных экранах с помощью адаптивного CSS. Для этого я собираюсь…


Jquery Mobile или адаптивный дизайн?

Я провел много исследований по созданию адаптивного дизайна. Поэтому я наткнулся на эту статью отсюда: Является ли это избыточным при использовании jQuery мобильных и адаптивных макетов /CSS media…


css3 media запросов адаптивный дизайн

В настоящее время я использую css3 media запросов для построения макета. У меня все запросы media работают, но в дизайне есть небольшой quirk. Я приведу код ниже: @media (min-width: 1200px) {…


HTML5 адаптивный дизайн

Я новичок в адаптивном дизайне . Мой клиент попросил меня реализовать адаптивный дизайн, чтобы быть совместимым с поддержкой нескольких экранов и поддержкой нескольких устройств. У меня есть…


Адаптивный Дизайн / Media Запросов

Я искал некоторые стандарты для ‘Responsive Design’, и большую часть времени я получаю что-то похожее на это — > адаптивный дизайн . Однако! он говорит, что большинство страниц говорит, что я должен…


Адаптивный веб-дизайн Media запросов css

Здесь я собираюсь создать адаптивный веб-сайт, но у меня есть небольшие сомнения по поводу разрешения мобильных & настольных компьютеров с использованием media запросов. Мой клиент его PC…


Media запросов сначала или less?

Я закончил html и css и теперь хочу пройти еще один шаг. Итак, должен ли я сначала изучать адаптивный дизайн с media запросами или изучать Less для CSS, а затем переходить на media запрос?


Ошибка Сделать Адаптивный Дизайн CSS

Я хочу, чтобы мой сайт был отзывчивым, поэтому я использую @media (max-width:1600px){} этот код. Я делаю адаптивный дизайн, начиная с самой маленькой ширины и заканчивая самой высокой шириной….

Адаптивных медиа-запросов о веб-дизайне


Что такое медиа-запрос?

Медиа-запрос — это метод CSS, представленный в CSS3.

Он использует правило @media для включения блока свойств CSS, только если определенное условие верно.

Пример

Если размер окна браузера 600 пикселей или меньше, цвет фона будет светло-голубым:

Только экран @media и (max-width: 600 пикселей) {
body {
цвет фона: светло-голубой;
}
}

Попробуй сам »

Добавить точку останова

Ранее в этом руководстве мы создали веб-страницу со строками и столбцами, и она был отзывчивым, но не выглядел хорошо на маленьком экране.

Медиа-запросы могут помочь в этом. Мы можем добавить точку останова, где определенные части дизайна будут вести себя по-разному с каждой стороны точка останова.


Рабочий стол
Телефон

Используйте медиа-запрос, чтобы добавить точку останова на 768px:

Пример

Когда экран (окно браузера) становится меньше 768 пикселей, ширина каждого столбца должна составлять 100%:

/ * Для ПК: * /
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {ширина: 33,33%;}
.col-5 {ширина: 41,66%;}
.col-6 {ширина: 50%;}
.col-7 {ширина: 58,33%;}
.col-8 {ширина: 66,66%;}
.col-9 {ширина: 75%;}
.col-10 {ширина: 83,33%;}
.col-11 {ширина: 91,66%;}
.col-12 {ширина: 100%;}

@media only screen and (max-width: 768px) {
/ * Для мобильных телефонов: * /
[class * = «col-«] {
ширина: 100%;
}
}

Попробуй сам »

Всегда создавайте для мобильных устройств прежде всего

Mobile First означает разработку для мобильных устройств, а затем разработку для настольных компьютеров или любых других устройств. другое устройство (это ускорит отображение страницы на небольших устройствах).

Это означает, что мы должны внести некоторые изменения в наш CSS.

Вместо изменения стилей, когда ширина становится на меньше , чем 768px, мы должны изменить дизайн, когда ширина станет на больше , чем 768 пикселей. Это сделает наш дизайн Mobile First:

Пример

/ * Для мобильных телефонов: * /
[class * = «col-«] {
width: 100%;
}

@media only screen и (min-width: 768px) {
/ * Для ПК: * /
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col- 6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 { width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}
}

Попробуй сам »

Другая точка останова

Вы можете добавить сколько угодно точек останова.

Мы также добавим точку останова между планшетами и мобильными телефонами.

Мы делаем это, добавляя еще один медиа-запрос (на 600 пикселей) и набор новых классов для устройств размером более 600 пикселей. (но меньше 768 пикселей):

Пример

Обратите внимание, что два набора классов почти идентичны, единственное разница в названии ( col- и col-s- ):

/ * Для мобильных телефонов: * /
[class * = «col-«] {
width: 100%;
}

@media only screen и (min-width: 600px) {
/ * Для планшетов: * /
.col-s-1 {width: 8.33%;}
.col-s-2 {width: 16.66%;}
.col-s-3 {width: 25%;}
.col-s-4 {width: 33.33%;}
.col- s-5 {width: 41.66%;}
.col-s-6 {width: 50%;}
.col-s-7 {width: 58.33%;}
.col-s-8 {width: 66.66% ;}
.col-s-9 {width: 75%;}
.col-s-10 {width: 83.33%;}
.col-s-11 {width: 91.66%;}
.col-s- 12 {width: 100%;}
}

@media only screen и (min-width: 768px) {
/ * Для ПК: * /
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col- 6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 { width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}
}

Может показаться странным, что у нас есть два набора идентичных классов, но это дает нам возможность в HTML , чтобы решить, что будет происходить со столбцами в каждом точка останова:

HTML, пример

Для настольных ПК:

И первая, и третья секции будут охватывать по 3 колонки каждая.Средняя часть будет охватывать 6 столбцов.

Для планшетов:

Первый раздел будет охватывать 3 столбца, второй — 9, а третий раздел будет отображаться под первыми двумя разделами и будет охватывать 12 столбцов:





Попробуй сам »

Типичные точки останова устройства

Существует множество экранов и устройств разной высоты и ширины, поэтому сложно создать точную точку останова для каждого устройства.Чтобы не усложнять задачу, вы можете настроить таргетинг пять групп:

Пример

/ * Очень маленькие устройства (телефоны, 600 пикселей и ниже) * /
@ только экран @media и (max-width: 600 пикселей) {…}

/ * Маленькие устройства (планшеты с портретной ориентацией и большие телефоны, 600 пикселей и выше) * /
@media only screen и (min-width: 600px) {…}

/ * Medium devices (альбомные планшеты, 768px и выше) * /
@media only screen and (min-width: 768px) { …}

/ * Большие устройства (ноутбуки / настольные компьютеры, 992 пикселей и выше) * /
@media only screen и (min-width: 992px) {…}

/ * Очень большие устройства (большие ноутбуки и настольные компьютеры, 1200px и выше) * /
@media only screen и (min-width: 1200px) {…}

Попробуй сам »

Ориентация: книжная / альбомная

Медиа-запросы также можно использовать для изменения макета страницы в зависимости от ориентация браузера.

У вас может быть набор свойств CSS, который будет только применяется, когда ширина окна браузера превышает его высоту, так называемый «ландшафтный» ориентация:

Пример

Веб-страница будет иметь светло-голубой фон, если ориентация находится в альбомном режиме:

@media только экран и (ориентация: пейзаж) {
кузов {
цвет фона: светло-голубой;
}
}

Попробуй сам »

Скрыть элементы с помощью медиа-запросов

Еще одно распространенное использование медиа-запросов — скрытие элементов на экранах разных размеров:

Я буду скрываться на маленьких экранах.

Пример

/ * Если размер экрана 600 пикселей или меньше, скрыть элемент * /
@media только экран и (max-width: 600px) {
div.example {
дисплей: нет;
}
}

Попробуй сам »

Изменение размера шрифта с помощью медиа-запросов

Вы также можете использовать медиа-запросы для изменения размера шрифта элемента на разные размеры экрана:

Пример

/ * Если размер экрана 601px или больше, установите размер шрифта на 80 пикселей * /
@media only screen и (min-width: 601px) {
div.пример {
размер шрифта: 80 пикселей;
}
}

/ * Если размер экрана 600 пикселей или меньше, установите размер шрифта

на 30 пикселей * /
@media only screen и (max-width: 600px) {
div.example {
размер шрифта: 30 пикселей;
}
}

Попробуй сам »

CSS @media Ссылка

Для полного обзора всех типов и функций / выражений медиа, пожалуйста, посмотрите Правило @media в нашем справочнике CSS.



Руководство по медиа-запросам для новичков — изучение веб-разработки

Медиа-запрос CSS дает вам возможность применять CSS только тогда, когда браузер и среда устройства соответствуют заданному вами правилу, например, «область просмотра шире 480 пикселей».Медиа-запросы являются ключевой частью адаптивного веб-дизайна, поскольку они позволяют создавать различные макеты в зависимости от размера области просмотра, но их также можно использовать для обнаружения других вещей в среде, в которой работает ваш сайт, например, пользователь использует сенсорный экран, а не мышь. В этом уроке вы сначала узнаете о синтаксисе, используемом в медиа-запросах, а затем перейдете к их использованию в отработанном примере, показывающем, как можно сделать простой дизайн адаптивным.

Простейший синтаксис медиа-запроса выглядит так:

  @media media-type and (media-feature-rule) {
  
}  

Состоит из:

  • Тип носителя, который сообщает браузеру, для какого типа носителя предназначен этот код (например,грамм. печать или экран).
  • Медиа-выражение, которое является правилом или тестом, который необходимо пройти для применения содержащегося в нем CSS.
  • Набор правил CSS, которые будут применяться, если тест пройден и тип носителя правильный.

Типы носителей

Вы можете указать следующие возможные типы носителей:

Следующий медиа-запрос установит для тела значение 12pt, только если страница распечатана. Это не будет применяться, когда страница загружается в браузере.

  @media print {
    тело {
        размер шрифта: 12 пунктов;
    }
}  

Примечание: тип носителя здесь отличается от так называемого типа MIME.

Примечание: существует ряд других типов носителей, определенных в спецификации Media Queries уровня 3; они устарели, и их следует избегать.

Примечание. Типы носителей не являются обязательными; если вы не укажете тип мультимедиа в своем мультимедийном запросе, то мультимедийный запрос по умолчанию будет использоваться для всех типов мультимедиа.

Правила для мультимедийных функций

После указания типа вы можете настроить таргетинг на мультимедийные функции с помощью правила.

Ширина и высота

Особенность, которую мы чаще всего обнаруживаем для создания адаптивного дизайна (и которая широко поддерживается браузерами), — это ширина области просмотра, и мы можем применить CSS, если область просмотра находится выше или ниже определенной ширины — или точной ширины — с помощью минимальная ширина , максимальная ширина и ширина функций носителя.

Эти функции используются для создания макетов, отвечающих разным размерам экрана. Например, чтобы изменить цвет основного текста на красный, если размер области просмотра составляет ровно 600 пикселей, вы должны использовать следующий медиа-запрос.

  @media screen and (width: 600px) {
    тело {
        красный цвет;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

Параметры носителя шириной высотой ) могут использоваться в качестве диапазонов и, следовательно, иметь префикс мин- или макс-, чтобы указать, что данное значение является минимальным или максимальным.Например, чтобы сделать цвет синим, если область просмотра уже 600 пикселей, используйте max-width :

.
  @media screen и (max-width: 600px) {
    тело {
        цвет синий;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

На практике использование минимальных или максимальных значений гораздо более полезно для адаптивного дизайна, поэтому вы редко увидите, что width или height используются отдельно.

Существует ряд других мультимедийных функций, которые вы можете проверить, хотя некоторые из новых функций, представленных на уровнях 4 и 5 спецификации мультимедийных запросов, имеют ограниченную поддержку браузером.Каждая функция задокументирована в MDN вместе с информацией о поддержке браузера, а полный список можно найти в разделе Использование запросов мультимедиа: Функции мультимедиа.

Ориентация

Одной из хорошо поддерживаемых мультимедийных функций является ориентация , которая позволяет нам тестировать портретный или альбомный режим. Чтобы изменить цвет основного текста, если устройство находится в альбомной ориентации, используйте следующий медиа-запрос.

  @media (ориентация: альбомная) {
    тело {
        цвет: пурпурный;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

Стандартный вид рабочего стола имеет альбомную ориентацию, и дизайн, который хорошо работает в этой ориентации, может не работать также при просмотре на телефоне или планшете в портретном режиме. Тестирование ориентации может помочь вам создать макет, оптимизированный для устройств в портретном режиме.

Использование указывающих устройств

В рамках спецификации уровня 4 была представлена ​​мультимедийная функция hover . Эта функция означает, что вы можете проверить, может ли пользователь наводить курсор на элемент, что по сути означает, что он использует какое-то указывающее устройство; тачскрин и навигация с клавиатуры не зависает.

  @media (hover: hover) {
    тело {
        цвет: пурпурный;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

Если мы знаем, что пользователь не может зависать, мы могли бы отображать некоторые интерактивные функции по умолчанию. Для пользователей, которые могут навести курсор мыши, мы можем сделать их доступными при наведении курсора на ссылку.

Также на уровне 4 находится функция носителя pointer . Это принимает три возможных значения: none , fine и coarse .Указатель fine — это что-то вроде мыши или трекпада. Это позволяет пользователю точно нацелить небольшую область. Указатель грубой — это ваш палец на сенсорном экране. Значение нет означает, что у пользователя нет указывающего устройства; возможно, они используют только клавиатуру или голосовые команды.

Использование указателя может помочь вам разработать лучшие интерфейсы, которые реагируют на тип взаимодействия пользователя с экраном. Например, вы можете создать более крупные области обращения, если знаете, что пользователь взаимодействует с устройством как с сенсорным экраном.

Со всеми различными возможными медиа-запросами вы можете объединить их или создать списки запросов, любой из которых может быть сопоставлен.

Логика «и» в медиа-запросах

Чтобы объединить медиа-функции, вы можете использовать и почти так же, как мы использовали и выше для объединения типа медиа и функции. Например, мы могли бы захотеть протестировать для минимальной ширины и ориентации . Основной текст будет синим только в том случае, если ширина области просмотра составляет не менее 600 пикселей и устройство находится в альбомном режиме.

  @media screen and (min-width: 600px) and (Ориентация: альбомная) {
    тело {
        цвет синий;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

Логика «или» в медиа-запросах

Если у вас есть набор запросов, любой из которых может совпадать, вы можете разделить эти запросы запятыми. В приведенном ниже примере текст будет синим, если окно просмотра имеет ширину не менее 600 пикселей ИЛИ устройство находится в альбомной ориентации. Если что-либо из этого верно, запрос соответствует.

  @media screen and (min-width: 600px), screen and (Ориентация: альбомная) {
    тело {
        цвет синий;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

Логика «не» в медиа-запросах

Вы можете отрицать весь медиа-запрос, используя оператор not . Это меняет смысл всего медиа-запроса. Поэтому в следующем примере текст будет синим, только если ориентация — портретная.

  @media not all and (ориентация: альбомная) {
    тело {
        цвет синий;
    }
}  

Откройте этот пример в браузере или просмотрите исходный код.

На заре создания адаптивного дизайна многие дизайнеры пытались ориентироваться на очень конкретные размеры экрана. Были опубликованы списки размеров экранов популярных телефонов и планшетов, чтобы можно было создать дизайн, точно соответствующий этим окнам просмотра.

Сейчас существует слишком много устройств с огромным разнообразием размеров, чтобы сделать это возможным. Это означает, что вместо того, чтобы нацеливаться на конкретные размеры для всех дизайнов, лучший подход — изменить дизайн на размер, при котором контент начинает каким-то образом ломаться.Возможно, длина строк становится слишком длинной, или боковая панель, расположенная в рамке, сжимается и плохо читается. Это тот момент, когда вы хотите использовать медиа-запрос, чтобы изменить дизайн на лучший для имеющегося у вас места. Такой подход означает, что не имеет значения, каковы точные размеры используемого устройства, каждый диапазон обслуживается. Точки, в которых вводится медиа-запрос, известны как точки останова .

Режим адаптивного дизайна в Firefox DevTools очень полезен для определения того, где должны находиться эти точки останова.Вы можете легко увеличивать и уменьшать область просмотра, чтобы увидеть, где можно улучшить контент, добавив медиа-запрос и изменив дизайн.

В целом, вы можете использовать два подхода к адаптивному дизайну. Вы можете начать с рабочего стола или самого широкого представления, а затем добавить точки останова, чтобы перемещать объекты по мере уменьшения области просмотра, или вы можете начать с самого маленького представления и добавлять макет по мере увеличения области просмотра. Этот второй подход описывается как мобильный первый адаптивный дизайн и довольно часто является лучшим подходом, которому следует следовать.

Представление для самых маленьких устройств довольно часто представляет собой простой одиночный столбец контента, почти как в обычном потоке. Это означает, что вам, вероятно, не нужно делать много разметки для небольших устройств — хорошо закажите исходный код, и по умолчанию у вас будет удобочитаемый макет.

В пошаговом руководстве ниже представлен этот подход с очень простым макетом. На производственном сайте у вас, вероятно, будет больше вещей, которые нужно настроить в рамках ваших медиа-запросов, однако подход будет точно таким же.

Пошаговое руководство: простой макет, ориентированный на мобильные устройства

Нашей отправной точкой является документ HTML с некоторым применением CSS для добавления цветов фона к различным частям макета.

  * {
    размер коробки: рамка-рамка;
}

тело {
    ширина: 90%;
    маржа: 2em auto;
    шрифт: 1em / 1.3 Arial, Helvetica, без засечек;
}

ссылка,
а: посетил {
    цвет: # 333;
}

nav ul,
aside ul {
    стиль списка: нет;
    отступ: 0;
}

nav a: ссылка,
nav a: visit {
    цвет фона: rgba (207, 232, 220, 0.2);
    граница: 2px сплошной rgb (79, 185, 227);
    текстовое оформление: нет;
    дисплей: блок;
    отступ: 10 пикселей;
    цвет: # 333;
    font-weight: жирный;
}

nav a: hover {
    цвет фона: rgba (207, 232, 220, 0,7);
}

.связанные с {
    цвет фона: rgba (79, 185, 227, 0,3);
    граница: 1px сплошной rgb (79, 185, 227);
    отступ: 10 пикселей;
}

.sidebar {
    цвет фона: rgba (207, 232, 220, 0,5);
    отступ: 10 пикселей;
}

статья {
    нижнее поле: 1em;
}
  

Мы не вносили изменений в макет, однако источник документа упорядочен таким образом, чтобы его содержимое было читабельным.Это важный первый шаг, который гарантирует, что, если бы контент был прочитан программой чтения с экрана, он был бы понятен.

  
    
<заголовок> <основной> <статья>

Овощи!

...

<сторона>

...

<сторона>

Внешние овощные ссылки

  • ...

& copy; 2019

Этот простой макет также хорошо работает на мобильных устройствах.Если мы рассмотрим макет в режиме адаптивного дизайна в DevTools, мы увидим, что он работает довольно хорошо, как простой мобильный вид сайта.

Откройте шаг 1 в браузере или просмотрите исходный код.

Если вы хотите продолжить и реализовать этот пример, сделайте локальную копию step1.html на своем компьютере.

С этого момента начните растягивать представление режима адаптивного дизайна шире, пока не увидите, что длины линий становятся довольно длинными, и у нас есть место для отображения навигации в виде горизонтальной линии.Здесь мы добавим наш первый медиа-запрос. Мы будем использовать ems, так как это будет означать, что если пользователь увеличил размер текста, точка останова будет иметь такую ​​же длину строки, но более широкое окно просмотра, чем у кого-то с меньшим размером текста.

Добавьте приведенный ниже код в нижнюю часть CSS-файла step1.html.

  @media screen и (min-width: 40em) {
    статья {
        дисплей: сетка;
        сетка-шаблон-столбцы: 3fr 1fr;
        колонка-пробел: 20 пикселей;
    }

    nav ul {
        дисплей: гибкий;
    }

    nav li {
        гибкость: 1;
    }
}
  

Этот CSS дает нам макет из двух столбцов внутри статьи, содержание статьи и связанную информацию в элементе aside.Мы также использовали flexbox, чтобы разместить навигацию в строке.

Откройте шаг 2 в браузере или просмотрите исходный код.

Давайте продолжим увеличивать ширину, пока не почувствуем, что есть достаточно места для боковой панели, чтобы также сформировать новый столбец. Внутри медиа-запроса мы превратим основной элемент в сетку из двух столбцов. Затем нам нужно удалить margin-bottom в статье, чтобы две боковые панели выровнялись друг с другом, и мы добавим границу в верхнюю часть нижнего колонтитула.Обычно эти небольшие изменения — это то, что вы делаете, чтобы дизайн хорошо выглядел в каждой точке останова.

Снова добавьте приведенный ниже код в нижнюю часть CSS-файла step1.html.

  @media screen и (min-width: 70em) {
    главный {
        дисплей: сетка;
        сетка-шаблон-столбцы: 3fr 1fr;
        колонка-пробел: 20 пикселей;
    }

    статья {
        нижнее поле: 0;
    }

    нижний колонтитул {
        верхняя граница: сплошной 1px #ccc;
        маржа сверху: 2em;
    }
}
  

Откройте шаг 3 в браузере или просмотрите исходный код.

Если вы посмотрите на последний пример с разной шириной, вы увидите, как дизайн реагирует и работает как один столбец, два столбца или три столбца, в зависимости от доступной ширины. Это очень простой пример адаптивного дизайна для мобильных устройств.

Если вы посмотрите на исходный код HTML в приведенном выше примере, вы увидите следующий элемент, включенный в заголовок документа:

    

Это метатег области просмотра — он существует как способ управления отображением содержимого в мобильных браузерах.Это необходимо, потому что по умолчанию большинство мобильных браузеров лгут о ширине своего окна просмотра. Сайты, не отвечающие на запросы, обычно выглядят очень плохо при рендеринге в узком окне просмотра, поэтому мобильные браузеры обычно отображают сайт с шириной окна просмотра, превышающей реальную ширину устройства по умолчанию (обычно 960 пикселей), а затем сжимают результат рендеринга, чтобы он соответствовал на дисплее.

Это все хорошо, но это означает, что адаптивные сайты не будут работать должным образом. Если ширина области просмотра составляет 960 пикселей, то мобильные макеты (например, созданные с помощью медиа-запроса @media screen и (max-width: 600px) {...} ) не будут отображаться должным образом.

Чтобы исправить это, включите метатег области просмотра, подобный показанному выше на вашей странице, который сообщает браузеру: «Не отображайте контент с областью просмотра 960 пикселей — вместо этого визуализируйте его, используя реальную ширину устройства, и установите начальный уровень масштабирования по умолчанию для лучшая последовательность «. Затем медиа-запросы будут запущены, как и ожидалось.

Существует ряд других параметров, которые вы можете поместить в атрибут content метатега области просмотра — дополнительные сведения см. В разделе Использование метатега области просмотра для управления макетом в мобильных браузерах.

Flexbox, Grid и многоколоночный макет позволяют создавать гибкие и даже быстро реагирующие компоненты без необходимости в медиа-запросах. Всегда стоит задуматься о том, могут ли эти методы компоновки достичь того, чего вы хотите, без добавления медиа-запросов. Например, вам может понадобиться набор карточек шириной не менее 200 пикселей и столько из этих 200 пикселей, сколько поместится в основной статье. Этого можно достичь с помощью макета сетки, вообще не используя медиа-запросы.

Этого можно добиться с помощью следующего:

  
  • Карточка 1

    ...

  • Карточка 2

    ...

  • Карточка 3

    ...

  • Карточка 4

    ...

  • Карточка 5

    ...

  .grid {
    стиль списка: нет;
    маржа: 0;
    отступ: 0;
    дисплей: сетка;
    разрыв: 20 пикселей;
    столбцы-шаблон-сетки: повтор (автозаполнение, минмакс (200 пикселей, 1 пф));
}

.grid li {
    граница: 1px solid # 666;
    отступ: 10 пикселей;
}  

Откройте пример макета сетки в браузере или просмотрите исходный код.

Откройте пример в браузере и увеличьте или уменьшите экран, чтобы увидеть, как изменяется количество дорожек столбца. Хорошая особенность этого метода заключается в том, что сетка учитывает не ширину области просмотра, а ширину, доступную для этого компонента. Может показаться странным завершать раздел о медиа-запросах предположением, что он может вам вообще не понадобиться! Однако на практике вы обнаружите, что хорошее использование современных методов компоновки, дополненных медиа-запросами, дает наилучшие результаты.

Вы дошли до конца этой статьи, но можете ли вы вспомнить самую важную информацию? Вы можете найти тест, чтобы убедиться, что вы сохранили эту информацию, прежде чем двигаться дальше — см. Проверка своих навыков: адаптивный веб-дизайн.

В этом уроке вы узнали о медиа-запросах, а также узнали, как их использовать на практике для создания адаптивного дизайна для мобильных устройств.

Вы можете использовать созданную нами отправную точку для тестирования большего количества медиа-запросов. Например, возможно, вы можете изменить размер навигации, если обнаружите, что у посетителя есть грубый указатель, с помощью мультимедийной функции pointer .

Вы также можете поэкспериментировать с добавлением различных компонентов и посмотреть, является ли добавление медиа-запроса или использование метода компоновки, такого как flexbox или grid, наиболее подходящим способом сделать компоненты отзывчивыми. Очень часто нет правильного или неправильного пути — вы должны поэкспериментировать и посмотреть, какой из них лучше всего подходит для вашего дизайна и контента.

медиа-запросов в адаптивном дизайне: полное руководство (2021)

Добро пожаловать в руководство по медиа-запросам CSS для новичков. В этой статье мы подробно рассмотрим, что такое медиа-запросы, как они работают и как их правильно использовать.

Вопреки распространенному мнению, они выходят за рамки адаптивного дизайна (хотя здесь мы остановимся именно на этом). В конце концов, мы хотим, чтобы вы ушли со знаниями о том, как реализовать свои собственные медиа-запросы, чтобы настроить поведение вашего сайта.

Что такое медиа-запросы CSS?

Медиа-запросы — это в основном способ написания условного CSS. Это означает, что разметка CSS будет отображаться браузером только при соблюдении определенных условий. Чаще всего он используется в адаптивном дизайне, где это способ указать браузерам изменить отображение элементов веб-сайта, когда они больше или меньше определенного размера экрана.Однако, как мы увидим ниже, есть и другие способы их использования.

Как написать медиа-запрос?

Итак, как правильно использовать медиа-запрос? В CSS они являются частью правил at, в данном случае @media . Затем вы добавляете тип носителя, на который вы пытаетесь настроить таргетинг, и функцию / условие, которые должны быть выполнены, чтобы запрос вступил в силу.

  @media [media-type] ([media-feature]) {
// Пользовательские CSS
}  

Например, приведенный ниже фрагмент кода нацелен на устройства с экранами выше 320 пикселей.Все, что помещено в фигурные скобки медиа-запроса, будет выводиться в браузере только на устройствах с экранами, которые соответствуют этому условию. Это также называется точкой останова, то есть точкой, в которой дизайн заметно изменяется, чтобы приспособиться к другому размеру экрана.

  @media screen и (min-width: 320px) {
// Пользовательские CSS
}  

Операторы в медиа-запросах

В медиа-запросах CSS вы также можете использовать такие операторы, как и , или , и , а не , чтобы объединить такие условия:

  @media screen and (min-width: 320px) and (max-width: 786px) {
// Пользовательские CSS
}  

В приведенном выше примере мы изменили исходный запрос, чтобы указать не только минимальный размер экрана, при котором он будет действовать, но и максимальный, при котором он больше не будет применяться.

Также есть только , поэтому стиль применяется только в случае совпадения всего запроса. Он также часто используется для улучшения совместимости медиа-запросов со старыми браузерами. Например, старый браузер мог интерпретировать @media screen и (min-width: 320px) только как @media screen и применить его неверным образом. Включение только , как в @media only screen и (min-width: 320px) , исправляет это поведение, но не оказывает негативного влияния на современные браузеры.

Доступные типы носителей

Хотя экран является наиболее распространенным типом медиа для запросов, у нас есть и другие варианты:

  • все — таргетинг на все устройства
  • печать — для документов, которые просматриваются в режиме предварительного просмотра печати, или носителей, которые отображают контент таким образом, который предназначен для печати
  • Speech — Устройства, считывающие контент, например программы чтения с экрана

Также можно настроить таргетинг на несколько типов носителей, просто перечислив более одного.

  @ экран мультимедиа, речь {
// Пользовательские CSS
}  

Примеры мультимедийных функций / условий

В контексте медиа-запросов для адаптивного дизайна наиболее распространенной медиа-функцией является ширина , включая min-width и max-width . Однако у вас также есть больше вариантов, например:

  • высота — Практически то же самое, что ширина , но для высоты устройства. Также требуется min-height и max-height для определения диапазонов.
  • соотношение сторон — задает соотношение ширины и высоты области просмотра.
  • ориентация — позволяет применять запросы в зависимости от того, находится ли устройство в портретном или альбомном режиме.
  • hover — введите условный CSS для устройств, которые имеют разные способы наведения курсора на элементы, например мышь и сенсорный экран.

Есть также функции, которые важны для доступности, например:

  • предпочитает уменьшенное движение — Позволяет, например, отключить анимацию на вашем сайте для людей, у которых эта функция установлена ​​в своем браузере.
  • prefers-Contrast — С помощью этого медиа-запроса вы можете определить различные цветовые схемы для пользователей, которые установили свои предпочтения на низкие или высокие. Однако в настоящее время ни один браузер не поддерживает его.

Есть еще много всего, например, возможность учитывать разрешение устройства, глубину цвета и многое другое. Вы можете найти полный список здесь.

Важно: метатег области просмотра

Ни одно руководство по медиа-запросам CSS не будет полным без упоминания метатега viewport .Он находится внутри раздела веб-сайта и выглядит так:

    

Что это делает? Он сбрасывает размер области просмотра в мобильных браузерах. Это необходимо, потому что мобильные браузеры обычно устанавливают более широкую область просмотра, чем реальное устройство. Это сделано для того, чтобы они могли помещать в него не отвечающие на запросы сайты, не выглядя ужасно. Они в основном имитируют более широкое окно просмотра, чтобы дизайн все еще соответствовал.

Источник изображения: Google

. Ввод метатега viewport гарантирует, что этого не произойдет, и ваши медиа-запросы будут работать должным образом.

Примеры медиа-запросов

Теперь, когда у нас есть представление о том, как работают медиазапросы в целом, давайте рассмотрим несколько практических примеров, чтобы внедрить новые знания.

Определить точки останова для различных устройств

Начнем с классического примера. Здесь мы изменим размер шрифта сайта в зависимости от того, просматривается он на компьютере, планшете или телефоне.

  body {
размер шрифта: 20 пикселей;
}

@media only screen и (max-width: 768px) {

тело {
размер шрифта: 18 пикселей;
}

}


@media only screen и (max-width: 450px) {

тело {
размер шрифта: 16 пикселей;
}

}  

Это позволит убедиться, что текст остается читабельным и не перегружает экран на небольших экранах.

Использование ориентации

Аналогичным образом, вот пример того, как вы можете изменить поведение в зависимости от того, отображается ли сайт в портретном или ландшафтном режиме.

  @media only screen and (Ориентация: книжная) {

div {
маржа слева: 0 пикселей;
маржа справа: 0 пикселей;
}

}

@media only screen and (Ориентация: альбомная) {

div {
маржа слева: 10 пикселей;
маржа справа: 10 пикселей;
}

}  

В портретной ориентации элемент div не будет иметь дополнительных полей по бокам. С другой стороны, в альбомном режиме, где доступно больше места, медиа-запрос будет добавлять по 10 пикселей с каждой стороны.

Объединение запросов вместе

Вы также можете объединить несколько запросов, просто разделив их запятыми.Запятая работает так же, как оператор или .

  @media screen and (ориентация: портретная), screen and (max-width: 320px) {

div {
маржа слева: 0 пикселей;
маржа справа: 0 пикселей;
}

}  

В этом случае браузер не применяет поля, если устройство находится в портретном режиме или шириной не более 320 пикселей. Обратите внимание, что достаточно одного условия. Вы также можете упростить запрос до @media (Ориентация: портрет), (max-width: 320px) , если вас не интересует конкретный таргетинг на устройства с экранами.

Медиа-запросы в HTML и JavaScript

Однако медиа-запросы — это не только CSS. Хотя это наиболее распространенное приложение, их также можно использовать в HTML и JavaScript. Например, приведенный ниже фрагмент HTML загружает разные таблицы стилей на экраны разного размера.

  

  

Вы можете сделать это, чтобы упростить поддержку различных дизайнов. Вместо того, чтобы редактировать медиа-запросы в одной большой таблице стилей, вы можете редактировать отдельную таблицу стилей меньшего размера.

Вы также можете использовать медиа-запросы в JavaScript, однако здесь вам нужно сначала определить условия, которым необходимо соответствовать, с помощью window.matchMedia () , что выходит за рамки этого руководства. Вы можете найти пример здесь.

Альтернативы медиа-запросам

Не всегда нужно использовать медиа-запросы, чтобы элементы были отзывчивыми.Некоторые из них могут быть изготовлены таким способом «из коробки». Технологии CSS, такие как flexbox и grid, как раз для этого. Они позволяют создавать HTML-элементы, которые автоматически адаптируются к области просмотра, с множеством способов управления их поведением.

Кроме того, как упоминалось в нашем учебнике по адаптивному дизайну, еще одна важная вещь, чтобы сделать вашу тему или веб-сайт адаптивными, — это работа с относительными, а не абсолютными измерениями. Это означает, что вместо того, чтобы определять ширину боковой панели 320 пикселей, лучше задать ей относительный размер, например 32.5%.

Таким образом, независимо от того, на каком типе экрана он отображается, он умещается в доступном пространстве вместо того, чтобы пытаться заставить элементы иметь определенную ширину на экране, который может быть не в состоянии разместить это.

Итак, хотя изучение медиа-запросов важно, не менее важно знать и о других, современных способах адаптации веб-сайтов к экранам меньшего размера. Используйте ссылки для начинающих, чтобы узнать больше.

Точки останова для медиа-запросов 2021

Теперь, когда мы знаем, как создавать точки останова с помощью медиа-запросов, остается вопрос, где вы должны их разместить.Раньше, когда у нас было меньше устройств, вы могли оптимизировать специально для разных устройств.

Однако сегодня нам приходится иметь дело с таким количеством типов устройств, размеров экранов, разрешений и т. Д., Что это уже невозможно. Поэтому такие вопросы, как «каковы стандартные медиа-запросы?» больше не работает.

Есть некоторые, которые используются часто, например, установленные Bootstrap.

Они довольно хорошо работают на многих устройствах и могут стать хорошей отправной точкой.Есть также списки медиа-запросов, подходящих для обычных устройств, например, этот на CSS-Tricks. Однако в целом лучшая идея — установить точки останова, специфичные для вашего дизайна.

Это означает, что начните с мобильного дизайна (потому что мы живем в мире, ориентированном на мобильные устройства) и увеличивайте размер экрана все дальше и дальше, пока он не перестанет хорошо выглядеть. Именно для этого и предназначен режим адаптивного дизайна в инструментах разработчика браузера.

Может быть, строки становятся слишком длинными, может быть, некоторые элементы начинают слишком далеко друг от друга.Суть в том, что нужно изменить раскладку. Это ваша первая точка останова, и куда вы можете поместить свой первый медиа-запрос. Продолжайте так, пока не доберетесь до полноэкранного отображения.

Работая таким образом, вам не нужно искать точные размеры устройства, но вместо этого вы можете использовать свой дизайн в качестве руководства для ваших медиа-запросов.

Медиа-запросы CSS в двух словах

Ознакомившись с нашим руководством по медиа-запросам для новичков, вы должны хорошо понимать, что такое медиа-запросы, почему они полезны и как их можно использовать, чтобы сделать ваш сайт более привлекательным для посетителей на мобильных устройствах.

Как вы также видели выше, медиа-запросы выходят за рамки адаптивного дизайна, хотя именно для этого они используются чаще всего. Вы также можете применить их, чтобы сделать свой сайт более доступным, улучшить его внешний вид в печати и т. Д.

Кроме того, медиазапросы CSS — это еще не все, что нужно для повышения отзывчивости вашего сайта. Есть и другие способы адаптации вашего дизайна, такие как вышеупомянутые flexbox и grid.

Какой ваш любимый способ использования медиа-запросов? Есть что добавить к вышесказанному? Дайте нам знать об этом в комментариях!

Использование медиа-запросов для адаптивного дизайна в 2018 году — Smashing Magazine

Краткое резюме ↬ В этой статье мы рассмотрим использование медиа-запросов для адаптивного дизайна сегодня, как они работают вместе с Flexbox и Grid Layout, а также посмотрим, что будет в будущем.

Еще в июле 2010 года я написал статью для журнала Smashing Magazine под названием «Как использовать медиа-запросы CSS3 для создания мобильной версии вашего веб-сайта». Спустя почти восемь лет эта статья по-прежнему пользуется большим спросом. Я подумал, что было бы неплохо вернуться к этой теме, теперь, когда у нас есть такие методы компоновки, как Flexbox и Grid Layout. В этой статье мы рассмотрим использование медиа-запросов для адаптивного дизайна сегодня, а также взглянем на то, что нас ждет в будущем.

Более пристальный взгляд на BFC

Если вы когда-либо создавали макет с помощью CSS, вы, вероятно, знаете, что такое BFC. Понимание того, почему это работает и как его создать, полезно и может помочь вам понять, как работает макет в CSS. Прочитать статью по теме →

Первое правило использования медиа-запросов в 2018 году — спросить себя, нужно ли вам вообще использовать медиа-запросы. При построении макетов с использованием плавающих элементов мы создаем гибкую сетку, вычисляя размер наших столбцов в процентах.Мы вычисляем эти проценты, используя метод, описанный Итаном Маркоттом в своей статье о Fluid Grids, который лег в основу техники, которую мы теперь называем «адаптивным дизайном». Если мы затем захотим изменить размер или пропорции этих столбцов, мы должны добавить точку останова с помощью Media Query и переопределить их. У нас нет других вариантов при работе с процентами, поскольку они всегда будут равны проценту от контейнера, в котором они находятся, независимо от того, широкий или узкий этот контейнер.

Flexbox и Grid Layout, а также многоколоночный макет по умолчанию реагируют на и .Эти спецификации были написаны в мире, где адаптивный дизайн и поддержка нескольких устройств уже существовали. Это означает, что они включают в себя множество функциональных возможностей, основанных на здравом смысле, что позволяет создавать адаптивный дизайн без особых усилий.

Больше после прыжка! Продолжить чтение ниже ↓

В этом CodePen у меня есть примеры гибких компонентов Multicol, Flexbox и Grid, которые изменяют размер и макет в соответствии с доступным пространством. Здесь нет используемых медиа-запросов и очень мало строк CSS.

См. Примеры пера для методов компоновки «Адаптивный по умолчанию» от Рэйчел Эндрю (@rachelandrew) на CodePen.

См. «Примеры пера для методов макета« Адаптивный по умолчанию »» от Рэйчел Эндрю (@rachelandrew) на CodePen.

Мы можем создавать гибкие компоненты, которые будут раскладываться по-разному в зависимости от пространства экрана, без использования медиа-запросов, используя встроенную гибкость этих методов компоновки. Например, мультимедийный объект, который вы хотите отобразить в виде столбца, когда пространство ограничено, и в виде строки, когда места больше.Этого можно добиться с помощью нескольких строк CSS.

Поскольку flex-base для наших гибких элементов составляет 250 пикселей. Если нет места для двух элементов по 250 пикселей, они будут перенесены; поскольку они могут расти ( flex-grow — положительное значение), они будут расти и заполнять строки после переноса.

  .media {
    дисплей: гибкий;
    flex-wrap: обертка;
}

.media> * {
    flex: 1 1 250 пикселей;
}
  
Компонент, когда есть достаточно места для отображения двух столбцов Компонент в виде одного столбца

Одна из приятных особенностей использования Flexbox таким образом заключается в том, что компонент ведет себя так, независимо от того, ограничено ли пространство размером экрана или потому, что компонент был помещается в контекст, где у него меньше места в контейнере.Медиа-запросы не могут решить эту проблему, поскольку они смотрят только на элементы всего экрана, и таким образом новый макет дает нам то, чего не могут сделать медиа-запросы.

Вы можете увидеть компонент, ограниченный окном просмотра (измените размер окна, чтобы увидеть гибкость) и элементом оболочки, в приведенном ниже CodePen.

См. «Адаптивный дизайн пера без медиа-запросов» от Рэйчел Эндрю (@rachelandrew) на CodePen.

См. «Адаптивный дизайн пера без медиа-запросов» от Рэйчел Эндрю (@rachelandrew) на CodePen.

Когда вам нужно сделать больше, самое время добавить медиа-запрос. Медиа-запросы и сетка невероятно хорошо работают вместе, так как вы можете полностью переопределить сетку, если хотите, с помощью строки CSS или переопределить расположение элементов в вашей сетке. Для этого не нужно ничего менять в разметке. Я начинаю с сетки из одного столбца для узкой ширины.

  сетка {
    дисплей: сетка;
    сетка-промежуток: 1em;
    сетка-шаблон-столбцы: 1fr;
}
  

Затем я использую Media Query, чтобы переопределить количество дорожек столбцов в моей сетке и заставить некоторые элементы охватывать несколько дорожек сетки в теперь более крупной сетке.

  @media (min-width: 40em) {
    .сетка {
        сетка-шаблон-столбцы: 2fr 1fr;
    }

    заголовок
    нижний колонтитул {
        сетка-столбец: 1/3;
    }
}
  

Сочетание тщательно выполненных медиа-запросов с присущей этим новым методам компоновки быстродействием дает вам большие возможности для наилучшего использования площади экрана и обеспечения наилучшего взаимодействия с вашими пользователями на любом устройстве, которое они используют. В следующем CodePen я объединил макет выше с созданным ранее медиа-объектом.Вы можете видеть, как, поскольку у нас меньше места на экране, макет трансформируется из-за медиа-запроса, а когда область содержимого становится слишком узкой, компонент сворачивается до одного столбца — без обращения к медиа-запросу.

См. Раздел «Медиа-запросы пером и макет сетки» Рэйчел Эндрю (@rachelandrew) на CodePen.

См. «Медиа-запросы Pen» и «Макет сетки» от Рэйчел Эндрю (@rachelandrew) на CodePen.

Как мы видели, медиа-запросы никуда не делись, но способы их использования меняются.Вот несколько советов, как максимально эффективно использовать медиа-запросы в 2018 году.

Не настраивайте таргетинг на устройства, добавляйте точки останова, когда конструкция ломается

Когда мы впервые начали использовать медиа-запросы, у нас было всего несколько устройств, о которых нужно было беспокоиться. На самом деле большинство людей беспокоились об iPhone. Однако в течение нескольких месяцев устройства и их размеры росли. Больше нет смысла настраивать таргетинг на отдельные устройства. Вместо этого добавьте точки останова там, где ваш дизайн ломается. Если вы начнете с дизайна для самого маленького устройства и начнете растягивать окно браузера шире, когда строки станут слишком длинными, чтобы их было удобно читать? Когда можно было бы лучше использовать экран? Это момент, когда нужно добавить медиа-запрос и написать дополнительный CSS.

Работа таким образом означает, что любое устройство, входящее под эту точку останова, получает узкую компоновку, а все, что поступает через эту точку останова, получает компоновку, более использующую горизонтальное пространство экрана. Не имеет значения, является ли устройство iPhone, телефоном Samsung или веб-дизайнер играет с окном своего браузера.

Дело не только в пикселях

При создании точек останова подумайте о том, чтобы отойти от пикселей. Слишком большая длина строки — хороший показатель того, что конструкция «ломается» и требует точки останова.Лучший способ указать, что, чем пиксели, — это единица em , так как это даст согласованный результат, если у пользователя будет более крупный текст, чем вы ожидали.

Соблюдайте особую осторожность при повторном заказе элементов гибкости и сетки

Замечательная возможность Grid Layout и, в меньшей степени, flexbox — это возможность переупорядочивать макет в разных точках останова. Хотя это может обеспечить отличный опыт для пользователей, которые перемещаются по рабочему столу с помощью клавиатуры и мыши, а по телефону с помощью пальца, для некоторых пользователей это может создать запутанный и несвязный опыт.В частности, пользователи с плохим зрением, которые используют программу чтения с экрана, но могут также видеть большую часть того, что находится на экране, а также те пользователи, которые перемещаются по экрану с помощью клавиатуры или другого устройства, кроме мыши или пальца.

Эти пользователи переходят от заголовка к заголовку, ссылаются на ссылку, и их устройства будут следовать порядку, в котором элементы перечислены в источнике документа, а не порядку, в котором они отображаются на экране. Убедитесь, что при изменении порядка содержимого в разных точках останова вы проверяете, что навигация для некоторых пользователей с помощью клавиатуры остается пригодной для использования.

Примечание : Дополнительные сведения об этой проблеме см. В разделе «Flexbox и навигация с клавиатуры отключены».

Не забывайте вертикальные медиа-запросы

Мы склонны думать о медиа-запросах по ширине устройств, чтобы гарантировать, что на экране достаточно места по горизонтали для отображения нескольких столбцов контента. Вы также можете использовать медиа-запросы для проверки доступной высоты.

Одно из мест, где могут быть полезны эти вертикальные или основанные на высоте медиа-запросы, — это убедиться, что экран имеет достаточную высоту для отображения содержимого, размещенного с использованием многоколоночного макета, без необходимости прокрутки пользователя вверх и вниз для просмотра содержимого в каждый столбец.В приведенном ниже CSS макет с несколькими столбцами будет создавать столбцы только в том случае, если есть достаточно места для двух столбцов 15em , и поэтому не требуется медиа-запрос ширины, чтобы он вел себя гибко. Я добавил медиа-запрос min-height к тексту для получения разумной высоты, прежде чем нажимать на столбцы. Если это маленький экран в альбомном режиме, я покажу только один столбец, чтобы пользователь мог прокрутить вниз, чтобы прочитать.

  @media (min-height: 500px) {
  раздел {
    ширина столбца: 15em;
  }
}
  

Медиа-запросы, которые мы до сих пор использовали для адаптивного дизайна, взяты из спецификации медиа-запросов уровня 3.Новая спецификация медиа-запросов находится в стадии разработки в рабочей группе CSS, Media Queries Level 4. Эта спецификация внесет некоторые изменения в синтаксис и некоторые новые функции. Не все здесь реализовано в браузерах , но , но интересно посмотреть, что может появиться в ближайшее время, чтобы помочь нам создавать пользовательские интерфейсы, которые хорошо работают с широким спектром устройств и форматов вывода, которые у нас есть.

Определение типа указателя, а не размера экрана

Размер экрана — довольно приблизительный способ решить, на каком типе устройства находится пользователь и как с ним взаимодействовать.Многие устройства с маленьким экраном представляют собой невероятно мощные мини-компьютеры, поэтому пользователь может работать на своем телефоне с внешней клавиатурой и мышью с маленьким размером экрана, но при этом вполне способен нажимать на мелкие элементы. Пользователь также может использовать большой планшет, у него много места на экране, и поэтому он не хочет мобильный макет. Однако они используют свой палец в качестве указывающего устройства, поэтому у них нет возможности навести курсор мыши, а их пальцы не так точны, как указатель мыши, при выборе объектов.

Когда размер экрана был всем, что у нас было, то делать предположения, основанные на нем, было всем, что мы могли сделать, но это меняется. Мы можем искать более точные показатели и использовать эти функции в сочетании при настройке нашего пользовательского интерфейса для разных пользователей. Более полезным индикатором устройства может быть тип указателя, который есть у пользователя, и возможность наведения курсора на элементы на странице. Именно эти функции Interaction Media Features предоставляют медиа-запросам, и приведенные ниже примеры будут работать в текущих версиях Chrome, Safari и Edge.Вы можете проверить «Могу ли я использовать» для получения полного списка поддержки.

В CodePen ниже, который вы можете протестировать с любым поддерживающим браузером на устройствах, которые у вас есть под рукой, я использую сгенерированный контент, чтобы указать, какой тип устройства, по моему мнению, вы используете. Чтобы проверить, какой у вас тип указателя, я использую следующий код:

  @media (указатель: грубый) {
    .which-pointer :: after {
        content: «У вас грубый указатель, вы используете устройство с тачскрином?»;
    }
}

@media (указатель: отлично) {
    .which-pointer :: after {
        content: «У вас точный указатель, вы используете мышь или трекпад?»;
    }
}
  

Чтобы проверить, можете ли вы парить, я тестирую функцию hover :

  @media (hover) {
    .can-i-hover :: after {
        content: «Похоже, ты умеешь парить.»;
    }
}

@media (hover: none) {
    .can-i-hover :: after {
        content: «Я не думаю, что вы можете парить.»;
    }
}
  
Тестирование поддержки указателя и наведения на iPhone

Убедитесь сами в CodePen.

См. Медиа-запросы взаимодействия с пером от Рэйчел Эндрю (@rachelandrew) на CodePen.

См. «Медиа-запросы взаимодействия с пером» от Рэйчел Эндрю (@rachelandrew) на CodePen.

Существует также функция any-pointer и any-hover , которая проверяет возможности любого из указывающих устройств, которые есть в руке у пользователя — в отличие от основного указывающего устройства, проверенного с помощью указателя pointer и hover . . Я бы посоветовал вам проявлять большую осторожность при их использовании, так как если пользователь переключится со своего основного указывающего устройства, это, скорее всего, приведет к неудовлетворительному взаимодействию с пользователем.Спецификация предлагает:

«Создание страницы, основанной на наведении курсора или точном указании только потому, что любое наведение или любой указатель указывают на то, что хотя бы один из доступных механизмов ввода имеет эти возможности, вероятно, приведет к неудовлетворительным результатам. Однако авторы могут использовать эту информацию для принятия решения о стиле и функциональности, которые они хотят предоставить, на основе любых дополнительных указывающих устройств, доступных пользователю ».

Firefox — это браузер, который отстает в реализации функций взаимодействия с мультимедиа, вы можете следить и отмечать здесь ошибку отслеживания, так что, надеюсь, мы скоро увидим их с повсеместной поддержкой.

Пока еще не реализована функция блока переполнения функций качества отображения мультимедиа с возможностью проверки поведения мультимедиа при переполнении содержимого.

Когда контент переполняется, разные СМИ по-разному справляются с этим. Стандартный способ, которым с этим справляется экран компьютера или планшета, — это прокрутка. Некоторые устройства — например, рекламный щит с цифровой рекламой — вообще не могут переполняться. У нас также есть страничные носители, если вы выводите контент на печать.

Следовательно, еще одна полезная вещь, на которую следует обратить внимание при определении того, на каком устройстве отображается ваш контент, — это функция overflow: block . Например, если вы хотите обнаружить какой-либо носитель с разбивкой по страницам, вы можете протестировать его.

  @media (overflow-block: paged) {

}
  

Изменения синтаксиса

Медиа-запросы — в том виде, в каком мы их знаем — могут оказаться довольно многословными; на уровне 4 внесены некоторые изменения в синтаксис, чтобы помочь в этом. Например, мы часто хотим указать диапазон, такой как приведенный ниже Media Query, который ищет ширину от 40em до 59em.

  @media (min-width: 40em) and (max-width: 59em) {

}
  

Мы можем переписать это как диапазон:

  @media (40em  

Во втором примере мы говорим, что ширина должна быть больше или равна 40em , а также меньше или равна 59em ; гораздо менее подробным образом, чем в первом примере с префиксом min- и max- . Вы по-прежнему сможете использовать старый способ ведения дел; его не собираются удалять.Тем не менее, менее многословная альтернатива кажется бонусом.

Медиа-запросы по-прежнему являются полезным инструментом, которым мы располагаем при создании адаптивных макетов. Я видел, как люди перепрыгивают через сетку, пытаясь избежать ее вызова, но нет причин избегать полезных медиа-запросов. Как я надеюсь, я уже продемонстрировал, появятся также новые и полезные функции, которые помогут нам улучшить наши пользовательские интерфейсы для большего числа пользователей. Чтобы узнать больше, вот несколько дополнительных ссылок, статей и презентаций.Некоторые из них я использовал при подготовке этой статьи, другие предназначены для дополнительного полезного чтения.

(il)

Как использовать медиа-запросы в адаптивном веб-дизайне

Фото: Джереми Кейт, Creative Commons

Популярность адаптивного веб-дизайна резко возросла благодаря необходимости создавать сайты, работающие на множестве устройств.

Однако адаптивный дизайн имеет свои собственные проблемы.Проблема медленно загружаемых сайтов теперь хорошо задокументирована. Давайте рассмотрим некоторые приемы, которые используют дизайнеры, чтобы лучше загружать контент и изображения на разные устройства.

Медиа-запросы для вызова стилей

Один из этих приемов — использование медиа-запросов, которые работают для вызова стилей на пользовательское устройство в зависимости от его размеров. В прошлом велись споры о том, являются ли медиазапросы лучшим решением, когда речь идет о мобильных устройствах, и эти споры все еще продолжаются. Тем не менее, группа сообщества по реагированию на проблемы (RICG) и W3C рассмотрели способы реализации запросов элементов, которые, по мнению некоторых, были бы лучшим решением.Почему? Потому что они зависят не от области просмотра, а от контейнера внутри нее. Медиа-запросы — это простой и эффективный способ обслуживания различного контента на различных устройствах, и наиболее часто используемые запросы — это те, которые касаются высоты и ширины области просмотра.

Вызов с использованием внешней таблицы стилей или из таблицы стилей

Как мы описали в бесплатной электронной книге Mobile UI Patterns, медиа-запросы сначала проверяют тип медиа по строке пользовательского агента, а затем проверяют физические атрибуты области просмотра.Это объявление CSS, которое можно вызвать с помощью внешней таблицы стилей или записать непосредственно внутри таблицы стилей.

Например, внешний вызов будет выглядеть так:

И прямой вызов CSS будет выглядеть так:

1 экран @media и (минимальная ширина: 320 пикселей)

2 и (макс. Ширина: 480 пикселей) {

3 / * Вставьте сюда свои стили

4}

Здесь мы видим, что эти объявления CSS называются только для устройств с такими свойствами высоты и ширины.Медиа-запросы не являются модульными, поэтому это может затруднить работу с ними, как обсуждал Ян Сторм Тейлор. Однако другие настаивают на использовании элементарных запросов, как указала Рича Джайн в своей превосходной статье «Помимо медиа-запросов — пора стать элементарными». Но пройдет какое-то время, прежде чем мы увидим их реализацию, если они вообще есть, поэтому на данный момент мы застряли на медиа-запросах и проблемах, связанных с их использованием.

Запросы элементов еще не поддерживаются

Были некоторые разработчики-новаторы, которые придумали обходные пути, например Тайсон Матанич, который придумал элементный запрос «полифил».

Другие обходные пути включают (найдено благодаря Richa Jain):

Элементный запрос похож на медиа-запрос, поскольку он использует CSS при выполнении определенных условий. Однако они основаны на элементах, а не на браузере , который в настоящее время не поддерживается в CSS3. Запросы на элементы набирают обороты, особенно потому, что они дополняют медиа-запросы. Это означает, что в конечном итоге оба могут работать вместе, создавая более модульные и гибкие конструкции.

Начало работы с медиа-запросами

Во-первых, важно понимать разницу между медиа-запросами, основанными на «ширине» и «ширине устройства».Первый описывает ширину поверхности рендеринга мобильного устройства , а второй описывает фактическую ширину экрана устройства.

Фото: Tribehut, Creative Commons

Другими словами, вы будете применять правило только к ширине окна документа, используя медиа-запрос ширины. В то время как с «шириной устройства» вы будете использовать весь экран . Это важное различие. Это потому, что «ширина устройства» не всегда соответствует макету области просмотра и может действительно повлиять на ваш дизайн.См. Более подробное объяснение в статье Райана Риза SitePoint.

Как указывает Райан:

«Для справки, вы должны знать, что iPhone 4 имеет обычное окно просмотра макета экрана 640 × 960. Это означает, что в этом примере ширина устройства iPhone4 составляет 320 × 480. Это так, потому что Apple понимает, что не каждый веб-сайт создается адаптивно (позор им), и пытается угодить всем, имея ширину около 980 пикселей, чтобы обеспечить вид веб-сайта на рабочем столе.Это означает, что при отсутствии метатега области просмотра iPhone4 возьмет ваш веб-сайт, отобразит его так, как если бы он был шириной 980 пикселей, превратит его в дисплей с разрешением 320 пикселей и, как результат, будет уменьшен для пользователя. ”

Однако вы не должны ограничиваться использованием медиа-запросов на основе устройств. Вы можете реализовать медиа-запросы с разрешениями, которые нарушают макет, независимо от размера экрана. Например, в адаптивной платформе Foundation есть медиа-запросы, основанные на трех основных точках останова — малой, средней и большой.Маленький закрывает все экраны. Средний охватывает экраны размером 640 пикселей или шире. Большие покрывают экраны 1024 пикселей или шире.

Присоединяйтесь к лучшим дизайнерам мира, использующим UXPin.

Подпишитесь на бесплатную пробную версию. Попробуйте бесплатно!

Добавление запросов для различных окон просмотра

Как видите, мы добавили запросы для горизонтальных и портретных окон просмотра, а также установили параметры для некоторых распространенных размеров экрана. Около пяти размеров подходят для большинства устройств, но вы можете включать столько, сколько захотите.Вы также можете добавить дополнительные стили в соответствии с тем, как вы хотите, чтобы контент выглядел на каждом устройстве.

Например, если вы хотите, чтобы контент на мобильном устройстве отображался определенным шрифтом или вам нужен другой цвет фона, добавьте следующее под тем местом, где мы отметили / * добавьте сюда свой стиль * /:

1. содержание сайта {

2 семейства шрифтов: Georgia;

3 фон: синий;

4}

Работа с изображениями

Масштабировать изображения для адаптивного дизайна достаточно просто.Однако есть несколько проблем, на которые следует обратить внимание, например, потеря деталей и изображения сжимаются, чтобы поместиться в контейнер, занимая большую часть страницы на небольших устройствах.

Для создания масштабируемых изображений просто добавьте в таблицу стилей следующий код:

1 изображение {

2 макс. Ширина: 100%;

3}

Это уменьшит изображение, чтобы оно поместилось в контейнере, который меньше ширины изображения. Установка max-width на 100% означает, что изображение не будет увеличиваться больше, чем его фактический размер, при вызове для больших окон просмотра.

Однако это может быть проблемой, когда дело доходит до производительности сайта, потому что вы, по сути, доставляете полноразмерное изображение на каждое устройство. Для этого нет одного простого решения, особенно если вы работаете над сайтом, на котором есть устаревшие изображения. Однако Adaptive Images — это плагин, который может оптимизировать ваши изображения в зависимости от размеров экрана и имеет отличную репутацию. А адаптивный фреймворк Foundation также позволяет вам менять изображения местами в зависимости от размеров экрана.

При работе с изображениями вы должны использовать SVG, веб-шрифты, веб-шрифты и CSS везде, где это возможно.Для дальнейшего чтения ознакомьтесь с публикацией Криса Койера о CSS-Tricks и статьей Шерри Александер в Smashing Magazine.

Другие медиа-запросы

Can I Use содержит полный список браузеров и медиа-запросов, которые они поддерживают, а также статистику использования для различных стран по всему миру и их известные проблемы.

Источник изображения: Могу ли я использовать

Вы также можете найти полный список медиа-запросов и узнать, поддерживаются ли они в CSS Media Queries.Также есть область, где вы можете протестировать созданные вами запросы.

Позаботьтесь о производительности

Медиа-запросы используются в адаптивном веб-дизайне, который позволяет просматривать сайт на экранах разных размеров и в разных браузерах. Как мы уже говорили, медиа-запросы не являются модульными, поэтому это может вызвать проблемы с дизайном, которые сложно обойти. В Интернете можно найти огромное количество ресурсов, которые помогут вам в этом, например фрагменты кода и фреймворки.

При работе с медиа-запросами важно понимать производительность и ее влияние на UX и конверсии. Медленная загрузка сайта расстроит пользователей и заставит их отказаться от покупок. И это в конечном итоге будет стоить владельцу кучу денег в виде упущенной выгоды

.

Мобильная революция привела к тому, что мы больше не потерпим ужасного веб-опыта. При разработке адаптивного сайта вам следует подумать об использовании условной загрузки, чтобы уменьшить количество контента, отправляемого на целевое устройство.

Кнопки публикации в соцсетях тоже замедляют работу сайтов, особенно на мобильных устройствах. Всего три кнопки социальных сетей для Facebook, Twitter и G + составляют в общей сложности 19 запросов и занимают 246,7 тыс. Каналов. Имея это в виду, рассмотрите возможность использования веб-шрифтов на своей главной странице для URL-адресов социальных сетей, а не изображений, и ограничьте количество кнопок общего доступа в своих сообщениях в блоге.

В качестве альтернативы вы можете использовать плагины jQuery, чтобы немного ускорить работу кнопок совместного доступа в социальных сетях.

Существует множество онлайн-руководств, которые помогут вам с адаптивным веб-дизайном и медиа-запросами.Мы надеемся, что дали вам отличную отправную точку, чтобы вы могли приступить к работе с медиа-запросами.

Если вы хотите узнать больше о визуальном дизайне интерфейса, ознакомьтесь с нашей бесплатной электронной книгой «Шаблоны мобильного интерфейса». Мы проанализировали 46 наиболее эффективных, но гибких шаблонов дизайна на основе их использования ведущими компаниями, такими как Spotify, Pinterest, Uber, Instagram, Flipboard и многими другими.

Присоединяйтесь к лучшим дизайнерам мира, использующим UXPin.

Подпишитесь на бесплатную пробную версию. Попробуйте бесплатно! Обзор

Media Query (Как сделать) | Адаптивные макеты

[МУЗЫКА] 0:00

К настоящему времени вы, вероятно, уже использовали медиа запросы в нескольких проектах.0:04

Но об адаптивном вебе говорить сложно. дизайн без построения твердой 0:08

понимание медиа-запросов. 0:13

Конечно, медиа-запросы — это правила CSS. которые нам помогают 0:15

включать код CSS только в том случае, если условия соблюдены.0:19

Эти условия называются медиа Особенности. 0:23

А в случае адаптивного веб-дизайна наиболее часто используемая функция мультимедиа 0:26

ширина, а точнее min или минимальная ширина. 0:31

Вы можете не осознавать, что медиа-запросы на самом деле идут с 0:37

многие мультимедийные функции, и эта ширина только один из них.0:41

Перейдем к разработчику Mozilla Сеть, чтобы ознакомиться с документацией по 0:46

некоторые медиа-функции в медиа-запросах. 0:51

Итак, здесь у меня есть документация MDN для 0:55

медиа-запросы, и мы смотрим на раздел под названием медиа-функции.1:00

Итак, помимо ширины, которую мы можем потянуть вверх, просто щелкнув прямо здесь, 1:05

есть несколько других медиа-функций, а также 1:11

они все перечислены здесь слева боковая сторона. 1:14

Теперь большинство из них вам на самом деле не понадобится использовать.1:18

Но один из них, который я хотел бы нарисовать Вашему вниманию есть ориентация. 1:22

Так что некоторые из них полезны в очень конкретные случаи, 1:29

но ориентация очень полезна, когда работа с мобильными устройствами. 1:34

И вы можете определить, действительно ли устройство в альбомной ориентации или 1:40

портретный режим.1:45

Определение ширины — отличное начало, но если пользователь решает просматривать на мобильном устройстве 1:49

в ландшафтном режиме некоторые макеты могут не воспользоваться дополнительной шириной, 1:54

требуется больше прокрутки, чем есть желательно. 2:00

Прокрутка — обычное дело, когда мобильный макет сводится к одному столбцу, но 2:04

тяжелая прокрутка не идеальна в пейзаж.2:08

Для этих уроков я создал несколько примеры, чтобы помочь изолировать эти концепции. 2:13

Я использовал проект инициализатора и изменил его, чтобы начать, 2:18

но если вы хотите проверить инициализатор проекта самостоятельно, 2:23

вы можете найти ссылку в примечаниях связанный с этим видео.2:27

Теперь давайте посмотрим на пример ориентация в рабочих областях. 2:31

Итак, у меня очень простой макет. 2:37

И прежде чем мы посмотрим на код, давайте на самом деле перейдем к предварительному просмотру и 2:41

посмотреть, как это выглядит.2:46

Как я уже сказал, это довольно просто макет. 2:48

У нас здесь есть титул. 2:50

У нас есть несколько вкладок. 2:51

Есть два столбца, и если я прокручу вниз, внизу есть нижний колонтитул.2:53

Теперь я могу изменить размер, и вы заметите что медиа-запросы начинают 2:59

сразу начни и сделай небольшой изменения. 3:03

А потом, когда макет начинает ломаться вниз, 3:07

некоторые более драматические изменения происходят там, где мы перейти к макету с одним столбцом.3:11

А потом, когда мы продолжаем, вкладки больше не работаю, 3:16

они перевернутся в эту вертикаль макет. 3:22

Так что позвольте мне изменить размер и вернемся к наше рабочее место здесь. 3:27

Это довольно простой HTML, ничего страшного уже не должен быть знаком с.3:34

У нас есть div, который является заголовком контейнер и 3:38

тогда у нас есть заголовок внутри этого с h2 и немного навигации. 3:42

А еще у нас есть эта контейнерная область, где есть статья. 3:49

А еще есть отступление, и 3:56

затем, наконец, внизу, у нас есть нижний колонтитул.4:00

Таким образом, разметка довольно проста. 4:04

Давайте быстро взглянем на CSS. 4:07

И здесь у нас есть лишь базовый стиль. 4:09

Мы используем рамку для изменения размера окна для красивого много всего.4:12

Помните, это будет наш мобильный стили 4:18

во-первых, потому что мы в первую очередь пользуемся мобильным телефоном подход. 4:22

А затем, по мере того, как мы продвигаемся к большему размеры, 4:27

вот когда начнутся наши медиа-запросы пнуть.4:30

Итак, во-первых, при небольшом размере мобильного устройства мы идем из этого списка в наш макет с вкладками. 4:33

И затем мы переходим к синглу столбец в макет с несколькими столбцами. 4:41

И, наконец, мы просто делаем еще несколько корректировки для больших размеров экрана.4:46

А внизу у нас просто это быстрое исправление здесь. 4:52

Теперь одна из проблем с этим и одна проблем, которые может исправить ориентация 4:56

это в ландшафтном режиме, мы заканчиваем получить неидеальный макет.5:02

Итак, давайте посмотрим на это на мобильном телефоне. устройство. 5:07

[ЗВУК] Итак, когда я нахожусь в портретном режиме, это выглядит просто отлично. 5:10

Но когда я [ЗВУК] перехожу в пейзаж, 5:14

заголовок занимает довольно много места экрана, 5:17

и это создает ненужную прокрутку.5:22

Итак, давайте посмотрим, сможем ли мы взять один из медиа-запросы, которые у нас уже есть, и 5:26

примените некоторую ориентацию, чтобы поправиться макет в альбомной ориентации. 5:31

Так что конкретно я возьму это медиа-запрос прямо здесь, 5:36

и у нас может быть несколько медиа-запросов просто добавив запятую.5:41

Итак, если этот медиа-запрос верен или второй медиа-запрос, который 5:47

Я собираюсь написать это правда, тогда мы получим этот код применяется. 5:52

Итак, давайте напишем наш второй медиа-запрос здесь. 5:56

Так что скажем только экран.5:59

Так что это макеты экрана, а не что-то как печать. 6:03

А затем воспользуемся логическим оператором и, и мы скажем, 6:08

минимальная ширина около 700 пикселей 6:11

потому что мы хотим попытаться ударить это ландшафтная планировка.6:17

И я здесь на iPhone 6 Plus, но 6:21

разные размеры экрана будут отличаться, так что будьте обязательно поэкспериментируйте с этим. 6:24

И тогда у меня будет еще одно логическое значение оператор там, 6:29

а я скажу и ориентацию, пейзаж.6:34

И в этом случае Workspaces не распознавая эти ключевые слова, 6:39

но это нормально. 6:43

Мы знаем, что они работают в браузере. 6:44

Так что я сохраню это.6:46

А теперь, если мы вернемся к нашему телефону здесь, и у меня это в пейзаже, 6:48

и я обновляю страницу, вы увидите, что мы получить гораздо более идеальный макет и 6:54

лучше подходит для этого большого пейзажа макет. 7:01

Это всего лишь один из способов, которым мы можем воспользоваться более сложных медиа-запросов.7:06

Я добавил ссылку на документацию в примечаниях так 7:11

что вы можете прочитать больше самостоятельно. 7:14

Макет и медиа-запросы — amp.dev

Руководства и руководства по документации

Style & Layout

AMP поддерживает как медиа-запросы , , так и запросы элементов , а также имеет мощный встроенный способ управления макетом отдельных элементов.Макет Атрибут значительно упрощает работу и создание полностью адаптивного дизайна, чем если бы вы использовали только CSS.

Адаптивные изображения — это просто

Создайте адаптивные изображения, указав ширину и высоту , установив для макета значение отзывчивый , и индикация с помощью srcset какой ресурс изображения использовать в зависимости от размера экрана:

 

 

Этот элемент amp-img автоматически соответствует ширине элемента контейнера, и его высота автоматически устанавливается в соответствии с соотношением сторон определяется заданной шириной и высотой. Попробуйте, изменив размер этого окна браузера:

Атрибут макета

Атрибут макета дает вам простой, для каждого элемента контроль над тем, как ваш элемент должен отображаться на экране. Многие из этих вещей возможны с помощью чистого CSS, но они намного сложнее и требуют множества хаков.Вместо этого используйте атрибут layout .

Поддерживаемые значения для макета

атрибут

В атрибуте макета можно использовать следующие значения:

Тип макета Требуется ширина / высота
Поведение
nodisplay Нет Элемент не отображается. Этот макет можно применить к каждому элементу AMP. Компонент занимает нулевое пространство на экране, как если бы его стиль отображения отсутствовал.Предполагается, что элемент может отображаться при действии пользователя, например, amp-lightbox .
фиксированный Да Элемент имеет фиксированную ширину и высоту без поддержки реакции. Единственным исключением являются элементы amp-pixel и amp-audio .
отзывчивый Да Размер элемента соответствует ширине его элемента-контейнера и автоматически изменяет его высоту в соответствии с соотношением сторон, заданным атрибутами ширины и высоты.Этот макет очень хорошо работает с большинством элементов AMP, включая amp-img , amp-video . Доступное пространство зависит от родительского элемента и также может быть настроено с помощью max-width CSS.

Примечание : элементы с "layout = responsive" не имеют собственного размера. Размер элемента определяется его контейнерным элементом. Чтобы обеспечить отображение элемента AMP, необходимо указать ширину и высоту содержащего его элемента. Не указывайте "display: table" для содержащего элемента, поскольку это переопределяет отображение элемента AMP, делая элемент AMP невидимым.

фиксированная высота Только высота Элемент занимает доступное ему пространство, но сохраняет неизменной высоту. Этот макет хорошо подходит для таких элементов, как amp-carousel , которые включают контент, расположенный горизонтально. Атрибут width не должен присутствовать или должен быть равен auto .
fill Элемент занимает доступное ему пространство по ширине и высоте.Другими словами, макет элемента заливки соответствует его родительскому элементу. Чтобы элемент заполнил свой родительский контейнер, убедитесь, что в родительском контейнере указано «position: relative» или «position: absolute».
контейнер Нет Элемент позволяет его дочерним элементам определять его размер, что очень похоже на обычный HTML div . Предполагается, что компонент не имеет определенного макета, а действует только как контейнер. Его дочерние элементы отображаются немедленно.
flex-item No Элемент и другие элементы в его родительском элементе занимают оставшееся пространство родительского контейнера, когда родительский контейнер является гибким (т.е.е., дисплей : шлейф ). Размер элемента определяется родительским элементом и количеством других элементов внутри родительского элемента в соответствии с макетом CSS display: flex .
intrinsic Да Элемент занимает доступное ему пространство и автоматически изменяет его высоту до соотношения сторон, заданного атрибутами width и height до тех пор, пока не достигнет естественного размера элемента или достигает ограничения CSS (например,г., максимальная ширина). Атрибуты ширины и высоты должны присутствовать. Этот макет очень хорошо работает для большинства элементов AMP, включая amp-img , amp-carousel и т. Д. Доступное пространство зависит от родительского элемента и также может быть настроено с помощью CSS max-width . Этот макет отличается от адаптивного наличием собственной высоты и ширины. Это наиболее очевидно внутри плавающего элемента, где адаптивный макет будет отображать 0x0, а внутренний макет будет увеличиваться до меньшего из своего естественного размера или любого ограничения CSS.

Что делать, если ширина и высота не определены?

В некоторых случаях, если ширина или высота не указаны, среда выполнения AMP может использовать следующие значения по умолчанию:

  • amp-pixel : ширина и высота по умолчанию равны 0.
  • amp-audio : ширина и высота по умолчанию определяются браузером.

Что делать, если не указан атрибут

макета ?

Если атрибут макета не указан, AMP пытается предположить или угадать соответствующее значение:

9000 атрибуты присутствуют вместе с размеров атрибут
Правило Предполагаемый макет
высота присутствует и ширина отсутствует или равна авто фиксированная высота
отзывчивый
Оба ширина и высота присутствуют атрибутов фиксированный
ширина09 и не высота 91 контейнер

Медиа-запросы CSS

Используйте @media для управления внешним видом и поведением макета страницы, как на любом другом веб-сайте.Когда окно браузера меняет размер или ориентацию, медиа-запросы повторно оцениваются, а элементы скрываются и отображаются по новым результатам.

Элемент медиа-запросов

Еще одна дополнительная функция для адаптивного дизайна, доступная в AMP, - это атрибут media . Этот атрибут можно использовать для каждого элемента AMP; он работает аналогично медиа-запросам в вашей глобальной таблице стилей, но влияет только на конкретный элемент на одной странице.

Например, у нас есть 2 изображения с взаимоисключающими медиа-запросами.

 

 

В зависимости от ширины экрана один или другой будет извлечен и визуализирован.

 

 
.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *