[toc]
# 页面适配
页面适配:页面能够随着浏览器尺寸的变化,而内容也跟着放和缩小。
## 实现方案
最常用的两种方案:
1. rem + flexible.js
2. 使用 vw 和 vh 做为单位
## 方案一、rem + flexible.js
### 流程:
1. 先确定效果图在设计时使用的尺寸标准是多少
一般情况下,手机端都是 750px 为标准设计的。
2. 引入 flexible.js 这个包
2.1 下载包
[https://github.com/amfe/lib-flexible](https://github.com/amfe/lib-flexible)
2.2 页面中引入
3. 页面中使用 rem 做为单位
3.1 可以使用 vscode 安装 `cssrem` 插件
3.2 配置这个插件的基准值
![](https://img.kancloud.cn/a8/56/a856caa4d55edb40e6310085729224e0_1088x1000.png)
![](https://img.kancloud.cn/66/35/66351393763934939e1fadb0a2885e65_1216x1002.png)
重启 vscode
3.3 当我们在 vscode 中写 px 单位时自动会转成 rem
![](https://img.kancloud.cn/e3/25/e325714a346066997c9af4a7250d6058_862x344.png)
### 原理
1. rem 到底是什么?
rem 的含义:html(根标签) 标签的 font-size 的倍数。
比如:
~~~
// 设置 html 的 font-size 为 30px
html {
font-size: 30px;
}
p {
width: 2rem; // 60px
}
~~~
2. 监听浏览器尺寸的变化,变化时修改 html 中 font-size 的值,这样整个页面中 rem 的值对应改变
~~~
@media screen and (max-width: 1024px) {
html {
font-size: 12px;
}
}
@media screen and (min-width: 1024px and max-width: 2920px) {
html {
font-size: 20px;
}
}
...
~~~
以上就是实现原理:通过媒体查询来监听浏览器的尺寸变化 ,为不同的尺寸设置不同的 font-size 以改变整个页面的 rem 的值。
为了能够随着浏览器改变,我们还需要编写媒体查询的代码,为了简化,我们可以直接引入 `flexible.js` 这个包,这个包会自动帮我们监听浏览器的尺寸,相应的修改 html 中 font-size 的值,这样我们就不用自己写媒体查询了。
![](https://img.kancloud.cn/50/28/502836d6783a3be36c24a5d2324c4378_1482x732.png)
## 方案二、vw 和 vh
vw 和 vh 是新出的两个单位。1vw = 屏幕的尺寸的 1%。
~~~
p {
width: 5vw; // 屏幕宽度的 5%
height: 5%; // 父元素高的 5%
}
~~~
流程:
1. 确定设计稿在设计时使用的基准值(一般,手机端是 750 px)
2. 在 vscode 中安装 `px2vw` 插件
3. 配置这个插件
![](https://img.kancloud.cn/7d/ef/7def11a1237fda4e609caccd6cc16008_858x1102.png)
![](https://img.kancloud.cn/3e/61/3e613760ce4f186c0a12a1375f4a58d1_960x430.png)
重启一下
4. 页面中使用 px 时自动会弹出 对应的 vw 和 vh
![](https://img.kancloud.cn/2f/bf/2fbfa1e56d0366bef73b679c84f284a9_1200x320.png)