(1) CSS pixels与device pixelsweb
CSS pixels: 浏览器使用的抽象单位, 主要用来在网页上绘制内容。浏览器
device pixels: 显示屏幕的的最小物理单位,每一个dp包含本身的颜色、亮度。app
等值的 CSS pixels在手机屏幕上占多大的位置,这不是固定的,这取决于不少属性。通过分析和总结,咱们能够得出这么一条公式: 1 CSS pixels = (devicePixelRatio)^2 device pixels 。iphone
(2) PPI/DPIspa
PPI,有时也叫DPI,所表示的是每英寸所拥有的像素(pixel)数目,数值越高,即表明显示屏可以以越高的密度显示图像。(注:这里的像素,指的是device pixels。)搞清楚了PPI是什么意思,咱们就能很容易理解PPI的计算方式了,咱们须要首先算出手机屏幕的对角线等效像素,而后处以对角线(咱们日常所说的手机屏幕尺寸就是说的手机屏幕对角线的长度),就能够获得PPI了。准确的计算公示你们能够参照下图。比较有意思的是,根据公式计算出来的iPhone 4的PPI为330,要比苹果官方公布的326要高一点点。scala
(4) viewport的使用设计
控制显示区域各类属性:code
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
viewport总共有5个属性,分别以下:orm
content=“图片
height = [ pixel_value |device-height] ,
width = [ pixel_value |device-width ] ,
initial-scale = float_value , minimum-scale = float_value , maximum-scale = float_value ,
user-scalable =[yes | no] ,
target- densitydpi = [ dpi_value | device-dpi| high-dpi | medium-dpi | low-dpi] ” />
width - viewport的宽度
height – viewport的高度
initial-scale - 初始的缩放比例
minimum-scale - 容许用户缩放到的最小比例
maximum-scale – 容许用户缩放到的最大比例
user-scalable – 用户是否能够手动缩放
在这些属性里面,咱们重点关注target-densitydpi,这个属性能够改变设备的默认缩放。medium-dpi是target-densitydpi的默认值,若是咱们显式定义target-densitydpi=device-dpi,那么设备就会按照真实的dpi来渲染页面。打个比方说,一张320*480的图片,放在iphone4里面,默认是占满屏幕的,但若是定义了target-densitydpi=device-dpi,那么图片只占屏幕的四分之一(二分之一的平方),由于iphone4的分辨率是640*960。
IOS中Safari容许全屏浏览:
<meta content="yes" name="apple-mobile-web-app-capable">
IOS中Safari顶端状态条样式:
<meta content="black" name="apple-mobile-web-app-status-bar-style">
忽略将数字变为电话号码:
<meta content="telephone=no" name="format-detection">
通常状况下,IOS和Android系统都会默认某长度内的数字为电话号码,即便不加也是会默认显示为电话的,so,取消这个颇有必要!
IOS中Safari设置保存到桌面图标:
这是IOS中Safari特有的meta,是在你保存某个页面到桌面的时候使用这张图做为桌面图标,so,尺寸和iphone上的一致,是57*57px
<link rel="apple-touch-icon" href="custom_icon.png">
2、解决方案
(1) 简单粗暴
若是咱们按照320px宽的设计稿去制做页面,而且不作任何的设置,页面会默认自动缩放到跟手机屏幕相等的宽度(这是因为 medium-dpi是target-densitydpi的默认值,和不一样密度对应不一样缩放比例所决定的,这一切都是移动设备自动完成的 )。因此这种解决方案,简单,粗暴,有效。但有一个致命的缺点,对于高密度和超高密度的手机设备,页面(特别是图片)会失真,并且密度越多,失真越厉害。
(2) 极致完美
在这种方案中,咱们采用 target-densitydpi=device-dpi,这样一来,手机设备就会按照真实的像素数目来渲染,用专业的话来讲,就是1 CSS pixels = 1 device pixels。好比对于 640*960的 iphone,咱们就能够作出 640*960的页面,在iphone上显示也不会有滚动条。固然,对于其余设备,也需制做不一样尺寸的页面,因此这种方案每每是使用媒体查询来作成响应式的页面。这种方案能够在特定的分辨率下完美呈现,可是随着要兼容的不一样分辨率越多,成本就越高,由于须要为每一种分辨率书写单独的代码。
(3) 适中响应
针对安卓设备绝大多数是高密度,部分是中密度的特色,咱们能够采用一个折中的方案:咱们对480px宽的设计稿进行还原,可是页面制作却成320px宽(使用background-size来对图片进行缩小),而后,让页面自动按照比例缩放。这样一来,低密度的手机有滚动条(这种手机基本上已经没有人在用了),中密度的手机会浪费一点点流量,高密度的手机完美呈现,超高密度的手机轻微失真(超高密度的安卓手机不多)。这种方案的优势很是明显:只须要一套设计稿,一套代码(这里只是讨论安卓手机的状况)。