我在做移动端页面时,本地 Chrome 模拟器看起来正常,但真机上某些元素位置完全不对,试过用 vConsole 和 Chrome DevTools 远程调试,但还是找不到原因。是不是媒体查询写错了?
比如下面这段 CSS,在 iPhone 上按钮直接跑到底部外面去了:
.action-btn {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
width: 90%;
max-width: 300px;
}
iPhone X 及以后的机型底部有个 Home 指示条,系统会自动留出安全区域。但
position: fixed元素默认不会识别这个区域,所以你那个按钮实际上被挤到可视区域外面去了。解决办法很简单,加上安全区域补偿:
另外确保你的 viewport meta 标签设置了
viewport-fit=cover,要不然安全区域可能不生效:这两个都加上的话,基本能覆盖所有刘海屏和全面屏iPhone。
如果还有问题,可以量一下真机上的实际可视高度是多少,有时候某些APP内置浏览器或者uniapp这种hybrid容器行为会有差异。