適配iphoneX底部的小黑條

背景

從蘋果手機的iphoneX及以后映屋,手機的屏幕頂部就出現(xiàn)了“齊劉浩槠瘢”和底部小黑橫條的樣式。不少app直接兼容了里面的webview的樣式面睛,屏幕在豎屏下頂部往往是導(dǎo)航欄絮蒿,不會遮住webview里面的內(nèi)容,而底部則從app層面設(shè)置了底部高度叁鉴,使webview底部不在黑色橫條區(qū)域內(nèi)土涝,這樣就不會阻礙展示webview里面的內(nèi)容。

但是幌墓,每個app千差萬別但壮,里面的webview也就展現(xiàn)不一,如果沒有app底部高度常侣,那么webview里面的底部內(nèi)容就會被小黑條遮擋蜡饵。從網(wǎng)頁樣式兼容性來說,需要兼容iphoneX后特有的“齊劉焊焓”和底部小黑橫條樣式溯祸,又不影響以前機型的樣式。

安全區(qū)域

首先了解一下iphoneX的安全區(qū)域,下圖藍色部分為安全區(qū)域焦辅,而兩邊的margin博杖、頂部齊劉海和底部小黑條區(qū)域都屬于不安全區(qū)域,屬于內(nèi)容有可能會被遮擋的區(qū)域筷登,那么我們需要控制我們的內(nèi)容在安全區(qū)域內(nèi)剃根。


安全區(qū)域

兼容方案

所幸,在iphoneX出來的時候仆抵,官方的ios11系統(tǒng)也提供了WebKit Api去兼容這種樣式差異跟继。

第一步:設(shè)置viewport-fit屬性

<meta name='viewport' content='initial-scale=1, viewport-fit=cover'>

viewport-fit有auto,contain镣丑,fit三個屬性值舔糖,默認是auto。
contain: 可視窗口完全包含網(wǎng)頁內(nèi)容莺匠, 頁面內(nèi)容顯示在safe area內(nèi)
cover:網(wǎng)頁內(nèi)容完全覆蓋可視窗口金吗,頁面內(nèi)容充滿屏幕
auto:默認值,跟 contain 表現(xiàn)一致


viewprt-fit=contain

viewprt-fit=cover

默認情況下趣竣,safari展示的是viewport-fit=contain的情況摇庙,如下圖,在橫屏下遥缕,webview里的頁面內(nèi)容在安全區(qū)域內(nèi)卫袒,但是從樣式上看,這不太美觀单匣,并且沒有利用好iphoneX賦予的全屏特性夕凝。


image.png

設(shè)置viewport-fit=cover后,如下圖户秤,內(nèi)容全屏展示码秉,但是左邊的內(nèi)容被“齊劉海”擋住了鸡号。

image.png

為了解決這個問題转砖,ios11中的WebKit包括了一個新的CSS函數(shù)env(),以及四個預(yù)定義的環(huán)境變量safe-area-inset-left鲸伴、safe-area-inset-right府蔗、safe-area-inset-topsafe-area-inset-bottom。這四個環(huán)境變量代表了距離安全區(qū)域的距離汞窗。

  • safe-area-inset-left:安全區(qū)域距離左邊邊界距離
  • safe-area-inset-right:安全區(qū)域距離右邊邊界距離
  • safe-area-inset-top:安全區(qū)域距離頂部邊界距離
  • safe-area-inset-bottom:安全區(qū)域距離底部邊界距離

ios11.2以前用的是constants()函數(shù)姓赤,后來在ios11.2版本改成了env()函數(shù),為了兼容兩者杉辙,可以都寫上模捂。

第二步:設(shè)置安全區(qū)域距離

.post {
    padding: 12px;
    padding-left: constants(safe-area-inset-left); // ios<11.2
    padding-left: env(safe-area-inset-left); // ios>=11.2
}

這樣,當(dāng)出現(xiàn)不在安全區(qū)域時蜘矢,env(safe-area-inset-left)不等于0狂男,那么就會導(dǎo)致在padding-left上設(shè)置了一個安全距離,從而使內(nèi)容不被遮擋品腹。


image.png

上面是被“齊劉横常”擋住的情況,實際比較多的情況用在底部小黑條擋住懸浮bar的情況舞吭,加上屬性支持判斷@supports蛋辈,只有env(safe-area-inset-bottom)被瀏覽器支持的時候才會執(zhí)行里面的css轻专。

.bottom-bar{
  width: 100%;
  position: fixed;
  bottom: 0;
  background: blue;
}
@supports (padding-bottom: env(safe-area-inset-bottom)) {
    .bottom-bar {
      padding-bottom: constant( safe-area-inset-bottom);
      padding-bottom: env(safe-area-inset-bottom);
    }
  }

注:微信內(nèi)的webview是默認viewport-fit=cover的狀態(tài)的,只需要設(shè)置安全距離即可,微信小程序同樣適用上述方案襟诸。

iphonex以上手機非矩形界面適配前:


image.png

適配后,iphonex以上手機非矩形界面自動適配底部高度:


image.png

不是不規(guī)則矩形的情況:
image.png

總結(jié)

手機在更新?lián)Q代瑟蜈,隨著手機樣式發(fā)生改變爽哎,樣式兼容問題也接踵而至,但是問題的制造者往往也是問題的解決者衷旅,開發(fā)者也不用焦慮找不到解決方案捐腿,從而使我們更專注業(yè)務(wù)邏輯本身。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柿顶,一起剝皮案震驚了整個濱河市茄袖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嘁锯,老刑警劉巖宪祥,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異猪钮,居然都是意外死亡品山,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門烤低,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肘交,“玉大人,你說我怎么就攤上這事扑馁⊙纳耄” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵腻要,是天一觀的道長复罐。 經(jīng)常有香客問我,道長雄家,這世上最難降的妖魔是什么效诅? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上乱投,老公的妹妹穿的比我還像新娘咽笼。我一直安慰自己,他們只是感情好戚炫,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布剑刑。 她就那樣靜靜地躺著,像睡著了一般双肤。 火紅的嫁衣襯著肌膚如雪施掏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天茅糜,我揣著相機與錄音七芭,去河邊找鬼。 笑死蔑赘,一個胖子當(dāng)著我的面吹牛抖苦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播米死,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锌历,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了峦筒?” 一聲冷哼從身側(cè)響起究西,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎物喷,沒想到半個月后卤材,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡峦失,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年扇丛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尉辑。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡帆精,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隧魄,到底是詐尸還是另有隱情卓练,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布购啄,位于F島的核電站襟企,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狮含。R本人自食惡果不足惜顽悼,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一曼振、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔚龙,春花似錦拴测、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屿愚。三九已至汇跨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妆距,已是汗流浹背穷遂。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娱据,地道東北人蚪黑。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像中剩,于是被迫代替她去往敵國和親忌穿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容