有没有一种方法可以在JavaScript函数中访问屏幕显示的DPI设置?
我正在尝试在页面上定位HTML面板,当用户的DPI设置为大号(120)时,它会导致位置偏移。我需要知道DPI是多少,以便可以相应地调整位置。
有没有一种方法可以在JavaScript函数中访问屏幕显示的DPI设置?
我正在尝试在页面上定位HTML面板,当用户的DPI设置为大号(120)时,它会导致位置偏移。我需要知道DPI是多少,以便可以相应地调整位置。
看起来你可以在IE中使用'screen' DOM对象,它有deviceXDPI、deviceYDPI、logicalXDPI和logicalYDPI属性。
https://www.w3schools.com/jsref/obj_screen.asp
这里有一个来自http://www.webdeveloper.com/forum/showthread.php?t=175278的解决方案(我没有尝试过,似乎是一种完全的hack :) 只需创建一个宽度为1英寸的东西,并以像素为单位测量它!
console.log(document.getElementById("dpi").offsetHeight);
#dpi {
height: 1in;
left: -100%;
position: absolute;
top: -100%;
width: 1in;
}
<div id="dpi"></div>
首先,为了避免可能(并且非常普遍)的与DPI(每英寸点数)有关的混淆:
DPI并不完全属于“显示设置”。它在两个不同的上下文中被(误)用:
在打印图像时,有很多因素会影响图像在纸张上的最终尺寸:
关键是,你要打印的图像会有效地被重采样(缩小或放大)以匹配最终在打印过程中使用的 DPI。可能会导致这种情况的任何一方(程序、打印驱动程序、打印机)。
现在回到您的问题。不,您无法确定屏幕的 DPI,因为它不在软件领域内。这是一个硬件领域术语,描述用户能够购买多大的监视器。 更新: 我最初在2009年写了这个答案,并理解了当前技术的情况。正如@thure指出的那样,现在你可以(自2012年以来?)使用window.matchMedia函数来确定屏幕的 DPI。
如果您试图实现 HTML 布局的精度,正如其他人建议的那样,您的 CSS 应该使用打印尺寸,例如 em、pt 或 pc,而不是 px。但是,最终结果仍可能取决于所使用的浏览器。如果将您的 HTML 转换为 PDF(或从头生成 PDF)对您来说是一个选项,则打印 PDF 将在屏幕和纸张上给您最真实的 WYSIWYG。
matchMedia
的函数。这个答案可能已经过时了,因此今天可能不太准确。我会更新它以提到这个函数。感谢你提出这个问题。 - Ates GoralmatchMedia
允许查询 dpi,但大多数浏览器将假定显示屏的实际像素密度为 96dpi。 - Will您可以使用 window.devicePixelRatio
属性来获取屏幕/页面的缩放比例。这在当前桌面(Windows)上的IE、Edge、Chrome和Firefox中都能很好地工作,但它似乎不是一个当前的标准。它在我的传统显示器的桌面PC上返回值为1,在比例为200%的Surface上返回值为2。这些天,值应该在1.0到3.0之间。我可以利用这个属性来校正动态图像服务的大小,以在高分辨率屏幕上提供更清晰的图像。
如果您需要某些逻辑DPI/PPI,请将该值乘以96。虽然它不会是实际物理PPI,但只是操作系统所处理的值。
http://www.w3schools.com/cssref/css_units.asp
https://css-tricks.com/the-lengths-of-css/
1em
等于当前字体大小。2em
表示当前字体大小的两倍。例如,如果一个元素显示为12 pt
的字体,则'2em'
是24 pt
。在CSS中,'em'
是一个非常有用的单位,因为它可以自动适应读者使用的字体。1 pt
等于1/72英寸
)1 pc
等于12 points
)1pt = 1.33px
和 1pc = 16px
。无论dpi如何,由于浏览器假定 1in = 96px
,这是不真实和不正确的... 翻译:无论dpi如何,由于浏览器假定 1in = 96px
,所以 1pt = 1.33px
,1pc = 16px
,但这种假设是错误的和不真实的。 - Ωmega