移动端适配用 rem 还是 vw 更合适? 令狐富水 提问于 2026-03-17 16:44:21 阅读 32 优化 最近在做一个移动端 H5 项目,UI 给的设计稿是 375px 宽。我之前用的是 rem 配合 JS 动态设置根字体大小,但发现不同机型下还是有细微偏差,而且代码写起来有点麻烦。 听说现在很多人直接用 vw 单位做适配,是不是更简单?有没有什么坑?比如 iOS 和 Android 表现一致吗? 我试过这样写: .box { width: 50vw; height: 20vh; font-size: 4vw; } 但在某些低端安卓机上布局好像会错乱,不确定是不是单位的问题……到底该选哪种方案? 移动端优化适配方案 我来解答 赞 5 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 轩辕镇逵 Lv1 这题我踩过坑,说说我的经验。 vw适配本身没问题,你在低端安卓机出乱子大概率不是vw单位本身,而是别的原因。vw在Android 4.4+和iOS 7+都支持良好,那些所谓的"坑"更多是写法问题。 先说结论:直接用vw,别整那么复杂。 你之前用rem+js那套是不是类似这种? document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.75 + 'px'; 这套我用了很久,确实麻烦,而且有些机型会拿到错误的clientWidth值,特别是那些有系统栏或者刘海屏的,安卓机皇有时候都给你整出偏差。 vw就简单多了,但你的写法有个问题:直接写vw数值算死累死个人。正确姿势是用postcss插件自动转换: npm install postcss-pxtorem postcss-px-to-viewport --save-dev 然后在postcss配置里写设计稿宽度,插件会自动帮你把px转成vw。比如设计稿375px,插件配置里设成375,然后你写代码时直接写px,编译完自动变成vw单位。 关于你低端安卓机布局错乱,更可能是这些原因: 一是vh单位在某些浏览器里有bug,尤其是带虚拟键的安卓机,vh计算会出问题,能不用尽量不用。 二是你用了font-size: 4vw这种,字体大小随视口变,低端机渲染起来容易出问题,文字会模糊甚至抖动。 三是你vw+vh混着用,有些老浏览器解析会抽风。 我的建议方案是这样的: 布局宽度用vw,字体用rem或者固定px。rem配合vw做根字体,比如html设置font-size: 13.3333vw(100/7.5),这样1rem就等于7.5px,写的时候还是用px,postcss转成rem。 具体配置大概这样: module.exports = { plugins: { 'postcss-px-to-viewport': { viewportWidth: 375, viewportUnit: 'vw', fontViewportUnit: 'vw', unitToConvert: 'px' }, 'postcss-pxtorem': { rootValue: 37.5, unitPrecision: 5, propList: ['font-size'] } } } 这样布局用vw,字体用rem,兼顾了适配和稳定性。 还有一点提醒:别忘了在meta里设置viewport,禁止缩放。有些低端机默认允许缩放的话,vw计算会出问题。 基本上照这个来,适配问题能解决个九成。 回复 点赞 2026-03-17 20:08 加载更多 相关推荐 1 回答 44 浏览 rem和vw到底该怎么选?适配方案总出问题怎么办? 最近做移动端项目,用rem适配时在不同机型上布局老是错位,换成vw又怕兼容性不好。我试了动态设置html的font-size,但效果不稳定,尤其在iPhone和安卓机上表现不一致。 比如下面这段代码,... 爱学习的彦霞 优化 2026-03-13 17:22:26 1 回答 49 浏览 移动端适配用 rem 还是 vw 更合适? 最近在做一个移动端 H5 项目,UI 给的设计稿是 375px 宽。我之前用的是 rem 配合 JS 动态设置根字体大小,但发现有些安卓机上字体渲染有点模糊。 听说现在很多人直接用 vw 单位做适配,... Mr-卜楷 优化 2026-03-18 07:37:19 2 回答 39 浏览 rem和vw到底该用哪个做移动端适配? 最近在做一个移动端项目,UI给的设计稿是375px宽。我之前用rem配合js动态设置html的font-size,但听说现在主流都用vw了?试了下直接写width: 50vw确实方便,但有些老机型好像... IT人士轩 优化 2026-02-25 19:05:20 2 回答 57 浏览 rem适配在不同机型上为啥还是错位? 我用rem做移动端适配,按照设计稿750px来设置根字体大小,但真机测试时发现iPhone和安卓显示效果不一致,有些元素明显偏移了。 我在html里动态设置了font-size,代码是这样的: fun... 志选 Dev 移动 2026-03-22 23:25:20 1 回答 43 浏览 rem适配在不同机型上为啥还是错位了? 我用rem做移动端适配,按照设计稿750px写的,js动态设置html的font-size,但iPhone和安卓上显示效果不一致,有些元素还是错位了。 我的基准是375px,所以用了这个脚本: con... 莉娜 Dev 移动 2026-03-12 15:03:18 2 回答 89 浏览 rem和em在移动端响应式布局中如何配合使用? 最近在做移动端适配时发现一个问题,当同时使用rem和em时,字体大小总是忽大忽小。比如设置了html{font-size:16px},然后用em的子元素又套了rem,结果在iPhone12上显示正常,... 迷人的康平 移动 2026-02-08 23:15:25 2 回答 124 浏览 为什么用rem方案后移动端页面在不同机型下字体和间距错乱? 最近在用rem方案做移动端适配,按教程设置了html根字体大小,但发现iPhone 12和华为nova9的字体和间距显示完全不一样,1rem在nova9上显得特别大。 我按教程写了个动态计算函数: f... 慕容小敏 移动 2026-01-29 18:13:26 1 回答 98 浏览 vw/vh在移动端适配时为什么有时候失效? 我用 vw 做了一个全屏的卡片组件,但在某些安卓机上高度明显不对,vh 好像没生效。试过加 meta viewport 了,还是不行。 这是我的 Vue 组件代码: <template> ... 长孙秀云 移动 2026-03-16 09:54:20 2 回答 113 浏览 rem适配时页面元素在不同手机上缩放比例不一致怎么办? 我用rem方案开发移动端时,设置了根字体大小根据屏幕宽度计算,但iPhone12和小米11上按钮大小明显不一样,html{font-size:50px}明明是动态计算的啊... 代码是这样写的:fun... 开发者阳阳 移动 2026-02-16 01:20:30 2 回答 62 浏览 rem适配后为什么不同手机字体大小不一致? 我在用rem方案开发移动端时遇到个怪问题,设置了html根字体大小后,iPhoneX和华为nova9上的文字显示明显不一样大。明明都按设计图的750基准做了计算: const designWidth ... Newb.玉宁 移动 2026-02-15 20:28:28
vw适配本身没问题,你在低端安卓机出乱子大概率不是vw单位本身,而是别的原因。vw在Android 4.4+和iOS 7+都支持良好,那些所谓的"坑"更多是写法问题。
先说结论:直接用vw,别整那么复杂。
你之前用rem+js那套是不是类似这种?
document.documentElement.style.fontSize = document.documentElement.clientWidth / 3.75 + 'px';
这套我用了很久,确实麻烦,而且有些机型会拿到错误的clientWidth值,特别是那些有系统栏或者刘海屏的,安卓机皇有时候都给你整出偏差。
vw就简单多了,但你的写法有个问题:直接写vw数值算死累死个人。正确姿势是用postcss插件自动转换:
npm install postcss-pxtorem postcss-px-to-viewport --save-dev
然后在postcss配置里写设计稿宽度,插件会自动帮你把px转成vw。比如设计稿375px,插件配置里设成375,然后你写代码时直接写px,编译完自动变成vw单位。
关于你低端安卓机布局错乱,更可能是这些原因:
一是vh单位在某些浏览器里有bug,尤其是带虚拟键的安卓机,vh计算会出问题,能不用尽量不用。
二是你用了font-size: 4vw这种,字体大小随视口变,低端机渲染起来容易出问题,文字会模糊甚至抖动。
三是你vw+vh混着用,有些老浏览器解析会抽风。
我的建议方案是这样的:
布局宽度用vw,字体用rem或者固定px。rem配合vw做根字体,比如html设置font-size: 13.3333vw(100/7.5),这样1rem就等于7.5px,写的时候还是用px,postcss转成rem。
具体配置大概这样:
module.exports = {
plugins: {
'postcss-px-to-viewport': {
viewportWidth: 375,
viewportUnit: 'vw',
fontViewportUnit: 'vw',
unitToConvert: 'px'
},
'postcss-pxtorem': {
rootValue: 37.5,
unitPrecision: 5,
propList: ['font-size']
}
}
}
这样布局用vw,字体用rem,兼顾了适配和稳定性。
还有一点提醒:别忘了在meta里设置viewport,禁止缩放。有些低端机默认允许缩放的话,vw计算会出问题。
基本上照这个来,适配问题能解决个九成。