背景:由于老生常谈的兼容问题,不建议使用 viewport 缩放。
移动端的响应式布局需要通过设置 media queries 配置多个断点,在响应断点切换的瞬间带来断层式的切换变化,用户体验不佳。
而采用 rem 单位的弹性布局,又需要脚本依赖(头部内嵌:监听分辨率变换,根元素字体随之变换的脚本),耦合不佳。
解决方法:利用 视口单位vw + rem 实现适配(已主流)。
了解:1vw 等于视口宽度的 1%,移动端,PC 端都是视口宽度 100vw,高度 100vh。
总结与示例:变化的根元素搭配 rem,摘自 张鑫旭 基于vw等viewport视区单位配合rem响应式排版和布局
html { font-size: 16px; } @media screen and (min- 375px) { html { /* iPhone6的375px尺寸作为16px基准,414px正好18px大小, 600 20px */ font-size: calc(100% + 2 * (100vw - 375px) / 39); font-size: calc(16px + 2 * (100vw - 375px) / 39); } } @media screen and (min- 414px) { html { /* 414px-1000px每100像素宽字体增加1px(18px-22px) */ font-size: calc(112.5% + 4 * (100vw - 414px) / 586); font-size: calc(18px + 4 * (100vw - 414px) / 586); } } @media screen and (min- 600px) { html { /* 600px-1000px每100像素宽字体增加1px(20px-24px) */ font-size: calc(125% + 4 * (100vw - 600px) / 400); font-size: calc(20px + 4 * (100vw - 600px) / 400); } } @media screen and (min- 1000px) { html { /* 1000px往后是每100像素0.5px增加 */ font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000); font-size: calc(22px + 6 * (100vw - 1000px) / 1000); } }
引申1:满汉全席版,摘自大漠 如何在Vue项目中使用vw实现移动端适配-20180125
引申2:题外,摘自 xueui 网 详细讲解像素,分辨率和适配
引申3:淘宝适配 淘宝适配
假若需要兼容旧版系统,再配合 脚本补丁 食用,不过这是大厂的日常了。