自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

移動(dòng)端安全區(qū)域適配方案

開(kāi)發(fā) 前端 移動(dòng)應(yīng)用
什么是安全區(qū)域?這個(gè)概念是蘋果??率先提出來(lái)的,因?yàn)閺膇Phone X開(kāi)始,iPhone正式進(jìn)入全面屏?xí)r代,iPhone手機(jī)也就開(kāi)始出現(xiàn)了劉海和底部的黑條的區(qū)域。

前言

什么是安全區(qū)域?

這個(gè)概念是蘋果??率先提出來(lái)的,因?yàn)閺膇Phone X開(kāi)始,iPhone正式進(jìn)入全面屏?xí)r代,iPhone手機(jī)也就開(kāi)始出現(xiàn)了劉海和底部的黑條的區(qū)域。Android不知道從什么時(shí)候開(kāi)始越來(lái)越喜歡模仿iPhone的設(shè)計(jì),這也就導(dǎo)致越來(lái)越多的機(jī)型都有這個(gè)安全區(qū)域的概念。

安全區(qū)域(safe area)

?

安全區(qū)域定義為視圖中未被導(dǎo)航欄、選項(xiàng)卡欄、工具欄或視圖控制器可能提供的其他視圖覆蓋的區(qū)域。

如上圖所示,安全區(qū)域?yàn)橹虚g藍(lán)色部分,也就是說(shuō)我們?cè)陧?yè)面布局時(shí)應(yīng)該保證頁(yè)面內(nèi)容在藍(lán)色安全區(qū)域內(nèi)。

所以對(duì)于這類機(jī)型,你如果不特殊處理,那么它將會(huì)是這樣的:

這樣就會(huì)導(dǎo)致底部輸入框的交互受影響

網(wǎng)頁(yè)布局方式(viewport-fit)

在處理安全區(qū)域之前,我們需要先來(lái)了解viewport-fit屬性,這是解決問(wèn)題的關(guān)鍵。

iOS帶來(lái)問(wèn)題的同時(shí)也帶來(lái)了解決問(wèn)題的方法,為了適配 iPhoneX等全面屏機(jī)型 對(duì)現(xiàn)有 viewport meta 標(biāo)簽進(jìn)行了擴(kuò)展,用于設(shè)置視覺(jué)視口的大小來(lái)控制裁剪區(qū)域。

用法

<meta name="viewport" cnotallow="width=device-width,initial-scale=1, user-scalable=0, viewport-fit=cover">

屬性值

該屬性包含三個(gè)值:

  • auto:該值不會(huì)影響初始布局視口,并且整個(gè)網(wǎng)頁(yè)都是可見(jiàn)的。UA 在視口之外繪制的內(nèi)容是未定義的。它可以是畫布的背景顏色,或者 UA 認(rèn)為合適的任何其他顏色。(默認(rèn)值,與contain表現(xiàn)一致)
  • contain:初始布局視口和視覺(jué)視口設(shè)置為設(shè)備顯示屏中內(nèi)接的最大矩形。UA 在視口之外繪制的內(nèi)容是未定義的。它可以是畫布的背景顏色,或者 UA 認(rèn)為合適的任何其他顏色。
  • cover:初始布局視口和視覺(jué)視口設(shè)置為設(shè)備物理屏幕的外接矩形。

區(qū)別

在非矩形顯示器上(比如手表)設(shè)置視口邊界框的大小時(shí),我們必須考慮以下因素:

  • 由于視口邊界框的面積大于顯示器的面積而導(dǎo)致的剪切區(qū)域
  • 視口邊界框與顯示區(qū)域之間的間隙

contain

當(dāng)使用viewport-fit: contain時(shí),初始視口將應(yīng)用于顯示器的最大內(nèi)接矩形。

cover

當(dāng)使用viewport-fit: cover時(shí),初始視口將應(yīng)用于顯示器的外接矩形。

env

為了解決安全區(qū)域問(wèn)題,iOS 11 新增了一個(gè)新的 CSS 函數(shù)env()和四個(gè)預(yù)定義的環(huán)境變量

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

?

iOS 11 中提供的 env() 函數(shù)名為 constant()。從 Safari 技術(shù)預(yù)覽版 41 和 iOS 11.2 beta 開(kāi)始,constant() 已被刪除并替換為 env()。如有必要,您可以使用 CSS 后備機(jī)制來(lái)支持這兩個(gè)版本,但以后應(yīng)該更喜歡使用 env()?!?來(lái)自webkit文檔

上面的意思是從iOS12開(kāi)始不再支持使用constant函數(shù),所以為了兼容處理,我們應(yīng)該這樣寫:

body {
  padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */
  padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */
}

使用該函數(shù)的前提是必須設(shè)置meta標(biāo)簽viewport-fit=cover ,并且對(duì)于不支持 env() 的瀏覽器,瀏覽器將會(huì)忽略它。

適配安全區(qū)域

第一步:

修改頁(yè)面布局方式

<meta name="viewport" content="width=device-width,initial-scale=1, user-scalable=0, viewport-fit=cover">

第二步:

底部適配

.keyboard_foot {
    padding-bottom: constant(safe-area-inset-bottom);
    padding-bottom: env(safe-area-inset-bottom);
}

這樣安全區(qū)域問(wèn)題就解決了!

責(zé)任編輯:華軒 來(lái)源: 前端南玖
相關(guān)推薦

2022-05-12 10:36:10

移動(dòng)方案

2022-05-19 08:48:55

安全點(diǎn)安全區(qū)域主動(dòng)式中斷

2021-06-08 05:53:31

H5 頁(yè)面項(xiàng)目劉海屏適配

2015-07-15 14:38:54

H5移動(dòng)適配

2015-07-15 12:30:37

移動(dòng)端H5高清多屏

2025-03-07 09:53:52

2011-11-03 14:19:15

2011-05-16 15:15:29

2024-01-15 06:27:58

2022-07-14 10:02:00

vivoUI適配開(kāi)發(fā)人員

2010-09-17 14:50:30

2020-03-20 08:30:56

手機(jī)移動(dòng)端適配

2017-04-07 14:42:27

人機(jī)界面語(yǔ)音觸覺(jué)

2017-12-08 18:03:44

2017-11-13 16:35:36

iPhone X全面屏APP

2011-03-07 13:50:20

2012-11-19 14:54:45

2017-08-11 19:02:21

Android全屏幕適配

2011-06-08 08:04:59

2018-05-04 15:26:10

Android開(kāi)發(fā)全屏幕
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)