rem和vw到底该怎么选?适配方案总出问题怎么办?

爱学习的彦霞 阅读 4

最近做移动端项目,用rem适配时在不同机型上布局老是错位,换成vw又怕兼容性不好。我试了动态设置html的font-size,但效果不稳定,尤其在iPhone和安卓机上表现不一致。

比如下面这段代码,按钮宽度设为10rem,在某些手机上就明显比设计稿宽:

<div style="width: 10rem; height: 2rem; background: #007aff;">
  测试按钮
</div>

是不是我哪里没配置对?还是现在应该直接用vw更靠谱?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
Newb.艳兵
这个问题挺常见的,我先帮你排查一下。

先检查几个关键点

第一个问题很可能是 meta viewport 没配对。如果你的 viewport 是这样的:



那问题就来了——没有限制最大宽度。在某些安卓机上,viewport 会被设置为设备物理像素宽度而不是逻辑像素宽度,导致 rem 换算基数变大,10rem 就变宽了。

正确的写法应该是加一个 maximum-scale 限制:



第二个可能的原因是你动态设置 font-size 的逻辑有问题。常见错误是用 screen.width 直接除以一个固定值,但没考虑设计稿尺寸和 dpr。

稳定的 rem 方案

其实现在用 vw 还是 rem 都可以,关键是把基础配置搞对。我给你一个经过验证的方案:

// 假设设计稿宽度是 750px
const baseSize = 75; // 750 / 10 = 75,这样 1rem = 75px
const scale = document.documentElement.clientWidth / 750;
document.documentElement.style.fontSize = baseSize * scale + 'px';

然后页面元素直接用 rem:


测试按钮


vw 方案其实更简单

vw 最大的好处是不用动态设置 font-size,兼容性现在也足够(iOS 8+、安卓 5.0+)。写法更直接:

// 假设设计稿 750px,10rem = 10 * 75px = 750px
// 换算成 vw: (750 / 750) * 100 = 100vw
width: 13.333vw; // 100px / 750 * 100
height: 2.667vw; // 20px / 750 * 100

或者用 postcss 插件自动转换,写代码时还是用 rem/vw 混合,编译后自动帮你算。

我的建议

如果你项目已经用了 rem,先把 viewport 配对 + 检查 font-size 计算逻辑,基本就能解决错位问题。如果是从零开始做新项目,用 vw 确实更简洁省心,现在兼容性完全没问题。

你把现在的 html 头部的 meta 标签和设置 font-size 的代码贴出来,我帮你看看具体哪里不对。
点赞
2026-03-13 18:04