为什么用rem方案后移动端页面在不同机型下字体和间距错乱?
最近在用rem方案做移动端适配,按教程设置了html根字体大小,但发现iPhone 12和华为nova9的字体和间距显示完全不一样,1rem在nova9上显得特别大。
我按教程写了个动态计算函数:
function setRem() {
const scale = document.documentElement.clientWidth / 375;
document.documentElement.style.fontSize = Math.min(scale * 16, 40) + 'px';
}
window.addEventListener('resize', setRem);
setRem();
但测试发现华为手机上文字撑破容器,而iPhone却正常。是不是计算基准有问题?试过改成750基准也没好转,求大佬指点!
你当前的方案只考虑了屏幕宽度,但忽略了不同手机的**devicePixelRatio**(像素密度),特别是像华为nova9这类安卓机,很多都是**1.5或2倍屏**,而iPhone 12是标准的2倍屏。这就导致1rem在不同设备上的实际像素表现不一致。
### 解决方案:
修改你的
setRem函数,把像素密度考虑进去,如下:另外,别忘了在
标签加上 viewport 的 meta:这个改动能让你的rem在不同设备上保持相对一致的视觉大小,而不是只靠clientWidth来算。
再强调一次,别只盯着宽度,devicePixelRatio这个值在安卓上很容易被忽略,但它是影响最终显示效果的关键因素之一。
再测测看,应该就正常了。