rem适配在不同机型上为啥还是错位了?
我用rem做移动端适配,按照设计稿750px写的,js动态设置html的font-size,但iPhone和安卓上显示效果不一致,有些元素还是错位了。
我的基准是375px,所以用了这个脚本:
const baseSize = 37.5;
function setRem() {
const scale = document.documentElement.clientWidth / 10;
document.documentElement.style.fontSize = scale + 'px';
}
setRem();
window.addEventListener('resize', setRem);
CSS里写的是width: 2rem;,按理说应该是75px,但在某些安卓机上明显偏大,这是哪出问题了?
第一个,baseSize 声明了压根没用上,不过这个不是导致错位的原因。
真正的问题是:你没限制最大最小宽度。安卓机有些机型屏幕宽度算出来比较大,比如414px算出来 font-size 是41.4px,2rem 就变成82.8px了,比设计稿的75px大了将近8px,能不明显偏大么。
还有一种情况是某些安卓机的 viewport 宽度计算有问题,特别是有刘海屏或者全面屏的时候,document.documentElement.clientWidth 可能不准确。
解决思路很简单,加个范围限制:
另外检查下你的 meta 标签是不是这么写的:
width=device-width 必须要有,有些安卓机不写这个会默认用980px做基准,那算出来的 font-size 就全乱了。
如果还想更省心,直接用 vw 单位也行,CSS里写 width: 10vw 就是屏幕宽度的10%,不用折腾js。