Понимание ориентации, соотношения сторон и пикселей CSS на мобильных устройствах - PullRequest
5 голосов
/ 07 марта 2019

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

Я работаю со смартфоном Android с аппаратными пиксельными размерами 720 x 1280 пикселей.

Портретный режим В портретном режиме, когда я использую JavaScript для получения document.documentElement.clientWidth и ~ высоты, я получаю результат 980 x 1394.

Когда я использую следующий CSS ...

  html {
    height: 100vh;
    width: 100vw;
  }
  body {
    height: 100%;
    width: 100%;
    margin: 0;
  }

... Инструменты разработки Chrome сообщают, что размер тела 980 x 1546.

720 x 1280 smartphone in portrait mode

Пейзажный режим В ландшафтном режиме все кажется еще сложнее. В моем тесте я явно установил размеры CSS для всего тега <html> на 100vw x 100vh, а ширину и высоту body на 100%.

html element in landscape mode

Однако JavaScript сообщает о clientWidth и clientHeight как 980 x 460, в то время как инструменты разработки Chrome показывают размеры элементов html и body как 980px x 556px, хотя ни один из этих элементов не заполняет экран ширина или высота.

body element in landscape mode

Элемент <main>, ширина которого установлена ​​на 200vh, а высота установлена ​​на 100vh, заполняет всю ширину экрана в ландшафтном режиме, но оставляет зазор в вертикальном направлении, несмотря на то, что Chrome сообщает, что он имеет размеры 1112px x 556px.

main element in landscape mode

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

EDIT:

Чтобы ответить на @Kaddath: Нет, я не настроил метатег viewport. Когда я добавляю тег <meta name = "viewport" content = "width = device-width, initial-scale = 1.0">, размеры меняются. В частности, `` clienttWidth в портретном режиме становится шириной экрана в аппаратных пикселях, разделенной на devicePixelRatio, что имеет смысл. clientHeight - это высота экрана в пикселях CSS, за вычетом высоты панели приложения и встроенной панели кнопок.

body portrait with viewport defined

В портретном режиме значения clientWidth и clientHeight не так просто объяснить.

body landscape with viewport defined main landscape with viewport defined

1 Ответ

0 голосов
/ 08 марта 2019

Чтобы лучше понять, как работает браузер в различных ситуациях, попробуйте вызвать функцию с помощью

setTimeout (showSize, 300);

onresize не работает корректно во всех браузерах.

Также попробуйте window.outerWidth и window.outerHeight.

Это очень много, но вы научитесь.

Вы также можете прочитать https://developers.google.com/web/fundamentals/native-hardware/fullscreen/

...