适配的概念:在不同尺寸的手机设备上,页面相对性的达到合理的展示(自适应)或者保持统一效果的等比缩放(看起来差不多)。

适配的元素:我们在有尺寸的地方都需要考虑一下适配,一般在字体、宽高、间距和图像(图标、图片)这些元素上。

适配的方法有:

1、百分比适配;

2、viewport缩放适配;

3、DPR缩放适配;

4、rem适配 --- 目前比较主流的一个适配方法;

5、vw、vh适配 --- 可以说这种方法就是为适配而生的。

下面,我们来一一介绍这五种适配方法。

当然除了这五种适配方法之外,还有很多的关于移动端适配的方法,不过其他的方法都是基于这五种方法而产生的。

第一种,百分比适配:

核心是,根据父级算百分比,需配合其他布局使用(一般配合flex盒子使用)。

一般较常用在,高度不变,宽度在变的布局。

如下图:




移动端适配方案 rem的缺点_移动端适配方案 rem的缺点


移动端适配方案 rem的缺点_layui移动端适配_02


在这些作为移动端页面导航的地方,一般都是使用的百分比适配方法。

第二种,viewport缩放适配:

核心是,把所有机型的css像素设置成一致的。

1. viewport 需要通过js动态的设置(不能直接把device的值设置成数值)。

2. 通过设置比例(初始比例以及缩放比例),把宽度缩放成一致的。

公式:缩放比 = css像素(当前值) / 375(目标值)

获取css像素的方法有(前提条件 viewport 没有缩放):

var curWidth = document.documentElement.clientWidth;

var curWidth = window.innerWidth;

var curWidth = window.screen.width;

这种适配方法是基于meta标签的,<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">;然后利用js来使得设备的css像素都变成一致。

如,以下代码:


移动端适配方案 rem的缺点_缩放_03


然而,这种方法并不常用,因为如果把所以的移动设备都设置成统一的css像素值,那么页面在所有设备中都是一样的,那就不能体现各种移动端设备的区别了。

第三种,DPR(像素比)适配方法:

核心是,把css像素缩放成与设备像素一样大的尺寸。(就是css像素 :设备像素 = 1 :1)

原理是,根据DPR的值,把视口进行缩放,缩放到物理像素,也就是把css像素的值设置成物理像素,让所有的设备都变成一个css像素对应一个设备像素。

获取DPR的方法:window.devicePixelRatio


移动端适配方案 rem的缺点_缩放_04


这种方法和第二种viewport缩放方法类似,DPR缩放方法在移动端也不常用,原因跟viewport缩放方法差不多。

第四种,rem适配:

核心是,把所有的设备都分成相同的若干份,再计算元素宽度所占的份数。

em: 作为font-size的单位时,其代表父元素的字体大小,作为其他属性单位时,代表自身字体大小。(font-size:m px; ==> 1em = m px)

rem:css3新增的一个相对单位,是相对于根元素字体大小。

适配原理:把所有的设备都分成相同的若干份,再计算元素宽度所占的份数。(栅格化)

关于html字体大小计算公式:

1. 元素适配的宽度(算出来的) = ( 屏幕实际的宽度(css像素) / 100 ) * 元素实际占的列数

2. 元素在设计稿里的宽度(量出来的)

3. 列数(随便给的) 100

4. 一列的宽度(算出来的) = 屏幕实际的宽度(css像素) / 100 。(一列的宽度就是一个rem)

5. 元素实际占的列数(算出来的) = 元素在设计稿里的宽度 / 一列的宽度

设置html字体的方法:

用js来设置html的字体大小

方法一,画稿的值换算rem


移动端适配方案 rem的缺点_移动端适配有五种方案_05


若,以iPhone6为例,html.style.fontSize = 375 / 16 = 23.4375px;那么可知,在iphone中,1rem = 23.4375px;4rem = 93.75px

下图,width相对于html字体大小,取4rem的宽。


移动端适配方案 rem的缺点_移动端适配方案 rem的缺点_06


- 真正切图时候的方法:先算出rem,还是根据设备实际的css像素。再量出一个元素在设计稿里的尺寸。最后拿这个尺寸,除以DPR的值后,再去换算rem。

方法二,直接使用画稿的值


移动端适配方案 rem的缺点_移动端适配有五种方案_07


列如: 画稿的值为187.5px,那么宽度就可以写为1.875rem。就像是把设备的宽度分成了100份一样。


移动端适配方案 rem的缺点_layui移动端适配_08


用媒体查询设置html字体大小(css3方法) --- 用的不多

这个方法要手动设置每种设备的html字体大小。

例如:


移动端适配方案 rem的缺点_移动端适配有五种方案_09


苏宁易购使用的就是这个方法,大家可以去看看苏宁的源码,这里就不过多介绍了。

使用rem会出现的问题:

1、chrome下有最小字体限制,必须为12px,所以这个值不能小于12。

2、如果两个一样的元素,但是里面字体不一样,那就不能统一设置了。或者元素字体变化了,就又要统一设置一遍。

第五种,vw适配:

为适配而生的单位(跟rem分成一百份原理一样)。

- vw: Viewport’s width 的简写,1vw 等于视口宽度的1%。(100 * (clientWidth / designWidth) + 'px')

以iPhone6为例 375 / 100 = 3.75px; 1vw = 3.75px;

- vh: Viewport’s height 的简写,1vh 等于视口高度的1%。

- vmin: 取vw与vh中最小的值。

- vmax: 取vw与vh中最大的值。

支持情况: >= ios8 , >= Android 4.4 。

方案一:通篇使用vw。


移动端适配方案 rem的缺点_移动端适配有五种方案_10


方案二:通过vw设置根节点字体大小,页面尺寸依然使用rem。(用的较多)


移动端适配方案 rem的缺点_layui移动端适配_11


若以iphone6为例,375 / 100 = 3.75px; 1vw = 3.75px; 9.259259259259261vw = 34.72222222222223px; 那么 1rem = 34.72222222222223px。


移动端适配方案 rem的缺点_layui移动端适配_12


最后,我们来讲一下,如何在自己的手机来打开自己在电脑上所写的本地文件。

注意:

1. 手机中打开电脑的页面,一定要保证手机与电脑在同一wifi下。

2. 你写的文件要存放在wampserver的www目录下,并且你的电脑上要打开wampserver。

3. 编辑器要安装相应插件,以vscode编辑器为例,安装Live Server插件。


移动端适配方案 rem的缺点_移动端适配有五种方案_13


然后所写的html文件下面有Go Live字样,点击就能打开Live Server了。

如图,未打开时,


移动端适配方案 rem的缺点_缩放_14


打开后,


移动端适配方案 rem的缺点_缩放_15


此时文件地址变了


移动端适配方案 rem的缺点_layui移动端适配_16


然后,在电脑打开电脑终端(也叫命令提示符);找不到的话,在桌面左下角有个搜索的,在那里搜索cmd就能打开命令提示符了。


移动端适配方案 rem的缺点_移动端适配有五种方案_17


在终端输入 ipconfig;


移动端适配方案 rem的缺点_移动端适配方案 rem的缺点_18


第三步,找到 IPv4 地址;


移动端适配方案 rem的缺点_缩放_19


第四步,复制地址,替换之前页面的地址;

然后把5500冒号前面的地址换成 IPv4 地址。

此时页面地址又变了


移动端适配方案 rem的缺点_缩放_20


第五步,复制地址生成二维码;

在浏览器找一个二维码生成器,生成二维码。


移动端适配方案 rem的缺点_layui移动端适配_21