Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   window.screen.width (https://javascript.ru/forum/xhtml-html-css/69477-window-screen-width.html)

iamme 26.06.2017 17:03

window.screen.width
 
Подскажите, что означает это свойство?

Вроде это ширина экрана в пикселах.
Не зависит от размера окна браузера. Если сжать окно браузера, не меняется.

Но от чего она зависит? Если от монитора, то почему она не равна разрешению экрана?

window.screen.width=1024, а разрешение экрана у меня 1280 x 1024.

iamme 26.06.2017 18:32

Выяснила, что это зависит от window.devicePixelRatio=1.25 у меня. То есть это отношение кол-ва физических пикселей (разрешение экрана, которое в панели управления отображается) к кол-ву логических пикселей в окне браузера. 1024*1.25=1280.
Другой вопрос, от чего оно зависит?

laimas 26.06.2017 19:23

Цитата:

Сообщение от iamme
То есть это отношение кол-ва физических пикселей (разрешение экрана, которое в панели управления отображается) к кол-ву логических пикселей в окне браузера.

Это отношение разрешения в физических пикселях к разрешению в пикселях CSS для текущего устройства отображения, или размер одного пикселя CSS к размеру одного физического пикселя.

Цитата:

Сообщение от iamme
Другой вопрос, от чего оно зависит?

От установленной разрешающей способности, DPI (пикселей на дюйм), по умолчанию в Windows равно 96 DPI = 100%, что равно 1 для devicePixelRatio. devicePixelRatio = 1.25 = 125% = 120 DPI. Изменяется в параметрах экрана.

iamme 27.06.2017 08:06

А у меня на Windows 7 devicePixelRatio = 1.25, и не меняется при изменении параметров экрана. Меняется window.screen.width, а devicePixelRatio остается 1.25.

laimas 27.06.2017 08:38

Цитата:

Сообщение от iamme
на Windows 7

Правый щелчок на столе -> Разрешение экрана -> Сделать текст и другие элементы больше или меньше -> Выбираем из трех: 100%, 125%, 150%.

iamme 27.06.2017 09:17

А, а я то разрешение экрана меняю, спасибо. Так значит этот devicePixelRatio для того и существует, чтобы значки на экране делать крупнее за счет увеличения css пикселей?

И window.screen.width зависит от него. От того, на какой ты сайт заходишь, не зависит. А вот window.innerWidth уже зависит от конкретного сайта (если там width фиксирована, а не 100%) и от того, не сжал ли пользователь браузер. Но если на сайте стоит width=100% и браузер на весь экран, то window.innerWidth=window.screen.width, так?
Или на мобильных еще может быть иначе?

iamme 27.06.2017 09:55

Можно еще в браузере ctrl+ масштаб увеличить - тоже devicePixelRatio меняет

laimas 27.06.2017 10:14

Цитата:

Сообщение от iamme
Так значит этот devicePixelRatio для того и существует, чтобы значки на экране делать крупнее за счет увеличения css пикселей?

window.innerWidth всегда будет равен window.screen.width, так как первое это размер окна включая и полосу прокрутки если она есть. Но, например, Full HD в Windows при 96 DPI, это window.innerWidth = window.screen.width = 1920, а при 120 DPI window.innerWidth/1.25 = window.screen.width/1.25 = 1536, при этом физически ширина монитора в пикселях как была 1920 так и осталась.

Нет, у OS понятий devicePixelRatio и CSS не существует. Что такое DPI/PPI и как это влияет на отображение можно почитать тут.

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

iamme 27.06.2017 11:22

Да, понимаю, что devicePixelRatio не понятие OS, но отражает
"отношение разрешения в физических пикселях к разрешению в пикселях CSS".

Не, если в браузере увеличить масштаб, то window.innerWidth != window.screen.width (см. скриншот).


То есть если подкрутить масштаб в настройках экрана в Windows, то window.screen.width не соответствует разрешению экрана, установленному в OS.

А если подкрутить масштаб в самом браузере (зажать Ctrl и покрутить колесо мыши), то уже window.innerWidth != window.screen.width. Тоже число CSS пикселей в окне уменьшается из-за увеличения масштаба.


ЗЫ Ну и если окно браузера уменьшить, window.innerWidth уменьшится, а window.screen.width останется прежней

laimas 27.06.2017 12:04

Цитата:

Сообщение от iamme
Не, если в браузере увеличить масштаб, то window.innerWidth != window.screen.width (см. скриншот).
То есть если подкрутить масштаб в настройках экрана в Windows, то window.screen.width не соответствует разрешению экрана, установленному в OS.

FF, масштаб 150%, window.innerWidth = window.screen.width = 1280 (при физическом 1920/96dpi). Картинок показывать не буду, верьте на слово. А браузер и не будет изменять никаких разрешений монитора, он просто пересчитывает под указанное разрешение устройства. Если создать картинку размером 400х400 с разрешением 300 DPI, то это будет размер примерно 21х21 см, а если с разрешением 96dpi, то примерно около 70х70 см. Также и экраном, как это и почему происходит по ссылке хорошо описано.

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

iamme 28.06.2017 12:09

А точно масштаб 150%, а не devicePixelRatio =1.5?

Просто 1920/1280 как раз равно 1.5.

А если еще масштаб 150% сделать, то devicePixelRatio должен еще больше стать.

laimas 28.06.2017 12:14

Цитата:

Сообщение от iamme
А точно масштаб 150%, а не devicePixelRatio =1.5?

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

Вы занимаетесь исследованием, хотите постичь неизведанное, понять логику происходящего, ... ? Или же вас интересует как под разные разрешения отображать нормально контент? Тогда читайте об относительных единицах в CSS, а с разрешением пусть борются те, кому это предписано. :)

iamme 28.06.2017 14:18

Я делаю скриншот элемента, для этого вырезаю часть элемента из скриншота всей страницы. Но проблема в том, библиотека возвращает весь скриншот шириной в кол-во физичеких пикселей,а отдельный элемент - в css пикселях, соответственно пока я не догадалась использовать коэффициент devicePixelRatio была проблема с вырезкой. Теперь она решена, на моем компе все ок.

И это уже исследование с целью обезопаситься от вариантов, которые могут всплыть на других компах. Вроде пока все ок, но мало ли...поэтому и надо понять логику происходящего. Но я конечно еще потестирую.

laimas 28.06.2017 14:22

Цитата:

Сообщение от iamme
Я делаю скриншот элемента ...

Теперь понятно. )


Часовой пояс GMT +3, время: 12:22.