必须同时满足viewport-fit=cover、作用于fixed底部容器自身(或其直接父容器)、且不能写在或上,否则padding-bottom: env(safe-area-inset-bottom)无效。

只写 padding-bottom: env(safe-area-inset-bottom) 是无效的,必须同时满足三个条件:viewport 声明 viewport-fit=cover、作用在 fixed 底部容器自身(或其直接父容器)、且不能写在 或 上。
viewport-fit=cover 缺了就全白搭
WebKit 只在视口明确声明允许延伸到安全区域时,才注入 safe-area-inset-* 环境变量。默认的 viewport-fit=auto(iOS WebView 的 fallback 行为)会让 env(safe-area-inset-bottom) 永远返回 0px —— 你写的那行 CSS 就等于没写。
必须确保 标签完整存在:
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
漏掉 width=device-width 或 initial-scale=1 都可能导致部分 iOS WebView 忽略 viewport-fit 声明。
微信内置浏览器 8.0.22 之前版本不支持 viewport-fit,此时 env() 不生效;企业微信等 Hybrid 容器可能强制覆盖 ,需检查实际渲染后的 DOM 中该标签是否被篡改。
padding-bottom 必须加在 fixed 底部容器上
想让 position: fixed; bottom: 0 的导航栏“浮”在黑条上方,padding-bottom: env(safe-area-inset-bottom) 必须直接写在该元素自身上,而不是靠 bottom: env(safe-area-inset-bottom) 下推——后者只是移动位置,容器高度没变,内容仍可能被截断。
常见结构适配方式:
- 对
<footer class="tab-bar"></footer>这类固定底部栏:直接加padding-bottom: env(safe-area-inset-bottom) - 对 flex 布局中用
margin-top: auto推下来的底部栏:把padding-bottom加在它的父容器(flex 容器)上 - 千万别对
或加padding-bottom:整个页面会下移,顶部状态栏区域可能出现空白或错位
calc() 混用要盯紧 Safari 版本
想加个 8px 间距?写 padding-bottom: calc(8px + env(safe-area-inset-bottom)) 看似合理,但 Safari 15.4 之前根本不认这种写法,整条声明会被丢弃。
兼容低版本 Safari 的写法是降级叠加:
.tab-bar {
padding-bottom: 8px;
padding-bottom: calc(8px + env(safe-area-inset-bottom));
}
注意:env() 不支持乘除运算,calc(env(safe-area-inset-bottom) * 2) 这种写法 Safari 直接忽略整条规则;constant(safe-area-inset-bottom) 已废弃,别再用了。
env() 返回的是纯像素值,不是万能胶水
env(safe-area-inset-bottom) 在 iPhone X/XS/13 Pro 上通常是 34px,iPhone 12 mini 是 21px,iPhone 14 Plus 是 47px,iPhone 15 Pro 是 34px,而 iPhone SE(无 Home Indicator)是 0px。它不是百分比,也不随缩放变化,就是系统提供的静态像素值。
这意味着:
- 不能指望它自动适配 Android 或桌面端(这些平台返回
0px,但不会报错) - 如果用
calc(60px + env(safe-area-inset-bottom)),在非 iOS 设备上会多出 60px 空白 - 真正可靠的落点只有
padding-bottom;margin-bottom在脱离文档流的 fixed 元素上无效
最易被忽略的一点:这个变量只在 iOS 11.2+ Safari / WKWebView 中稳定可用,其他环境(如旧版 PWA、某些 WebView 封装)即使写了 viewport-fit=cover,也可能根本读不到值 —— 建议在关键交互按钮上额外加一层 JS 检测兜底。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











