iphonex 已经上线有一段时间了,做为业界刘海屏幕第一款机型,致使全屏不能正常的全屏显示了,,因此须要对
iphonx 适配,下面就详细说说如何适配css
先看一张适配先后的图: html
<meta name="viewport" content="viewport-fit=contain"> <meta name="viewport" content="viewport-fit=cover"> <meta name="viewport" content="viewport-fit=auto">
可视化窗口彻底包含网页内容ios
网页内容彻底覆盖web
默认值和 contain 同样安全
详细见下图(无耻盗图): iphone
注意:网页默认不添加扩展的表现是 viewport-fit=contain,须要适配 iPhoneX 必须设置
viewport-fit=cover,这是适配的关键步骤。
为了应对刘海屏幕,苹果也给出了响应的策略函数
四个预约义变量为设定安全区域和边界的距离,以下:spa
通常状况下是 03d
通常状况下是 0code
在刘海全屏的时候 top 为 44px
刘海全屏的条件下是 34px
这两个函数都是 webkit 中 css 函数,能够直接使用变量函数,只有在 webkit 内核下才支持
必须在 ios >= 11.2 才支持
必须 ios < 11.2 支持
The env() function shipped in iOS 11 with the name constant(). Beginning with Safari Technology
Preview 41 and the iOS 11.2 beta, constant() has been removed and replaced with env(). You can use
the CSS fallback mechanism to support both versions, if necessary, but should prefer env() going
forward.
padding-top: constant(safe-area-inset-top); padding-top: env(safe-area-inset-top);
看下图:
下面写的是 scss
.phonex { padding-top: constant(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-top: env(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-left: constant(safe-area-inset-left); //若是未竖屏时为0 padding-left: env(safe-area-inset-left); //若是未竖屏时为0 padding-right: constant(safe-area-inset-right); //若是未竖屏时为0 padding-right: env(safe-area-inset-right); //若是未竖屏时为0 padding-bottom: constant(safe-area-inset-bottom); //为底下圆弧的高度 34px padding-bottom: env(safe-area-inset-bottom); //为底下圆弧的高度 34px }
@mixin iphonex-css { padding-top: constant(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-top: env(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-left: constant(safe-area-inset-left); //若是未竖屏时为0 padding-left: env(safe-area-inset-left); //若是未竖屏时为0 padding-right: constant(safe-area-inset-right); //若是未竖屏时为0 padding-right: env(safe-area-inset-right); //若是未竖屏时为0 padding-bottom: constant(safe-area-inset-bottom); //为底下圆弧的高度 34px padding-bottom: env(safe-area-inset-bottom); //为底下圆弧的高度 34px } @mixin iphonex-support { @supports (bottom: constant(safe-area-inset-top)) or (bottom: env(safe-area-inset-top)) { body.iphonex { @include iphonex-css; } } }
@mixin iphonex-css { padding-top: constant(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-top: env(safe-area-inset-top); //为导航栏+状态栏的高度 88px padding-left: constant(safe-area-inset-left); //若是未竖屏时为0 padding-left: env(safe-area-inset-left); //若是未竖屏时为0 padding-right: constant(safe-area-inset-right); //若是未竖屏时为0 padding-right: env(safe-area-inset-right); //若是未竖屏时为0 padding-bottom: constant(safe-area-inset-bottom); //为底下圆弧的高度 34px padding-bottom: env(safe-area-inset-bottom); //为底下圆弧的高度 34px } // iphonex 适配 @mixin iphonex-media { @media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) { body.iphonex { @include iphonex-css; } } }
env 和 constant 只有在 viewport-fit=cover 时候才能生效, 上面使用的safari 的控制台能够检测模拟器中网页开启web inspector.
https://webkit.org/blog/7929/... >
https://aotu.io/notes/2017/11...