如何适配不同分辨率和不同屏幕尺寸的手机

来源:http://www.cnblogs.com/时间:2017-02-17

  背景

  开发移动端H5页面

  面对不同分辨率的手机

  面对不同屏幕尺寸的手机

  视觉稿

  在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿。

  对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点:

  首先,选取一款手机的屏幕宽高作为基准(以前是iphone4的320×480,现在更多的是iphone6的375×667)。

  对于retina屏幕(如: dpr=2),为了达到高清效果,视觉稿的画布大小会是基准的2倍,也就是说像素点个数是原来的4倍(对iphone6而言:原先的375×667,就会变成750×1334)。

  问题:

  对于dpr=2的手机,为什么画布大小×2,就可以解决高清问题?

  对于2倍大小的视觉稿,在具体的css编码中如何还原每一个区块的真实宽高(也就是布局问题)?

  带着问题,往下看…

  一些概念

  在进行具体的分析之前,首先得知道下面这些关键性基本概念(术语)。

  物理像素(physical pixel)

  一个物理像素是显示器(手机屏幕)上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。

  设备独立像素(density-independent pixel)

  设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的虚拟像素(比如: css像素),然后由相关系统转换为物理像素。

  所以说,物理像素和设备独立像素之间存在着一定的对应关系,这就是接下来要说的设备像素比。

  设备像素比(device pixel ratio )

  设备像素比(简称dpr)定义了物理像素和设备独立像素的对应关系,它的值可以按如下的公式的得到:

1设备像素比 = 物理像素 / 设备独立像素 // 在某一方向上,x方向或者y方向

  在javascript中,可以通过window.devicePixelRatio获取到当前设备的dpr。

  在css中,可以通过-webkit-device-pixel-ratio,-webkit-min-device-pixel-ratio和 -webkit-max-device-pixel-ratio进行媒体查询,对不同dpr的设备,做一些样式适配(这里只针对webkit内核的浏览器和webview)。

  综合上面几个概念,一起举例说明下:

  以iphone6为例:

  设备宽高为375×667,可以理解为设备独立像素(或css像素)。

  dpr为2,根据上面的计算公式,其物理像素就应该×2,为750×1334。

  用一张图来表现,就是这样(原谅我的盗图):

如何适配不同分辨率和不同屏幕尺寸的手机

  上图中可以看出,对于这样的css样式:

1width: 2px;
2height: 2px;

  在不同的屏幕上(普通屏幕 vs retina屏幕),css像素所呈现的大小(物理尺寸)是一致的,不同的是1个css像素所对应的物理像素个数是不一致的。

  在普通屏幕下,1个css像素 对应 1个物理像素(1:1)。 在retina 屏幕下,1个css像素对应 4个物理像素(1:4)。

发表评论

最新评论(共0条)