先说几个概念
- 物理像素:比如iphone6/7的像素分辨率,指排列在屏幕上的物理像素数
- 设备独立像素:打开chrome开发者工具,可以看到不同机型的设备独立像素,比如iphone6/7 375*667
- css像素:代码里的像素单位
- 设备像素比dpr:物理像素 / 设备独立像素,比如iphone 7的dpr为2,iphone 11为3
- 布局视口:一般默认是980px(设备独立像素)
- 视觉视口:视觉视口是布局视口当前的可见部分,移动端一般指屏幕宽度
移动端布局,和这些有什么联系呢?
- 元素的尺寸单位px对应css像素,在不缩放情况下,css像素=设备独立像素
- 布局视口如果不调整,会超出屏幕宽度,需要滚动查看(浏览器会自动缩小以适应,但是字号会被缩小,也就是css像素被缩小),所以在移动端开发中,会在head中插入meta,保证布局视口=视觉视口,缩放比例 = css像素 / 设备独立像素,设置缩放比例=1,保证css像素=设备独立像素
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" > - 至此,布局视口=视觉视口,css像素=设备独立像素,接下来就是如何将设计稿等比缩放到不同移动端的问题了
- 一般设计师以iphone6为标准,给出两倍图750*1334,这里就是设备独立像素
总结:具体适配方案
- viewport设置,保证移动端布局视口等于设备宽度
- 使用rem相对单位,取屏幕宽度的n分之一作为根元素字体大小(动态获取屏幕宽度)。比如flexible.js是设置根元素大小为屏幕宽度十分之一
- 设计稿元素尺寸除以设计稿宽度的n分之一,以实现设计稿等比缩放到不同设备
px转rem,vue项目可使用postcss-plugin-px2rem插件
其他适配方案
- vw/vh
- 百分比