iPhone X底部安全区域适配不生效怎么办?
我在做移动端页面时,发现iPhone X及以后的机型底部被Home Indicator遮挡了内容。明明加了viewport-fit=cover,也用了env(safe-area-inset-bottom),但还是没效果,不知道是不是写法有问题?
我试过在body上加padding-bottom,但不同机型适配很麻烦,想用标准的安全区域方案,但下面这段CSS好像没起作用:
body {
padding-bottom: env(safe-area-inset-bottom);
}
/* 也试过加到具体容器 */
.footer {
margin-bottom: env(safe-area-inset-bottom);
}
首先,env()这个函数在部分浏览器如果不提供回退值,可能会导致整条样式声明失效。虽然标准里说可以不写,但实际开发中为了保险,最好给个默认值,比如0。其次,为了兼容iOS 11的早期版本,建议加上constant()的写法,虽然现在用的少了,但加上不出错。
还有个关键点,你在.footer上用的是margin-bottom,这其实是不对的。margin-bottom会把元素往下推,导致底部留出一大块空白区域,背景色可能还是透的。正确的做法应该是用padding-bottom,让元素内部内容向上顶,同时确保背景色延伸到底部。
你可以试试下面这套标准写法,基本能覆盖所有场景:
另外再检查一下HTML头部的meta标签,必须包含viewport-fit=cover,顺序不要乱:
按这个改一下,底部遮挡的问题应该就能解决了。CSS这种东西有时候就是玄学,细节没对齐就不生效。