设备像素(device pixel)简写DP
设备像素又称 **物理像素** ,是设备能控制显示的最小单位,咱们能够把它看作显示器上的一个点。咱们常说的 1920x1080像素分辨率就是用的设备像素单位。
css像素(css pixel)
css像素是 **web编程的概念** ,它是 **抽象的** ,实际上 **不存在** 。用于逻辑上衡量像素的单位。也就是咱们作网页时用到的css像素单位。
设备独立像素(Device Independent Pixel)简写DIP
设备独立像素也叫 密度无关像素 ,能够认为是计算机坐标系统中的一个点,这个点表示一个能够由程序使用并控制的虚拟像素,能够由相关系统转换为物理像素。设备独立像素是一个总体概念,包括了css像素,好比:css像素,只是在android 机中,css像素不叫 “css像素了”,而叫“设备独立像素”。javascript
由于设备独立像素是包含了css像素的大类,因此咱们这里只讨论 设备像素 和 设备独立像素 的关系css
在详细阐述设备像素和独立设备像素 的关系前咱们先了解两个概念,ppi 和dprjava
PPI 像素密度(pixel per inch)
PPI翻译过来就是每英寸有多少个像素点(这里的像素指的是设备像素,既物理像素),说的直白点PPI就是**像素密度** pixel density),PPI的值越高,画质越好,看起来更有逼格。那么PPI是怎么计算出来的呢,看公式
计算公式:android
咱们不妨用上面的公式作作数学题,见下图:web
下面咱们来计算一下 iphone6 plus 的ppi;
var ppi = sqrt(1920X1920+1080X1080)/5.5; 计算结果ppi 为 400.528576,实际上会有出入,但这不要紧。编程
好了咱们仍是回到上面的问题:二者(设备像素和设备独立像素)是如何进行换算的?它们是经过设备像素比(dpr,device pixel ratio)来进行换算的。那么什么是设备像素比呢?浏览器
DPR (device pixel ratio) 设备像素比
1.设备像素比定义了设备像素和设备独立像素的转换关系(告诉你一个设备像素对应多少个独立设备像素(既css像素)),计算式为:iphone
在javascript中,能够经过window.devicePixelRatio获取到当前设备的dpr。在css中,能够经过-webkit-device-pixel-ratio,webkit-min-device-pixel-ratio和-webkit-max-device-pixel-ratio进行媒体查询,对不一样dpr的设备,作一些样式适配(这里只针对webkit内核的浏览器和webview)。spa
2.设备像素的大小是固定的,是不可变的。而设备独立像素是能够被拉长或压缩的。这个该怎么理解呢看图。翻译
下面咱们来看个现实中的例子,Iphone 5s 使用的是 Retina 视网膜屏幕,什么是Retina视网膜屏幕?PPI 值超过 300 的叫作超高密度屏幕,只是 Apple 给它换了个高大尚的名称:Retina 视网膜屏幕而已。
在作移动页面开发的时候,相信你常常会遇到这种状况:在不一样的手机上看时,里面的图片、文字或者线的大小会不同,有时候大小区别还很是地大。缘由就是刚才说到的设备像素比在做怪。
你想啊,若是在普通屏即标准 PPI下一个设备光点对应一个 CSS 像素时,页面不大不小,完美地渲染出来了。但在如今这个高逼格的年代,标准 PPI 已经不多见了。更多的是 Retina视网膜设备。而设备像素比不一样的品牌的手机这个值也是不同的。即便是同一个品牌的手机也不同。你好比 Iphone 5s 设备像素比为2,Iphone 6s 设备像素比为3。至于安卓机中的设备像素比就更多了,有1.三、1.五、二、3等等。
已iphone6 为例:
设备宽高为375×667,能够理解为设备独立像素(或css像素)。 dpr为2,根据上面的计算公式,其物理像素就应该×2,为750×1334。
上图中能够看出,对于这样的css样式:
width: 2px;
height: 2px;
在不一样的屏幕上(普通屏幕 vs retina屏幕),css像素所呈现的大小(物理尺寸)是一致的,不一样的是1个css像素所对应的物理像素个数是不一致的。
在普通屏幕下,1个css像素 对应 1个物理像素(1:1)。 在retina 屏幕下,1个css像素对应 4个物理像素(1:4)。
设备像素与CSS像素之间的换算是如何产生的呢?,这就要谈到ppi 和 dpr,以上计算出ppi是为了获得密度分界,得到默认缩放比例,即设备像素比。
由上图可知,ppi在120-160之间的手机被归为低密度手机,160-240被归为中密度,240-320被归为高密度,320以上被归为超高密度(Apple给了它一个高大上的名字——Retina)。得到设备像素比后,即可得知设备像素与CSS像素之间的比例。当这个比率为1:1时,使用1个设备像素显示1个CSS像素。当这个比率为2:1时,使用4个设备像素显示1个CSS像素,当这个比率为3:1时,使用9(3*3)个设备像素显示1个CSS像素。