设备像素、css像素、设备独⽴像素、dpr、ppi 之间的区别
在 css 中我们通常使⽤px作为单位,在PC浏览器中 css 的1个像素都是对应着电脑屏幕的1个物理像
素
这会造成⼀种错觉,我们会认为 css 中的像素就是设备的物理像素但实际情况却并⾮如此, css 中的像素只是⼀个抽象的单位,在不同的设备或不同的环境中, css
中的1px所代表的设备物理像素是不同的
当我们做移动端开发时,同为1px的设置,在不同分辨率的移动设备上显⽰效果却有很⼤差异
这背后就涉及了css像素、设备像素、设备独⽴像素、dpr、ppi的概念
介绍
CSS像素
CSS像素(css pixel, px): 适⽤于web编程,在 CSS 中以 px 为后缀,是⼀个⻓度单位
在 CSS 规范中,⻓度单位可以分为两类,绝对单位以及相对单位
px是⼀个相对单位,相对的是设备像素(device pixel)
⼀般情况,⻚⾯缩放⽐为1,1个CSS像素等于1个设备独⽴像素
CSS 像素⼜具有两个⽅⾯的相对性:
•
在同⼀个设备上,每1个 CSS 像素所代表的设备像素是可以变化的(⽐如调整屏幕的分辨率)
•
在不同的设备之间,每1个 CSS 像素所代表的设备像素是可以变化的(⽐如两个不同型号的⼿机)
在⻚⾯进⾏缩放操作也会 引起 css 中 px 的变化,假设⻚⾯放⼤⼀倍,原来的 1px 的东西变成 2px,
在实际宽度不变的情况下1px 变得跟原来的 2px 的⻓度(⻓宽)⼀样了(元素会占据更多的设备像
素)
假设原来需要 320px 才能填满的宽度现在只需要 160px
px会受到下⾯的因素的影响⽽变化:
•
每英⼨像素(PPI)
•
设备像素⽐(DPR)
设备像素
设备像素(device pixels),⼜称为物理像素
指设备能控制显⽰的最⼩物理单位,不⼀定是⼀个⼩正⽅形区块,也没有标准的宽⾼,只是⽤于显⽰
丰富⾊彩的⼀个“点”⽽已
可以参考公园⾥的景观变⾊彩灯,⼀个彩灯(物理像素)由红、蓝、绿⼩灯组成,三盏⼩灯不同的亮度混
合出各种⾊彩图⽚ 加载失败
从屏幕在⼯⼚⽣产出的那天起,它上⾯设备像素点就固定不变了,单位为 pt
设备独⽴像素
设备独⽴像素(Device Independent Pixel):与设备⽆关的逻辑像素,代表可以通过程序控制使⽤的
虚拟像素,是⼀个总体概念,包括了CSS像素
在 javaScript 中可以通过 window.screen.width/ window.screen.height 查看
⽐如我们会说“电脑屏幕在 2560x1600分辨率下不适合玩游戏,我们把它调为 1440x900”,这⾥
的“分辨率”(⾮严谨说法)指的就是设备独⽴像素
⼀个设备独⽴像素⾥可能包含1个或者多个物理像素点,包含的越多则屏幕看起来越清晰
⾄于为什么出现设备独⽴像素这种虚拟像素单位概念,下⾯举个例⼦:
iPhone 3GS 和 iPhone 4/4s 的尺⼨都是 3.5 ⼨,但 iPhone 3GS 的分辨率是 320x480,iPhone 4/4s
的分辨率是 640x960
这意味着,iPhone 3GS 有 320 个物理像素,iPhone 4/4s 有 640 个物理像素
如果我们按照真实的物理像素进⾏布局,⽐如说我们按照 320 物理像素进⾏布局,到了 640 物理像素
的⼿机上就会有⼀半的空⽩,为了避免这种问题,就产⽣了虚拟像素单位
我们统⼀ iPhone 3GS 和 iPhone 4/4s 都是 320 个虚拟像素,只是在 iPhone 3GS 上,最终 1 个虚拟像
素换算成 1 个物理像素,在 iphone 4s 中,1 个虚拟像素最终换算成 2 个物理像素
⾄于 1 个虚拟像素被换算成⼏个物理像素,这个数值我们称之为设备像素⽐,也就是下⾯介绍的 dpr
dpr
dpr(device pixel ratio),设备像素⽐,代表设备独⽴像素到设备像素的转换关系,在
JavaScript 中可以通过 window.devicePixelRatio 获取
计算公式如下:图⽚ 加载失败
当设备像素⽐为1:1时,使⽤1(1×1)个设备像素显⽰1个CSS像素
当设备像素⽐为2:1时,使⽤4(2×2)个设备像素显⽰1个CSS像素
当设备像素⽐为3:1时,使⽤9(3×3)个设备像素显⽰1个CSS像素
如下图所⽰:
图⽚ 加载失败
当 dpr 为3,那么 1px 的 CSS 像素宽度对应 3px 的物理像素的宽度,1px的 CSS 像素⾼度对应
3px 的物理像素⾼度
ppi
ppi (pixel per inch),每英⼨像素,表⽰每英⼨所包含的像素点数⽬,更确切的说法应该是像素密
度。数值越⾼,说明屏幕能以更⾼密度显⽰图像
计算公式如下:
图⽚ 加载失败
总结
⽆缩放情况下,1个CSS像素等于1个设备独⽴像素
设备像素由屏幕⽣产之后就不发⽣改变,⽽设备独⽴像素是⼀个虚拟单位会发⽣改变PC端中,1个设备独⽴像素 = 1个设备像素 (在100%,未缩放的情况下)
在移动端中,标准屏幕(160ppi)下 1个设备独⽴像素 = 1个设备像素
设备像素⽐(dpr) = 设备像素 / 设备独⽴像素
每英⼨像素(ppi),值越⼤,图像越清晰



