Мобильная веб-страница с фиксированной шириной для поддержки нескольких устройств - PullRequest
0 голосов
/ 21 февраля 2012

Я столкнулся с проблемой на более поздней стадии проекта для мобильной страницы.Клиент попросил поддержать как iPhone, так и различные мобильные устройства Android вместо поддержки только iPhone.

Мобильная страница была написана на XHTML с шириной html-страницы 640 пикселей, а ее элементы имеют ширину, например, 500 пикселей,% 20 ... поэтому страница отлично выглядит в сафари iPhone со следующим окном просмотра, но выглядит ужасно вбраузеры других устройств.

<meta name="viewport" content="user-scalable=no, width=device-width, target-densityDpi=device-dpi,initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5;">

Я пытался решить проблему, играя с окном просмотра, но долго боролся.Моя идея о начальном масштабе, может кто-нибудь предложить способ динамического присвоения этого значения = device-width / 640?

Спасибо

1 Ответ

2 голосов
/ 09 сентября 2012

Вы должны просто использовать:

<meta name="viewport" content="width=320">

Почему 320?Это связано с тем, что хотя экран iPhone 4 в портретной ориентации имеет ширину 640 пикселей, он представляет собой «сетчатый» дисплей с вдвое более высоким эффективным разрешением, чем на экранах настольных компьютеров.Следовательно, он имеет значение window.devicePixelRatio, равное 2, что означает, что его ширина устройства составляет всего 640/2 = 320 CSS px, то есть каждый CSS px занимает 2x2 квадрата пикселей физического устройства (см. эту статью о QuirksMode для более подробной информации).

Это 2-кратное масштабирование очень полезно, потому что, например, вы можете установить размер шрифта: 14 пикселей, и воспринимаемый размер этого текста будет таким же, как если бы вы просматривали текст размером 14 пикселей наiPhone 3G (поскольку он будет отображаться с использованием 28 пикселей физического устройства на iPhone 4, что компенсирует более высокое разрешение).Если вместо этого текст с размером шрифта: 14px будет отображаться с использованием только 14 пикселей физического устройства, он будет выглядеть крошечным на iPhone 4 (вдвое меньше, чем на iPhone 3G).

Теперь естьСледствие этого: ваш сайт должен быть рассчитан на ширину 320 пикселей, а не 640 пикселей.Но это уже было правдой, поскольку iOS никогда не поддерживала target-densityDpi = device-dpi, поэтому, помещая width = device-width, вы фактически все равно помещали width = 320.

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

Однако, пожалуйста, учтите этомера ограничения пробела: было бы намного лучше сохранить width = device-width и изменить дизайн вашего сайта так, чтобы он был гибким вместо фиксированной ширины (например, установите ширину: 100% для ваших элементов div и изображений вместо ширины: 320px).Для получения дополнительной информации см. http://www.html5rocks.com/en/mobile/responsivedesign/

Наконец, вы можете оставить термин "user-scalable = no", если вы действительно не хотите, чтобы пользователь мог увеличивать и уменьшать масштаб, но для доступностипо этой причине часто лучше не указывать это, если только вы не разрабатываете что-то вроде mobile maps.google.com, где вы вручную обрабатываете жесты с масштабированием и не хотите, чтобы браузер вмешивался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...