css移动端设备的安全区内边距

Safe Area Insets 在 Android 设备上的支持

safe-area-insets 主要是为了处理 iOS 设备上的"刘海屏"和其他不可见区域而引入的,但现代的 Android 设备也存在类似的问题,例如屏幕凹槽、摄像头打孔、底部导航栏等。幸运的是,safe-area-insets 也可以在 Android 设备上使用,因为现代浏览器普遍支持 env() 函数。

支持情况

  • iOS 设备safe-area-insets 在 iOS 设备上得到了很好的支持,尤其是在 Safari 浏览器中。
  • Android 设备 :现代浏览器(如 Chrome、Firefox、Edge)在 Android 设备上也支持 safe-area-insets,尽管支持程度可能因设备和浏览器版本而异。

示例

iPhone X 及其后续型号的"刘海"和底部导航栏。通过使用 constant()env() 函数,可以确保内容不会被这些区域遮挡。

css 复制代码
/* 使用 constant() 函数 */
margin-bottom: max(constant(safe-area-inset-bottom), 20px);

/* 使用 env() 函数 */
margin-bottom: max(env(safe-area-inset-bottom), 20px);
/*。底部导航栏安全距离 */

详细解释

  • max(constant(safe-area-inset-bottom), 20px)

    • 作用 :取 constant(safe-area-inset-bottom)20px 中的较大值作为 margin-bottom
    • 说明 :如果设备底部的安全区内边距大于 20px,则使用安全区内边距;否则使用 20px
  • max(env(safe-area-inset-bottom), 20px)

    • 作用 :取 env(safe-area-inset-bottom)20px 中的较大值作为 margin-bottom
    • 说明 :如果设备底部的安全区内边距大于 20px,则使用安全区内边距;否则使用 20px

兼容性处理

为了确保在不同浏览器和不同版本的 iOS 上都能正确处理安全区内边距,通常会同时使用 constant()env() 函数。这样可以确保在所有支持的浏览器中都能获得正确的效果。

解释

  • constant(safe-area-inset-bottom):用于早期版本的 iOS(iOS 11 和 12),确保在这些版本的 Safari 上也能正确处理安全区内边距。
  • env(safe-area-inset-bottom):用于现代浏览器,包括最新版本的 Safari、Chrome、Firefox 和 Edge,确保在这些浏览器中也能正确处理安全区内边距。

除了底部,还提供了top left right 的安全距离

css 复制代码
padding-top: max(constant(safe-area-inset-top), 20px);
padding-top: max(env(safe-area-inset-top), 20px);
/ * 获取顶部刘海屏安全距离 * /
css 复制代码
padding-top: max(constant(safe-area-inset-left), 20px);
padding-top: max(env(safe-area-inset-left), 20px);
/ * 获取左侧安全距离 * /

padding-top: max(constant(safe-area-inset-right), 20px);
padding-top: max(env(safe-area-inset-right), 20px);
/ * 获取右侧安全距离 * /

CSS 提供了 safe-area-inset-leftsafe-area-inset-right 来获取设备左右的安全区内边距。这些属性用于确保内容不会被设备左右的不可见区域(如侧边按钮或边框)遮挡。

相关推荐
OpenTiny社区27 分钟前
码力全开,智启前端新生态|OpenTiny 登陆华为全联接大会2026
前端·github
妙码生花27 分钟前
利用AI从零学Go并完成实战项目,完工总结:目录结构
前端·后端·go
妙码生花31 分钟前
利用AI从零学Go并完成实战项目,完工总结:商业级开源产品定位和核心特性介绍
前端·后端·go
Captaincc1 小时前
掘金AI用量统计v0.1.0大更新-支持桌面宠物自定义和订阅额度卡片
前端·后端
默_笙1 小时前
🚲 从写信到打电话:WebSocket 双工通信与跨域方案的"通信进化史"
前端·javascript
掘金酱2 小时前
社区排行榜现已上线
前端·人工智能
zzjyr2 小时前
AI 问答的流式响应是怎么实现的?从 fetch 到 SSE 逐字解析
前端·人工智能·ai编程
ikoala2 小时前
DeepSeek 官方仓库惊现 DeepSeek Harness 桌面端!
前端·javascript·后端
liangshanbo12152 小时前
React useEffect 与 useLayoutEffect 面试题整理
前端·javascript·react.js
掰头战士3 小时前
聊聊 Function Calling,你的模型是否答非所问?
前端·typescript·agent