Html5之IphoneX適配方法分享

來源:互聯網
上載者:User
IphoneX 的適配,關鍵在於怎麼讓頁面適應 “齊劉海”、底部操作地區以及大圓角問題。IphoneX 相對於其他手機,不同之處在於裝置雖同樣都是一個螢幕,但其實被分為了好幾個模組,本文主要和大家介紹了Html5 IphoneX 適配方法的相關資料,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能協助到大家。

我們正常的一個網頁,搬到X上來,效果是 內容只顯示在 Safe Area 安全區域,非安全區域部分沒有網內容,也就是說頭部和底部會出現白塊,怎麼處理?

解決辦法

1. 給body加一個 background-color

為什麼要加 background-color?有什麼用? 注意到我們剛說到的 頭部和底部會出現白塊,其實說是白色其實並不準確,因為這個顏色其實來自於 body 的背景色。另外,我們上拉或下拉內容時會顯示網頁下方的內容及顏色,其實也是body的背景顏色。所以如果你想修改這兩個效果,就可以設定一下 body 的背景色。

2. 添加 viewport-fit = cover 的 <meta> 標籤

這一步極為關鍵。先看一下結果:

複製代碼

代碼如下:

<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0, width=device-width, viewport-fit=cover" />

為什麼說極為關鍵? iphoneX 的主要問題就是除了安全區域外,其他地方不能顯示網頁內容,而它就是為解決這個問題而量身定製的。當設定了以上內容後,頭部和底部就能開放給網頁顯示內容。
但是用了之後你會發現,地區是開放了,但是內容(常為導覽列)卻因為“齊劉海”而被遮擋住了部分內容,並且,發現原本設定的100%的高度並沒有佔用全部高度空間,怎麼辦?

對於頭部的高度和底部的高度,其實是有匹配值的,如:

所以,我們有如下方案處理:

1. 修改我們導覽列的高度,為原本高度加上safe-area-inset-top 的高度,也就是44px;具體可以這麼寫:
height: calc(navHeight + 44px);,並且重新設定一下導覽列上文案的位置。

2. IOS 11的瀏覽器chromium核心提供了以下內容,也就是我們標註的那幾個值:

  1. safe-area-inset-top

  2. safe-area-inset-right

  3. safe-area-inset-left

  4. safe-area-inset-bottom

怎麼用呢?很簡單:

body {    padding-top: constant(safe-area-inset-top);   //為導覽列+狀態列的高度 88px                padding-left: constant(safe-area-inset-left);   //如果未豎屏時為0                    padding-right: constant(safe-area-inset-right); //如果未豎屏時為0                    padding-bottom: constant(safe-area-inset-bottom);//為底下圓弧的高度 34px       }

也許你沒見過 constant這個東西,我以前也沒見過,它也是專為iphoneX而設計的值,注意只有當你的 <meta> 標籤加上了 viewport-fit=cover 之後,該值才會生效。當然,在android手機上,是不會被識別的。

3. 只為 IphoneX 生效

注意了,我們做的這個適配是只為 IphoneX 生效的,並不能影響到其他手機,所以我們要做響應式布局,即,使用媒體查詢,如下:

// 注意這裡採用的是690px(safe area高度),不是812px;@media only screen and (width: 375px) and (height: 690px){    body {        height: 100vh;    }}

有資料說上面這麼用是ok的,然而我用著卻沒啥效果,於是我放寬了點條件,做了修改如下:

@media only screen and (width: 375px) and (min-height: 690px){    body {       height: 100vh;    }}

區別在於我是識別寬度為375px,高度大於690px 的裝置即為 IphoneX。當然,目前只有X 這款裝置符合該條件。

4. 網頁高度變化

先強調一下,這部分不太確定,我自己遇到了,提出來說明一下:

設定了 viewport-fit 之後,會發現原本設定的100% 的高度不符合預期了,只佔用了部分螢幕空間,其實,不急,只需要作如下修改:

@media only screen and (width: 375px) and (min-height: 690px) {    body {        height: 100vh;    }}

vh 是檢查 viewport 即視口的高度,1vh = 1% 視口高度,是個絕對單位。設定100vh的意思就是佔滿全屏高度

5. 導覽列吸頂,工作列吸底

頁面內容可以拉動,如果導覽列也隨著滑動,效果很醜,這就需要我們實現導覽列吸頂效果。實現大家都會就不多說,這裡展示我的一個案例:

@media only screen and (width: 375px) and (min-height: 690px){  p {    position: fixed;    display: block;    z-index: 300;  }  .bg {    height: calc(3.5rem + 44px);  }  p {    margin-top: 44px;  }}

工作列同理。 

後語

本文只是簡單的描述一下如何處理IphoneX的適配問題的具體步驟,如果還想更深入的瞭解原理,歡迎大家到評論區交流。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.