# 21.移动端自适应方案
# Rem + viewport 方案
优点: 兼容性相对较好,页面不会因为伸缩变形,自适应效果好 缺点: 需要配合 js 监听分辨率变化来改变 font-size
核心代码:
- 如果页面的宽度超过了 640px,那么页面中 html 的 font-size 恒为 100px
- 否则,页面中 html 的 font-size 的大小为: 100 * (当前页面宽度 / 640)
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = "orientationchange" in window ? "orientationchange" : "resize",
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
if (clientWidth >= 640) {
docEl.style.fontSize = "100px";
} else {
docEl.style.fontSize = 100 * (clientWidth / 640) + "px";
}
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener("DOMContentLoaded", recalc, false);
})(document, window);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- 为什么是 640px?
- 对于手机屏幕来说,640px 的页面宽度是一个安全的最大宽度,保证了移动端页面两边不会留白。
- 为什么是 100px
- 用 rem 换算起来方便
- 怎么解决 1px 问题?(对于 dpr 大于 1 的屏幕)
- 根据设备像素比,设置 view-port 的 scale 值
# vw/vh 布局
vw 布局 视口是浏览器中用于呈现网页的区域 缺点: 兼容性问题 优点: 纯 css 移动端适配方案,无需结合 js 相比于 rem,vw 更加清晰简单些
# flex 布局
优点
- 根据弹性布局的规则,可容易的实现某种布局效果,是现在大多数项目采用的布局方式 缺点
- 相对来说,兼容性不是很好