2015-08-20 3 views
11

Информация для уточнения терминологии от here.Доступ к аппаратным пикселям на мобильных устройствах

Аппаратный пиксель: Физический пиксель на дисплее. Например, iPhone 5 имеет экран с 640 горизонтальными аппаратными пикселями.

Устройство-независимый пиксель (провал): масштабирование пикселей устройства, чтобы соответствовать единообразного опорного пикселя на нормальном расстоянии для просмотра, которое должно быть примерно такого же размера, на всех устройствах. IPhone 5 - 320 провалов широкий.

CSS-пиксель: Единица, используемая для макета страницы, контролируемого окном просмотра. Размеры пикселей в стилях, таких как ширина: 100 пикселей, указаны в CSS пикселей. Отношение пикселей CSS к независимым от устройства пикселям является масштабным коэффициентом страницы или масштабированием.

Есть Есть ли способ, чтобы установить связь между Hardware пиксельной и CSS пикселя как 1: 1.

Я имею в виду, если я хочу установить мой div 's width to 100px, это будет ровно 100 аппаратных пикселей даже на дисплеях Retina.

+1

Почему именно вы хотите это сделать, а не просто использовать стандартные медиа-запросы и относительные размеры для ваших элементов? Это может быть возможно с помощью обнюхивания Device/UA или [Запросы мультимедийных сообщений DPI] (https://css-tricks.com/snippets/css/retina-display-media-query/) и использования этой информации для настройки [viewport, масштаб и/или масштабирование] (http://blog.teamtreehouse.com/thinking-ahead-css-device-adaptation-with-viewport) страницы. Однако, вы должны [проверить этот ответ на аналогичный вопрос] (http://stackoverflow.com/a/21767407/675110) и прекратить это безумие сейчас. – IMI

+0

Это для веб-приложения или собственного приложения? – IMI

+0

@IMI Для веб-сайтов. – Mark

ответ

11

Шкала масштаба экрана (Retina, в настоящее время либо 2x, либо 3x) отличается от масштабного коэффициента страницы. При том же масштабном коэффициенте страницы 1px будет представлять собой пиксели 1x1, 2x2 или 3x3, в зависимости от дисплея (Retina).

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

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

Вы можете установить головку <meta name="viewport" content="width=device-width-times-2, initial-scale=0.5">, но ваш контент будет гораздо менее читабельным и резким.

Если вы хотите, чтобы сделать это на элементной базе, вы можете установить

-webkit-transform-style: preserve-3d; 
-webkit-transform: scale3d(0.5,0.5,0.5); 

3d необходим, как 2d преобразование может привести к проблемам с сенсорной площадью не совпадая с элементом местоположение в представлении.

+0

Чтобы сделать это, OP, вероятно, потребуется использовать [Window.devicePixelRatio] (http://caniuse.com/#feat=devicepixelratio), чтобы рассчитать правильную ширину и масштаб. – IMI

+0

Вопрос: ** Доступ к аппаратным пикселям на мобильных устройствах **. Извините, но это не ответ на мой вопрос. – Mark

+1

@Mark - я считаю, что «доступ к аппаратным пикселям на мобильных устройствах», вероятно, читается как заголовок большинством и «есть ли какой-либо способ установить соотношение между пикселем аппаратного обеспечения и пикселем CSS как 1: 1», считаются вашими действительными вопрос. Вы хотите установить отношения или Доступ? – IMI

5

Я думаю, вы можете использовать device-width с min-device-width и max-device-width свойствами для доступа к аппаратным пикселям. device-width - описывает ширину устройства вывода. Например:

@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { ... } 

Here вы можете найти карту стандартных устройств и медиа-запросов для них.

Кроме того, вы можете запросы средств массовой информации настройки для различных устройств DPI вы можете использовать min-resolution недвижимости в СМИ по этому пути:

@media print and (min-resolution: 300dpi) { ... } 

Для замены старого min-device-pixel-ratio синтаксиса используйте:

@media screen and (min-resolution: 2dppx) { ... } 

Здесь source.

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

1

Если вы хотите точного отношения я не думаю, что вы можете сделать это в CSS. Но вы можете это сделать в JS:

Чтобы получить ширину 100px широкий DIV:

var myDivWidth = 100/window.devicePixelRatio; 

Так на iPhone 5 с pixelRatio 2,0 вы будете иметь 50px широкий Див более чем в 100 физических пикселей.

Вы также можете использовать css transform:scale(0.5), если хотите сжать содержимое div.

Смежные вопросы