在物理像素和CSS像素之间转换

时间:2010-08-28 00:48:18

标签: css

来自elementFromPoint的Mozilla文档解释了坐标不是物理像素,而是“CSS像素”。究竟什么是CSS像素?我的印象是CSS中的像素与物理像素相同。

如果不是这种情况,如何在物理像素和CSS像素之间进行转换?

4 个答案:

答案 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宽度,百分比)。

但像素不是这些。最初,它们(如您所假设的)仅仅是用户屏幕上最小的可寻址点。但是,由于多种原因,这是有问题的:

  • 渲染器实际上可能正在使用子像素定位以避免舍入错误。
  • 输出设备可能没有 像素 - 600dpi打印机上的十点字体不太可能反映出设计师的实际需求。
  • 与打印类似,专为普通低分辨率显示器(72-96dpi)设计的页面在高分辨率显示器上可能无法读取。
  • 现代浏览器提供了扩展/放大页面的强大工具。

所以CSS像素是一个有用的抽象:它们与其他测量结果有明确的关系(至少在给定的浏览器中...),因此页面设计者可以依赖于看起来合理地接近他们的设计的结果,即使浏览器必须将关系更改为实际的设备像素。

要回答第二个问题,在物理像素和CSS像素之间进行转换。这将通过摧毁an abstraction that the renderer needs in order to operate properly来打败整个点。 Gecko确实提供a way来确定关系,但仅限于chrome脚本 - 普通网页应该保持幸福......

进一步阅读:Units Patch Landed

答案 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