# iPhoneX异形屏的适配
Safari给webkit新增了四个预定义的常量 (opens new window):safe-area-inset-left, safe-area-inset-right, safe-area-inset-top和 safe-area-inset-bottom
当我们设置viewport-fit:contain,也就是默认的时候时;设置safe-area-inset-left, safe-area-inset-right, safe-area-inset-top和 safe-area-inset-bottom等参数时不起作用的。
首先需要设置meta viewport属性
<meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
1
iPhone横屏显示时
未设置安全区域时显示效果是这样的:
设置安全区域
body {
padding-top: env(safe-area-inset-top); /* 为导航栏+状态栏的高度 88px */
padding-left: env(safe-area-inset-left); /* 如果未竖屏时为0 */
padding-right: env(safe-area-inset-right); /* 如果未竖屏时为0 */
padding-bottom: env(safe-area-inset-bottom); /* 为底下圆弧的高度 34px */
}
1
2
3
4
5
6
2
3
4
5
6
当设置了安全区域后:
两边会留白
env用法
env( <custom-ident> , <declaration-value>? )
1
第一个参数是四个预定义常量中选择,第二个参数是可选参数,如果环境变量不可用,则使用该参数。
环境变量为用户代理定义的预定义值。
Designing Websites for iPhone X (opens new window)
https://blog.csdn.net/sd19871122/article/details/80989704
MDN CSS env (opens new window)
# 底部小横条适配
有这样一个需求:
当是异形屏时,底部确定按钮需要保持安全边距;当不是异形屏时,底部按钮需要8px的bottom。
可以通过css3的max、min函数 (opens new window)来实现
.button {
max(8px, env(safe-area-inset-bottom))
}
1
2
3
2
3