что такое соотношение пикселей устройства?


170

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

@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (-o-device-pixel-ratio: 3/2), 
only screen and (min-device-pixel-ratio: 1.5) {

    //high resolution images go here

}

Ответы:


161

Короткий ответ

Соотношение пикселей устройства - это соотношение между физическими и логическими пикселями. Например, iPhone 4 и iPhone 4S сообщают о соотношении пикселей устройства 2, потому что физическое линейное разрешение вдвое превышает логическое линейное разрешение.

  • Физическое разрешение: 960 х 640
  • Логическое разрешение: 480 х 320

Формула:

linres_p / linres_l

Куда:

linres_pявляется физическим линейным разрешением

и:

linres_lэто логическое линейное разрешение

Другие устройства сообщают о различном соотношении пикселей устройства, включая нецелые. Например, Nokia Lumia 1020 сообщает 1.6667, Samsumg Galaxy S4 сообщает 3, а Apple iPhone 6 Plus сообщает 2.46 (источник: dpilove ) . Но это ничего не меняет в принципе, так как вы никогда не должны разрабатывать для какого-то одного конкретного устройства.

обсуждение

CSS «пиксель» даже не определен как «один элемент изображения на экране какого - то», а скорее в качестве нелинейного углового измерения от 0,0213 °угла обзора, который составляет примерно 1/96дюйм на расстоянии вытянутой руки. Источник: CSS Абсолютные Длины

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

Если вы застряли с растровыми изображениями, чтобы приспособиться к множеству различных соотношений пикселей устройства, вы должны использовать CSS Media Queries для предоставления разных наборов ресурсов для разных групп устройств. Объедините это с хорошими трюками, такими как background-size: coverили явно установите background-sizeпроцентные значения.

пример

#element { background-image: url('lores.png'); }

@media only screen and (min-device-pixel-ratio: 2) {
    #element { background-image: url('hires.png'); }
}

@media only screen and (min-device-pixel-ratio: 3) {
    #element { background-image: url('superhires.png'); }
}

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

Чехол для векторной графики

По мере того, как появляется все больше и больше типов устройств, становится все сложнее предоставить всем им адекватные растровые ресурсы. В CSS медийные запросы в настоящее время являются единственным способом, а в HTML5 элемент изображения позволяет вам использовать разные источники для разных медиа-запросов, но поддержка все еще не на 100%, так как большинству веб-разработчиков все еще приходится поддерживать IE11 еще некоторое время ( источник: caniuse ) .

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


1
спасибо, так что, если я сделаю CSS-файл для iphone 4 и задаю размеры CSS страницы 480 x 320, и width=device-widthя растяну его на весь экран?
Ильо

1
Именно. И если вы используете изображения с высоким разрешением для background-image, вы можете объединить его с -webkit-background-size:50%, потому что в противном случае размер изображения будет соответствовать количеству логических пикселей. w3.org/TR/2002/WD-css3-background-20020802/#background-size
Андерс Торнблад

2
Ты не можешь Вам необходимо расположить элементы в логических пикселях, использовать изображения с более высоким разрешением и background-sizeхитрость для оптимального использования дисплея.
Андерс Торнблад

2
Я понятия не имею о случае Android. Возможно, у разных производителей разные представления о логических и физических пикселях ... Попробуйте сами на паре сотен различных устройств ... Или просто предположите, что значения, сообщаемые устройством, верны. Не проектируйте для определенных устройств, но проектируйте для диапазонов значений, используя медиа-запросы!
Андерс Торнблад

2
@atornblad Я думаю, что это должно быть "между физическими и логическими пикселями"
Илья Бузюк

159

Соотношение пикселей устройства == Соотношение пикселей CSS

В мире веб-разработок соотношение пикселей устройства (также называемое CSS Pixel Ratio) определяет то, как разрешение экрана устройства интерпретируется CSS.

CSS браузера рассчитывает логическое (или интерпретированное) разрешение устройства по формуле:

формула

Например:

Apple iPhone 6s

  • Фактическое разрешение: 750 x 1334
  • Соотношение пикселей в CSS: 2
  • Логическое разрешение:

формула

При просмотре веб-страницы CSS будет думать, что устройство имеет экран с разрешением 375x667, а Media Queries будет отвечать так, как если бы экран был 375x667 . Но визуализированные элементы на экране будут в два раза четче, чем реальный экран 375x667, потому что физических пикселей на физическом экране в два раза больше.

Некоторые другие примеры:

Самсунг гэлакси с4

  • Фактическое разрешение: 1080 х 1920
  • Соотношение пикселей CSS: 3
  • Логическое разрешение:

формула

айфон 5с

  • Фактическое разрешение: 640 x 1136
  • Соотношение пикселей в CSS: 2
  • Логическое разрешение:

формула

Почему существует Пиксельное соотношение устройств?

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

Типичный полноэкранный настольный монитор составляет примерно 24 "при разрешении 1920x1080. Представьте, что этот монитор был уменьшен до 5", но имел то же разрешение. Просмотр вещей на экране был бы невозможен, потому что они были бы такими маленькими. Но производители выпускают экраны телефонов с разрешением 1920x1080 постоянно.

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

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

http://bjango.com/articles/min-device-pixel-ratio/


Статья в Википедии была удалена. :-( Доступна ли эта информация где-нибудь еще?
Саймон Ист

1
Таким образом, изображения растягиваются, чтобы соответствовать высоким точкам на дюйм или физическим пикселям. Скажем, изображение имеет размер 300 пикселей, логический / CSS-пиксель тоже равен 300, но физический пиксель равен 600, тогда установка ширины изображения будет означать, что изображение будет растянуто. Я также слышал, что иногда изображения выглядят меньше при высоком разрешении, почему?
Мухаммед Умер

2
@MuhammadUmer В вашем примере изображение размером 300px width: 100%будет иметь полную ширину экрана. Это не будет растягиваться. Экран «думает», что это дисплей с разрешением 300 пикселей. Изображения отображаются в соответствии с логическим / CSS разрешением. Теперь, в вашем примере, вы также можете использовать изображение размером 600 пикселей. Это будет полная ширина логического дисплея в 300 пикселей, но, поскольку ваш дисплей имеет исходные 600 пикселей, изображение будет выглядеть в два раза чище, чем исходное изображение в 300 пикселей. Изображение большего размера, но выглядит лучше, поскольку на дисплее есть все лишние пиксели. Это идея «Retina Displays».
Джейк Уилсон

@JakeWilson: это новая тема для меня, и я не до конца ее понимаю. В примере соотношение пикселей CSS = 2. Ширина изображения составляет 300 физических пикселей, в CSS мы установили его на 100%, поэтому он будет иметь ширину 300 CSS-пикселей. Поскольку отношение CSS px равно 2, оно станет 600 физических пикселей в ширину, и его ширина будет точно соответствовать ширине дисплея. Но почему же он не растягивается, если его исходная ширина составляет 300 физических пикселей, а теперь - 600 физических пикселей? Насколько я понимаю, его качество ниже, потому что он был физически растянут от 300 до 600 пикселей. Не могли бы вы подробнее остановиться на этом, пожалуйста?
Питер

1
@ Anuj Я не знаю, и это не имеет значения, как это определено в аппаратном / программном обеспечении. Один рассчитывается от другого, в любом случае вы его обрезаете.
Джейк Уилсон

9

https://developer.mozilla.org/en/CSS/Media_queries#-moz-device-pixel-ratio

-moz-device-pixel-ratio
Предоставляет количество пикселей устройства на пиксель CSS.

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


4
как узнать, использует ли устройство вообще измерение виртуального пикселя и что это такое? и как я могу использовать пиксели устройства в измерениях CSS, а не виртуальные?
Ильо

к сожалению, вы должны гуглить или тестировать на реальном устройстве :(
netalex

9

Статья Бориса Смуса Изображения с высоким разрешением и переменной плотностью пикселей разрешением дает более точное определение соотношения пикселей устройства: количество пикселей устройства на пиксель CSS является хорошим приближением, но не всей историей.

Обратите внимание, что вы можете получить DPR, используемый устройством с window.devicePixelRatio.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.