Должен ли я использовать max-device-width или max-width?

С помощью мультимедийных запросов CSS вы можете использовать max-device-width для таргетинга на ширину устройства (например, iPhone или Android-устройство) и/или max-width, который нацелен на ширину страницы.

Если вы используете max-device-width, при изменении размера окна браузера на рабочем столе CSS не изменится, поскольку ваш рабочий стол не изменит размер.

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

Ориентация на определенные браузеры (и устройства?) теперь устарела, и вы должны быть немного более неактуальны с тем, что вы нацеливаете. Это относится также к запросам на средства массовой информации?

Почему вы должны ориентироваться друг на друга? Какой из них рекомендуется?

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

@media only screen and (min-device-width: 320px) and (max-device-width: 480px) and (min-device-height: 480px) and (max-device-height: 640px) {  
    /* Change a menu to fit the screen better, etc... */
}

Я использую как max-device-width, так и max-width.

Ответ 1

TL; DR

Если вы создаете min-device-width веб-сайт, используйте min-width/max-width в своих медиа-запросах, а не min-device-width/max-device-width, чтобы нацеливать более широкий диапазон размеров экрана.

Согласно черновому device-width спецификации 2018 Media Queries Level 4, device-width носителя device-width устарела. Он будет сохранен для обратной совместимости, но его следует избегать.

8. Приложение A: Устаревшие медиа-функции

Чтобы запросить размер области просмотра (или поля страницы на носителе страницы), следует использовать медиа-свойства width, height и aspect-ratio, а не device-width device-height device-aspect-ratio, которые относятся к физическому размеру устройства независимо от того, сколько места доступно для выкладываемого документа. device-* функции device-* также иногда используются в качестве прокси для обнаружения мобильных устройств. Вместо этого авторам следует использовать мультимедийные функции, которые лучше отражают тот аспект устройства, к которому они пытаются применить стиль.

В качестве примечания не забудьте указать метатег viewport в разделе <head> вашего документа:

<meta name="viewport" content="width=device-width, initial-scale=1">

объяснение

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

К счастью, вы можете указать метатег области просмотра в разделе <head> вашего документа, чтобы контролировать ширину и масштабирование области просмотра браузера. Если этот тег имеет значение content width=device-width, width=device-width экрана будет соответствовать пикселям, не зависящим от устройства, и будет гарантировать, что все различные устройства будут масштабироваться и вести себя согласованно.

<meta name="viewport" content="width=device-width, initial-scale=1">

С точки зрения медиа-запросов, вы, вероятно, захотите использовать max-width а не max-device-width, поскольку max-width будет нацеливаться на область просмотра (текущее окно браузера), тогда как max-device-width будет нацеливаться на фактическое устройство. полный размер экрана/разрешение.

Другими словами, если вы используете max-device-width, вы не увидите различных max-device-width, применяемых при изменении размера вашего настольного браузера, поскольку в отличие от max-width учитывается только фактический полноэкранный размер устройства; не текущий размер окна браузера.

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

Начиная с 2018 года, в последней версии спецификации device-width фактически отсутствует device-width, поэтому его следует избегать.

Кроме того, в этой статье о разработчиках Google настоятельно не рекомендуется использовать max-device-width:

Разработчики Google - Веб-основы - Отзывчивые медиа-запросы CSS

Также возможно создавать запросы на основе *-device-width; хотя эта практика настоятельно не рекомендуется.

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

Кроме того, использование *-device-width может препятствовать адаптации контента на настольных компьютерах или других устройствах, которые позволяют изменять размеры окон, поскольку запрос основан на фактическом размере устройства, а не на размере окна браузера.

Дальнейшее чтение:

Ответ 2

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

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

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

Я лично использую min/max-device-width, потому что предпочитаю следовать конвенциям на рабочем столе, которые имеют десятилетия приоритета. Не все документы, которые вы открываете в Интернете, будут вести себя таким образом на рабочем столе, а также другие типы документов или приложений, которые вы загружаете на свой рабочий стол. Страницы, разработанные до доминирования мобильных устройств, так же как MS Word, Photoshop и т.д., Удерживают свои позиции прокрутки и не меняют их макеты, позволяя пользователям отслеживать содержимое в потоке страницы при выполнении несвязанной задачи управления окнами.

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

Ответ 3

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

Для IOS это кажется простым, по крайней мере, с Safari. Это, по-видимому, один отдельный ответ на ширину устройства, не зависящий от ориентации. Кроме того, ширина устройства указывается только для более короткой стороны устройства. Я проверил это на iPhone 4S и iPad. Они ответили соответственно 320 и 768 независимо от того, какую ориентацию.

Для Android это более непредсказуемо. Я протестировал шесть браузеров на Huawei Ascend Y330 (браузер по умолчанию для Android, Chrome, Opera, Firefox, Firefox Beta, Dolphin). Ответ зависит от типа браузера и ориентации.

Я тестировал на странице с запросом (max-device-width: *** px) и выяснял, какое значение px необходимо заполнить, чтобы получить запрос в истинном состоянии. В зависимости от типа и ориентации браузера необходимы четыре разных значения (320, 480, 534, 800). Это делает невозможным использование ширины устройства.

Ответ 4

Избегайте использования device-width, потому что оно устарело.

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