iOS 15 beta 6 网页tab bar滚动时底部安全区颜色适配问题咨询
底部安全区与Tab Bar颜色不一致修复方案
问题原因
该问题属于移动端底部安全区适配问题,带灵动岛/刘海的iOS及部分安卓机型底部存在系统手势安全区,你当前的底部导航未做安全区适配,固定定位的导航栏不会延伸到安全区范围,滚动时就会漏出body背景色。
问题现象
正常状态效果:
滚动漏色效果:
修复步骤
步骤1:配置viewport安全区支持
首先在页面<head>的viewport meta标签中添加viewport-fit=cover配置,这是系统识别安全区变量的前提:
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
步骤2:修改底部导航CSS
更新你当前的.header(实际为底部Tab Bar)样式,适配安全区高度:
.header { position: fixed; bottom: 0; right: 0; left: 0; /* 兼容iOS 11.2以下版本的安全区变量 */ height: calc(64px + constant(safe-area-inset-bottom)); /* 原有高度+系统自动计算的底部安全区高度,非异形屏设备该值为0,不影响显示 */ height: calc(64px + env(safe-area-inset-bottom)); /* 导航内容避开安全区,避免按钮、文字落入系统手势区域 */ padding-bottom: env(safe-area-inset-bottom); /* 保证内边距不会撑高元素总高度 */ box-sizing: border-box; background-color: var(--black-3); z-index: 9; }
步骤3:弹性滚动漏色额外处理
如果iOS设备滚动触底时的弹性拉动效果仍然漏出body背景,可额外添加全局样式填充底部颜色:
body { /* 底部填充和Tab Bar同色的背景,高度等于Tab Bar总高度 */ background: linear-gradient(to top, var(--black-3) calc(64px + env(safe-area-inset-bottom)), var(--你的页面原有背景色) 0) no-repeat; background-size: 100% 100%; /* 给页面内容添加底部内边距,避免内容被底部导航遮挡 */ padding-bottom: calc(64px + env(safe-area-inset-bottom)); }
注意将代码中的
var(--你的页面原有背景色)替换为你实际的页面背景色值或变量。
内容的提问来源于stack exchange,提问作者Mathieu Xavier Luigi Servant
相关产品推荐
相关产品推荐

