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...