Чи слід використовувати max-device-width або max-width?


82

За допомогою медіа-запитів CSS ви можете max-device-widthнацілювати ширину пристрою (наприклад, iPhone або Android) та / або a, 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.


2
ширина пристрою тепер застаріла developer.mozilla.org/en-US/docs/Web/CSS/@media/device-width
Yukulélé

Відповіді:


113

TL; DR

Якщо ви створюєте адаптивний веб-сайт, використовуйте min-width/ max-widthу своїх медіа-запитах, а не min-device-width/ max-device-widthдля того, щоб націлити ширший діапазон розмірів екрану.

Відповідно до проекту специфікації медіа-запитів рівня 4 за 2018 рік , device-widthфункція медіа застаріла . Він буде зберігатися для зворотної сумісності, але його слід уникати.

8. Додаток А: Застарілі функції медіа

Для запиту щодо розміру області перегляду (або вікна сторінки на носії сторінки) слід використовувати функції width, heightа також aspect-ratioносій, а не device-width, device-heightі device-aspect-ratio, які стосуються фізичного розміру пристрою, незалежно від того, скільки місця доступно для документ, що викладається. В device-*особливості ЗМІ також іноді використовується в якості проксі - сервера для виявлення мобільних пристроїв. Натомість авторам слід використовувати медіа-функції, які краще відображають аспект пристрою, який вони намагаються оформити.

Як допоміжну примітку, не забудьте вказати метатег області перегляду в <head>розділі вашого документа:

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

Пояснення

Через всі різні можливі роздільну здатність екрану та щільність пікселів, які може мати певний пристрій, піксель не є пікселем, оскільки слід враховувати декілька речей (масштабування, щільність пікселів, роздільна здатність та розмір екрану, орієнтація пристрою, співвідношення сторін тощо). ..). У цьому випадку піксель насправді називається "оптичним еталонним блоком", а не фізичним апаратним пікселем.

На щастя, ви можете вказати мета-тег області перегляду у <head>розділі вашого документа, щоб контролювати ширину та масштабування області перегляду браузера. Якщо цей тег має contentзначення 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-width, враховується лише фактичний повноекранний розмір пристрою; не поточний розмір вікна браузера.

Це робить величезну різницю, якщо ви намагаєтеся створити адаптивний макет, оскільки сайт не реагує на зміну розміру браузера. Крім того, якщо ви використовуєте max-device-widthмедіа-запити, які ви використовуєте для націлювання на пристрої з меншими екранами, це не застосовуватиметься до робочих столів навіть при зменшенні розміру вікна браузера, щоб він відповідав зазначеному меншому розміру екрана.

Станом на 2018 рік, останній проект специфікації медіа-запиту фактично застарів device-widthмедіа-функцію, тому її слід уникати.

Крім того, ця стаття про розробників Google настійно не рекомендує використовувати max-device-width:

Розробники Google - Основи Інтернету - Адаптивні CSS-медіа-запити

Також можна створювати запити на основі *-device-width; хоча така практика настійно не рекомендується .

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

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

Подальше читання:


2
Погодьтеся з усім своїм висловом, але забувши про зворотну сумісність, яка не буде актуальною через кілька років. Чому сайт для настільних комп'ютерів повинен працювати по-іншому, оскільки зараз у нас мобільні телефони?
Джон Магнолія

2
Я просто не думаю, що мобільний сайт ніколи не повинен відображатися на робочому столі. Ви повинні мати можливість змінити розмір браузера на будь-яку ширину та використовувати горизонтальну смугу прокрутки. Скажімо, ви хочете порівняти розділ з 2 сайтів, але приховати бічну панель, ви відкриєте в 2 вікнах і зміните розмір поруч
Джон Магнолія

3
Я погоджуюсь з Джоном М, Google помиляється, я особисто знайшов їхню `` документацію '', що відповідає дизайну, де-небудь з найгірших примхливих речей, враховуючи вірогідність, лише тому, що діти, які її пишуть, працюють у Google. Спочатку я підтримав це, але, на мою думку, відповідь неправильна, просто тому, що все більше сайтів руйнують їх досвід користування робочим столом, абсолютно необов’язково, щоб вони відповідали одному розміру, що підходить для всіх адаптивних фреймворків css (зроблено лише для того, щоб скоротити час розробки в моєму думка), не означає, що вам доведеться зіпсувати досвід користування робочим столом. Ми цього не робимо і збільшили конверсії в 10 разів.
Lizardx

"Якщо цей тег має значення вмісту width=device-width, ширина екрана буде відповідати незалежним пікселям пристрою." І якщо ви переглядаєте на пристрої iOS, замість цього dpsвін відповідатиме, що? Очки iOS? (До речі, велике спасибі за цей пост!)
in_flight

Відповідь трохи застаріла. У цьому немає нічого поганого, max-device-widthі важливо, якщо ви хочете використовувати його в середовищі вікна перегляду, що змінюється (робочий стіл). min-device-widthвсе ще погано.
ShortFuse

6

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

Для 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) залежно від типу браузера та орієнтації. Це робить ширину пристрою непридатною.


1
ширина пристрою - це єдиний надійний спосіб дізнатись, яким пристроєм користується користувач, щоб ви могли відповідно налаштувати макет. Коли ви налаштовуєте макет на основі пікселів у вікні перегляду, ви отримуєте мобільний дизайн на деяких робочих столах лише тому, що користувач збільшував масштаб. Це часто призводить до протилежного того, що хотів користувач (це лише невелике збільшення)
Alice Wonder

Ви повинні подавати звіти про помилки в мобільні браузери, які не повідомляють точну ширину пристрою. У багатьох випадках я виявив, що альтернативні браузери були встановлені за замовчуванням, щоб робити вигляд, що вони настільний браузер, і використовують 1 піксель пристрою на CSS-піксель - і це, мабуть, проблема, з якою ви стикалися.
Alice Wonder

5

Якщо ви використовуєте максимальну ширину, при зміні розміру вікна веб-переглядача на робочому столі вам можуть показати стилі, орієнтовані на мобільні пристрої, такі як зручні для дотику елементи та меню тощо.

Для мене шокує, що, здається, поширеною є думка, що це бажано. Я не з’ясував, чи дизайн рідини / рідини до мобільних пристроїв вважався поганим з неправильних чи правильних причин. Мені здається, що це просто вишуканіша версія рідинного макету, але та, яку дизайнери чомусь сприймають.

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

Я особисто використовую мінімальну / максимальну ширину пристрою, тому що я віддаю перевагу дотримуватися умов робочого столу, що мають десятиліття переваги. Не всі документи, які ви відкриваєте в Інтернеті, будуть поводитися так на робочому столі, як і інші типи документів або програм, які ви завантажуєте на робочий стіл. Сторінки, розроблені до домінування мобільних пристроїв, так само, як MS Word, Photoshop тощо, утримують свої позиції прокрутки і не змінюють свої макети, що дозволяє користувачам відстежувати вміст у потоці сторінок під час виконання не пов'язаних завдань управління вікнами.

Зазвичай я використовую 3 точки зупинку: одну для телефонів, одну для планшетів та одну для настільних комп'ютерів. Робочий стіл і, принаймні, принаймні альбомний портрет є фіксованими, а портрет планшета та нижче - рідким. Ця комбінація адаптивного та чуйного дозволяє робочому столу поводитися як сайт на настільному комп'ютері, не даючи мені розміщувати 10-ти окремих макетів мобільних пристроїв фіксованої ширини. Текст не переформулюється на мобільних пристроях, оскільки неможливо змінити розмір області перегляду.


2
Є кілька мобільних телефонів, де можна змінити розмір області перегляду - наприклад, Windows дозволяє "прив'язувати" декілька програм на екран, а деякі телефони Android мають підтримку вікон для перегляду двох програм одночасно. Об'єктивно я не розумію, чому ви не хотіли б макет у стилі планшета на меншому екранованому робочому столі, але суб'єктивно це залежить від макета.
Позначте

2
Я також використовував min / max-device-width, але потім, на мій жах, клієнт встановив hotjar, який створює невеликі відеозаписи взаємодії користувача з вашим сайтом, і я зрозумів, що новий андроїд 6 samsung galaxy 6 обробляє кількість пікселів хв / max-device-width як фактичні пікселі екрана, а не пікселі css, що, звичайно, змусило сторінку вийти з екрану. У нашому випадку трапилось так, що користувачі отримували з цими екранами щільності 4х пікселів суміш мобільного та настільного CSS. Особисто я не вірю, що responsive має місце на добре зробленому дисплеї робочого столу, погано для користувачів. Тож будь обережний.
Lizardx

2
Поле, це вимагало деяких досліджень, щоб з’ясувати, що відбувається. Відповідь Джоша, на мій погляд, неправильна, як і відповідь Google. Думка про те, що настільні комп'ютери повинні реагувати, - це просто примха, яку підживлюють такі групи, як google, і різний розмір, який підходить для всіх фреймворків css. Наше видання вийшло із поганого програмування hotjar, точка. Мої точки запуску в основному розглядають будь-який великий екранований пристрій як робочий стіл, з декількома налаштуваннями, а потім опускаються туди, де порт перегляду буде лише мобільним пристроєм. Для користувачів, які шукають ясності, я вважав би відповідь Павла правильною, а чуйні відповіді, спричинені модою, неправильними.
Lizardx

1
FYI - станом на 2018 рік *-device-widthфункція медіа фактично застаріла в останньому проекті специфікації медіа-запиту - drafts.csswg.org/mediaqueries-4/#mf-deprecated
Джош Крозьє

Це стара відповідь, але навіть у 2014 році я б з цим категорично не погодився. Типографських помилок, на які посилаються та „зіткнення елементів”, настільки легко уникнути, створивши звичку слідувати передовій практиці. Роздільна здатність екрану стає шаленою і справжньою, масштабований, адаптивний дизайн буде лише важливішим, оскільки час триває, тоді як фіксовані сайти стануть лише недоступнішими.
маленький крихітний чоловічок
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.