

新闻资讯
技术学院刘海屏下fixed全屏遮罩错位的解决核心是用env(safe-area-inset-top)动态补顶部内边距,并配合viewport-fit=cover声明,确保遮罩真全屏覆盖且内容避开刘海区域。
刘海屏(如iPhone X及后续机型)下,
fixed全屏遮罩错位,本质是顶部状态栏(刘海区域)未被预留空间,导致内容被遮挡或偏移。解决核心是:**用 env(safe-area-inset-top) 动态获取顶部安全边距,并通过 padding-top 或 top 补齐**,同时确保遮罩真正“全屏覆盖且不溢出”。
env(safe-area-inset-top) 补顶部内边距对 fixed 遮罩容器(如 .mask),不直接设 top: 0,而是保留默认定位,靠 padding-top 抬高内容区域,避免遮罩本身被状态栏裁切:
padding-top: env(safe-area-inset-top, 0px);
height: 100vh;(而非 100%)保证高度撑满视口overflow-y: auto; 并设 max-height: calc(100vh - env(safe-area-inset-top, 0px));
viewport-fit=cover 启用安全区域仅 CSS 不够,必须在 HTML 的 中声明:
没有这句,iOS Safari 不会暴露 env() 变量,safe-area-inset-top 将始终返回 0px。
避免写 top: env(safe-area-inset-top); 这类偏移,容易导致底部/侧边也错位。推荐结构:
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
padding-top: env(safe-area-inset-top);
部分旧版 iOS 或安卓刘海屏可能不支持 env(),可用 @supports 检测并降级:
.mask {
padding-top: 20px; /* 旧设备兜底 */
}
@supports (padding-top: env(safe-area-inset-top)) {
.mask {
padding-top: env(safe-area-inset-top, 20px);
}
}基本上就这些。关键不是“把遮罩往下推”,而是让内容区尊重安全区域,遮罩本身保持原生全屏定位——既适配刘海,也不影响普通屏幕体验。