移动端适配: rem,vh,vw,media query如何选择?

419 阅读4分钟

分别介绍用于适配时的优缺点

rem

以html根节点的font-size为基准的适配方案,实际效果可以简单理解为将界面元素进行缩放。一般还需要额外的js来配合修改html根节点的font-size

html根节点是指哪个节点? html还是body?

根节点当然是html节点

css设置根html节点的方式

方式一

html {
  font-size: 16px;
}

方式二

:root {
  font-size: 16px;
}

伪类 :root 等价于 html 选择器

监听视口变化,动态修改根html节点的字体大小

移动端适配方案实践-rem和vw - 掘金 (juejin.cn)

vw,vh,vmin,vmax

基于浏览器视口宽度/高度的适配方案。实际效果也可以简单理解为将界面元素进行缩放。vw是将浏览器视口分为100份,100vw表示浏览器视口完整宽度,100vh表示浏览器视口完整高度,无需额外的js辅助

vmin是指vw,vh中较小的那个

vmax是指vw,vh中较大的那个

浏览器视口

PC端浏览器窗口大小是可以调整的,因此PC端的浏览器视口是可变的。

移动端浏览器窗口大小大部分情况都是不可调整的,因此移动端视口宽度,大部分情况下都等同于设备宽度

media query

给css加入限定条件,让特定的css只在限定条件内生效。这种方式一般用于针对不同的设备特性,适用不同风格的样式。并非简单的对界面元素进行缩放,也无需额外的js辅助

如何选择?

应该以实际的需求兼容性出发,再结合需要的效果进行选择确认。

如果你需要考虑IE兼容性,那优先考虑REM, 否则应该优先考虑vh,vw方式,如果某个地方,你需要根据不同的设备特性,采用不同的样式,那应该使用media query方式

rem (root em) units | Can I use... Support tables for HTML5, CSS3, etc

"vw" | Can I use... Support tables for HTML5, CSS3, etc

image.png

image.png

扩展

vw辅助rem适配方式去掉rem适配方式依赖的js

css - vw+rem移动端自适应布局 - 越小皓的前端专栏 - SegmentFault 思否

横屏问题

通常我们是基于竖屏的宽度进行开发适配的,因此产出的结果实际是以竖屏宽度为基准的,而如果此时切换到横屏,那么,原本的宽度就变成了高度,原本的高度就变成了宽度。这可能会导致字体会很大(超出预期的那种),复杂界面的布局也可能因此乱掉。

移动端rem横竖屏的适配以及华为等机型rem失效的问题-CSDN博客

小程序横屏rpx单位显示过大 | 微信开放社区 (qq.com)

css - vw+rem移动端自适应布局 - 越小皓的前端专栏 - SegmentFault 思否

部分华为手机rem问题

有些型号的华为手机使用rem时,内容会超出屏幕宽度的问题_手机内容超出屏幕范围-CSDN博客

解决方案

横屏时依然使用宽度或高度中较小的那个作为基准即可(为什么使用的较小的那个?因为竖屏状态通常都是宽度小于高度,)

css - vw+rem移动端自适应布局 - 越小皓的前端专栏 - SegmentFault 思否

小程序横屏rpx单位显示过大 | 微信开放社区 (qq.com)

移动端rem横竖屏的适配以及华为等机型rem失效的问题

移动端rem横竖屏的适配以及华为等机型rem失效的问题_rem 横竖屏变化时-CSDN博客

移动端使用rem布局,在华为机型上超出屏幕_pad横屏rem处理-CSDN博客

sass实现px转rem, px转rpx, px转vw

sass实现px转rem, px转rpx, px转vw - 掘金 (juejin.cn)

微信小程序的rpx问题

微信小程序的rpx是基于竖屏状态下的屏幕宽度设计的,那么切换横屏时,实际效果就必然非预期,要么在小程序端不采用使用rpx方案进行适配,如果采用rpx适配,那就不要让小程序能横屏。

小程序横屏rpx单位显示过大 | 微信开放社区 (qq.com)

还有有一篇更专业的讲解文章

彻底搞懂移动Web开发中的viewport与跨屏适配 - 知乎 (zhihu.com)

小程序大屏适配指南 | 微信开放文档 (qq.com)

参考资料

rem学习使用_为什么rem跟html走而不是body-CSDN博客

如何更愉快地使用rem —— 别说你懂CSS相对单位 - 知乎 (zhihu.com)

css - vw+rem移动端自适应布局 - 越小皓的前端专栏 - SegmentFault 思否

移动端适配方案实践-rem和vw - 掘金 (juejin.cn)