window.innerWidth和screen.width之间有什么区别



通过停靠在右侧打开的devtools,我能够注意到这两个属性的值存在差异。但最重要的是,我听说其中一个使用物理像素,另一个使用逻辑像素。这是真的吗?如果是,哪个使用哪个?我在任何地方都找不到关于这件事的任何信息。

它有点隐含在名称中。:-)window.innerWidth窗口或更准确地说视口的内部宽度(不包括工具栏、窗口镀铬等;但包括垂直滚动条占用的空间,如果有的话)。screen.width屏幕的宽度(不仅仅是浏览器窗口)。

例如,现在我的浏览器窗口的innerWidth为1197,但如果我把它调宽,它可能是(比如)1305。根据我屏幕的分辨率是1920x1080,所以无论我的浏览器窗口有多大,我机器上的screen.width都将始终是1920

但最重要的是,我听说其中一个使用物理像素,另一个使用逻辑像素。

它们都应该在CSS像素中,我想你会称之为"逻辑"><在这里插入关于CSS不符合逻辑的双关语>,但请注意,这方面还没有标准,只有一个工作草案:screen.widthinnerWidth。草案称,除非另有说明,否则其中的所有测量值都以CSS像素为单位,这两个属性都没有另行说明。如果有一些实现将物理像素用于一个,将CSS像素用于另一个,我还没有听说过(但我不确定我一定会听说)。

screen.width是屏幕的宽度。例如,如果屏幕的分辨率为1600x900,则screen.width将始终为1600

window.innerWidth是浏览器窗口的内部宽度。如果调整浏览器窗口的大小,window.innerWidth将发生更改。

在大多数情况下,window.innerWidth更适合用JavaScript确定设备的屏幕宽度。

原因是window.innerWidth考虑了浏览器视口的宽度,即浏览器窗口内网页的可见区域。此属性通常更适用于确定浏览器窗口中显示内容的可用空间,这是大多数JavaScript代码需要知道的。

另一方面,window.screen.width以像素为单位返回设备物理屏幕的宽度,这对JavaScript代码来说用处不大,因为它没有考虑浏览器窗口或屏幕上其他UI元素的大小。

因此,对于大多数JavaScript用例,window.innerWidth是更好的选择。但是,如果您特别需要了解设备的物理屏幕大小,window.screen.width可能更合适。

最新更新