iPhoneX安全区域与H5引发的兼容适配问题

示例:iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题。

一、什么是安全区域?
最近正在开发小程序相关的需求时,遇到了一个问题——ios高版本的安全区域,即iPhoneX及以上拥有的“刘海儿”等可滑动区域会与你开发的内容重合。


幸运的是,在小程序上我们只需要考虑底部的底部Home Indicator上滑指示条。

注意,官方不推荐我们粗暴的将这段区域永久的覆盖,例如压黑边隐藏设备的圆角、刘海、指示条。

同样官方推荐避免将交互元素放在屏幕底部或者角落。 因为从屏幕底部上划被用户激活Home指示条并回到主屏或进入多任务切换,且系统会取消你在这个区域布局的手势。而屏幕角落区域很难触控。


二、预留出Home Indicator指示条
方法一(预留固定的距离)
小程序文档上,会提供我们获取系统信息的API,之后我们要做的是:

判断需要特殊处理的系统型号
添加样式
if(iPhoneX及以上)
    // do something

方法二(ios11 增加新特性)

为了应对刘海屏幕,苹果也给出了响应的策略,如下:

safe-area-inset-left:安全区域距离左边边界距离,一般情况下是 0
safe-area-inset-right:安全区域距离右边边界距离,一般情况下是 0
safe-area-inset-top:安全区域距离顶部边界距离,刘海全屏的时候 top 为 44px
safe-area-inset-bottom:安全区域距离底部边界距离,刘海全屏的条件下是 34px


css 函数 env() 和 constant()

这两个函数都是 webkit 中 css 函数,可以直接使用变量函数,只有在 webkit 内核下才支持


例如:

兼容前后版本代码,注意顺序不能变

padding-top: 88px;
padding-bottom: 100px;
padding-bottom: calc(100px +  constant(safe-area-inset-bottom));
padding-bottom: calc(100px +  env(safe-area-inset-bottom));

最后:
env 和 constant 只有在 viewport-fit=cover 时候才能生效。

在我们的index.html页面的meta标签 viewport添加一个属性viewport-fit=cover,请看的代码(我是用vue开发的移动端网页)

这一步必不可少,否则接下来的添加也是不生效的,注意:网页默认不添加扩展的表现是 viewport-fit=contain,需要适配 iPhoneX 必须设置 viewport-fit=cover,这是适配的关键步骤。

在H5页面加  viewport-fit=cover 

三、@supports 隔离兼容样式
可以使用 @supports 来隔离兼容样式,当浏览器支持,当然直接写样式里也是可以的

bottom: constant(safe-area-inset-bottom)
bottom: env(safe-area-inset-bottom)
bottom-button类就会新增margin-bottom的样式

@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom))
    .bottom-button {
        margin-bottom: constant(safe-area-inset-bottom);
        margin-bottom: env(safe-area-inset-bottom);  
    }
}

四、总结

嵌套H5  

在我们的index.html页面的meta标签 viewport添加一个属性viewport-fit=cover,加样式constant/env(safe-area-inset-bottom)来使用

小程序样式

注意:env() 跟 constant() 需要同时存在,而且顺序不能换。

// 兼容写法
padding-bottom:constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */
padding-bottom:env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */
posted @   蓦然JL  阅读(466)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
  1. 1 唯一 G.E.M.邓紫棋
  2. 2 他只是经过 白敬亭 魏大勋
  3. 3 Uptown Funk Mark Ronson / Bruno Mars
  4. 4 在你的身边 盛哲
  5. 5 Edge of My Life Manafest
  6. 6 凄美地 郭顶
  7. 7 Wonderful Tonight Boyce Avenue
  8. 8 心如止水 Ice Paper
  9. 9 Sugar Maroon 5
  10. 10 静谧时光 JIAxNING
  11. 11 Right Now (Na Na Na) Aamir
  12. 12 Dangerously Charlie Puth
  13. 13 Someone You Loved Madilyn Paige
  14. 14 Shape of My Heart Boyce Avenue
  15. 15 We Can't Stop Boyce Avenue / Bea Miller
  16. 16 Perfect Boyce Avenue
  17. 17 Love Me Like You Do Boyce Avenue
  18. 18 Thank You Boyce Avenue
  19. 19 Don’t Wanna Know Boyce Avenue / Sarah Hyland
他只是经过 - 白敬亭 魏大勋
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available

访问主页
关注我
关注微博
私信我
返回顶部
点击右上角即可分享
微信分享提示

目录导航