来自elementFromPoint的Mozilla文档解释了坐标不是物理像素,而是“CSS像素”。究竟什么是CSS像素?我的印象是CSS中的像素与物理像素相同。
如果不是这种情况,如何在物理像素和CSS像素之间进行转换?
答案 0 :(得分:10)
只要任何网页可以合理地关注自身,像素就是物理屏幕像素。
措辞“CSS像素”将像素称为defined in CSS 2
最接近参考像素的设备像素的总数。建议参考像素是设备上一个像素的视角,像素密度为96dpi,距离读取器的臂长。对于标称臂长28英寸,视角因此约为0.0213度。
这就是说,CSS像素是普通简单屏幕案例的设备像素。但是,对于专业超高分辨率屏幕,操作系统将其正常尺寸缩小为2,CSS像素可能是两个设备像素宽。
我们现在在大多数浏览器中都有一个'缩放'功能,它会自然地改变CSS像素的大小(以及所有其他单位),因此它与设备像素不匹配。
答案 1 :(得分:4)
我相信你知道,CSS provides a number of different units for representing length。有些是基于物理的,真实的测量(英寸,毫米,点),而其他测量是基于其他东西(em宽度,百分比)。
但像素不是这些。最初,它们(如您所假设的)仅仅是用户屏幕上最小的可寻址点。但是,由于多种原因,这是有问题的:
所以CSS像素是一个有用的抽象:它们与其他测量结果有明确的关系(至少在给定的浏览器中...),因此页面设计者可以依赖于看起来合理地接近他们的设计的结果,即使浏览器必须将关系更改为实际的设备像素。
要回答第二个问题,不在物理像素和CSS像素之间进行转换。这将通过摧毁an abstraction that the renderer needs in order to operate properly来打败整个点。 Gecko确实提供a way来确定关系,但仅限于chrome脚本 - 普通网页应该保持幸福......
答案 2 :(得分:3)
在大多数情况下,是的,CSS像素与物理像素相同。根据{{3}}:
像素单位是相对于观看设备的分辨率,即最常见的是计算机显示器。如果输出设备的像素密度与典型计算机显示器的像素密度非常不同,则用户代理应重新调整像素值。
通常,设备上的1个像素与CSS中的1个像素相同。在具有非常高像素密度的设备上,您可能会发现其CSS像素大小实际上是2个物理像素宽,但我不知道有任何设备这样做。即使配备Retina显示屏的iPhone 4也不会调整其CSS像素大小。
正如Shog9所指出的,大多数浏览器的缩放功能会调整所显示像素的比例,但在大多数情况下,CSS像素将与物理设备相同。
答案 3 :(得分:0)
可以使用所有主流浏览器现在支持的window.devicePixelRatio;
进行转换
请参见https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio