rem适配时页面元素在不同手机上缩放比例不一致怎么办?
我用rem方案开发移动端时,设置了根字体大小根据屏幕宽度计算,但iPhone12和小米11上按钮大小明显不一样,html{font-size:50px}明明是动态计算的啊…
代码是这样写的:
function setRem() {
const width = document.documentElement.clientWidth;
document.documentElement.style.fontSize = width / 10 + 'px';
}
window.addEventListener('resize', setRem);
setRem();
但在真机调试时发现,同样10rem宽的div,iPhone显示比预期小很多,而安卓机型又偏大,这是哪里出问题了?
解决方法其实不复杂,核心是把 dpr 考虑进去。你可以用 window.devicePixelRatio 获取设备的像素比,然后调整你的 rem 计算逻辑。不过更推荐的做法是借助 flexible.js 或者 viewport 单位来处理适配问题,少走弯路。
如果你不想引入额外库,可以改成这样:
这里的关键点是动态设置 viewport 的缩放比例,让不同设备的显示效果尽量一致。另外提醒一下,别忘了测试极端分辨率的设备,比如一些奇葩的小屏机或者折叠屏,它们可能会暴露新的问题。
如果觉得 rem 还是麻烦,也可以试试 vw/vh 单位配合 postcss-px-to-viewport 插件,效果也不错,省得自己折腾。总之多试几种方案,找到最适合你们项目的那个。