移动端开发笔记
设备像素比等概念
名词 | 解释 | 补充 |
设备像素/物理像素 | 设备屏幕的物理像素,单位是 | 表示屏幕上可以铺多少个点,并不是一个绝对长度单位,因为点的大小可能不一样 |
设备独立像素 | 也称为密度无关像素,也有人称为 css 像素,可以认为是计算机坐标系统中的一个点,这个点代表一个可以由程序使用的虚拟像素(比如 css 像素),然后由相关系统转换为物理像素。比如 iPhone6 的设备独立像素是 375*667px,也就是说用 css 去表示 iPhone6 的宽高分别是 375px 和 667px | 也可以抽象理解为是设备宽高,即 screen.width/screen.height |
设备像素比(dpr) | 设备像素比 = 物理像素 / 设备独立像素。可以通过 | 相对来说,dpr 越大,图像越清晰。比如 iPhone6 的 dpr 是 2,即用两个物理像素显示一个设备像素(这里像素都是指单个方向的,如果是二维方向,即用四个物理像素显示一个设备像素)。在移动端的时候可以根据 dpr 的值,使用不同分辨率的图片,如 2X 还是 3X,这样可以保证与在普通屏幕上看到的图片效果一致,不至于失真 |
PPI | 表示每英寸的像素数量,即像素密度(iOS 中可能叫 dpi), 正常人眼可以识别的分辨率为 300PPI | PPI 越大, 每英寸像素点越多,图像越清晰 |
retina 屏幕 1px 问题
在某些高清屏幕 (retina 屏) 下,1px 的边框往往看起来不像是 1px,因为它本可以 ‘更细’,
上图中,对于一条 1px 宽的直线,它们在屏幕上的物理尺寸 (灰色区域) 的确是相同的,不同的其实是屏幕上最小的物理显示单元,即物理像素,所以对于一条直线,iphone5 它能显示的最小宽度其实是图中的红线圈出来的灰色区域,用 css 来表示,理论上说是 0.5px。
所以,设计师想要的 retina 下 border: 1px;,其实就是 1 物理像素宽,对于 css 而言,可以认为是 border: 0.5px;,这是 retina 下 (dpr=2) 下能显示的最小单位
然而,无奈并不是所有手机浏览器都能识别 border: 0.5px;,ios7 以下,android 等其他系统里,0.5px 会被当成为 0px 处理,那么如何实现这 0.5px 呢?
scale:
.scale{
position: relative;
}
.scale:after{
content:"";
position: absolute;
bottom:0px;
left:0px;
right:0px;
border-bottom:1px solid #ddd;
-webkit-transform:scaleY(.5);
-webkit-transform-origin:0 0;
}
rem = document.documentElement.clientWidth * dpr / 10
乘以 dpr,是因为页面有可能为了实现 1px border 页面会缩放 (scale) 1/dpr 倍 (如果没有,dpr=1),。