优秀的编程知识分享平台

网站首页 > 技术文章 正文

网页写入一个10cm长的尺子,不管任何分辨率的屏幕上都显示10cm?

nanyue 2024-07-23 13:25:07 技术文章 9 ℃

Css样式表里面有cm,mm,in,pt,pc被称之为绝对单位,理论上绝对单位对任何设备上的渲染出的尺寸都是一致的,但实际上做不到这一点,偏差20-30%十分普遍,因为如今屏幕不只是局限于电脑屏幕,手机屏幕分辨率ppi越来越高,就连css委员会都已经在2011年放弃了绝对单位在不同的显示器上显示一致的要求。

而打印机上打印显示效果和原有的一致很容易做到,打印机多数是300dpi的精度,通过精度可以直接换算。

所以直接用css里面的单位尺寸无法在不同的设备上准确得到绝对尺寸。

那么既然通过打印精度dpi(Dots Per Inch,每英寸点数,是衡量打印机打印精度的主要参数之一)可以换算到实际尺寸,那么我们首先要获得每台设备的ppi(Pixels Per Inch也叫像素密度,所表示的是每英寸所拥有的像素数量)。

获取PPI:

function js_getDPI() {

var arrDPI = new Array;

if (window.screen.deviceXDPI) {

arrDPI[0] = window.screen.deviceXDPI;

arrDPI[1] = window.screen.deviceYDPI;

}

else {

var tmpNode = document.createElement("DIV");

tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";

document.body.appendChild(tmpNode);

arrDPI[0] = parseInt(tmpNode.offsetWidth);

arrDPI[1] = parseInt(tmpNode.offsetHeight);

tmpNode.parentNode.removeChild(tmpNode);

}

return arrDPI;

}

window.onload=function(){

alert("当前屏幕PPI "+js_getDPI());

}

拿到当前屏幕的ppi后,如果当前屏幕的ppi为400,那么当前屏幕每平方英寸有400个像素点的正方形,400是面积,那么该正方形单边像素是20px,1英寸等于2.54cm,我们需要一个10cm长的单位,需要显示多少像素,公式计算为20*10/2.54=79px

所以我们获得不同屏幕的ppi,可以计算不同屏幕10cm长度的像素点,进行动态显示像素点。

最近发表
标签列表