国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁 > 開發(fā) > HTML5 > 正文

iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配

2024-09-05 07:23:22
字體:
供稿:網(wǎng)友

最近寫小程序時(shí),遇到了 iPhoneX 底部小黑線與內(nèi)容重疊的問題,實(shí)際上是iPhoneX安全區(qū)域的適配問題,了解清楚這個(gè)問題花了挺多時(shí)間的,也實(shí)操出了結(jié)果,忍不住來總結(jié)總結(jié)。

前言

在蘋果 iPhoneX 、iPhone XR等設(shè)備上,可以看到物理Home鍵被取消,改為底部小黑條替代home鍵功能。微信小程序和 h5 網(wǎng)頁需要針對(duì)這種情況進(jìn)行適配,否則可能會(huì)遇到底部按鈕或選項(xiàng)卡欄與底部黑線重疊的情況,如下圖。

1. 安全區(qū)域是什么意思?

想要解決內(nèi)容與小黑線重疊的問題,我們需要先了解清楚蘋果對(duì)于安全區(qū)域的定義。

安全區(qū)域

安全區(qū)域指的是一個(gè)可視窗口范圍,處于安全區(qū)域的內(nèi)容不受圓角(corners)、齊劉海(sensor housing)、小黑條(Home Indicator)的影響。

看看蘋果官方給的這2張圖就明白了,中間藍(lán)色區(qū)域即為安全區(qū)域。也就是說,適配安全區(qū)域也就是讓小程序或者H5的內(nèi)容顯示在藍(lán)色區(qū)域部分。

同時(shí)安全區(qū)域是在IOS11之后并且是iPhoneX及以上機(jī)型才有的,所以需要適配的是這一類機(jī)型(為了方便,下文中統(tǒng)稱這類需要適配的機(jī)型為iPhoneX),更老的機(jī)型則不需要考慮適配問題。

2. 在微信小程序上適配安全區(qū)域

三種方案:

  • 使用已知底部小黑條高度34px/68rpx來適配(不推薦)
  • 使用微信官方API,getSystemInfo()中的safeArea對(duì)象進(jìn)行適配(推薦)
  • 使用蘋果官方推出的css函數(shù)env()、constant()適配(推薦)函數(shù)env()、constant()適配(推薦)的css函數(shù)env()、constant()適配(推薦)

方案一:使用已知底部小黑條高度34px/68rpx來適配(不推薦)

這是比較老的方法,跟方案2、3比已經(jīng)不推薦了,大家可以了解了解,著急可以直接看方案2和3。

從網(wǎng)上了解到,iPhone底部的小黑條(Home Indicator)高度是34px,實(shí)際我也在真機(jī)確認(rèn)了是34px,所以可以根據(jù)該值,設(shè)置底部按鈕或選項(xiàng)卡的margin-bottom、padding-bottom、height等,或者添加一個(gè)div來占位小黑條的位置。

這樣做要有一個(gè)前提,需要判斷當(dāng)前機(jī)型是需要適配安全區(qū)域的機(jī)型。

問題:如何判斷當(dāng)前機(jī)型是需要適配安全區(qū)域

2種方案:

  • 使用wx.getSystemInfoSync()model屬性判斷
  • 使用wx.getSystemInfoSync()中的screenHeightsafeArea對(duì)象的bottom屬性判斷

方法一:使用wx.getSystemInfoSync()model屬性判斷

已知市面上已有的帶安全區(qū)域的蘋果設(shè)備包括iPhone X、iPhone XR、iPhone XS Max、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max,所以可以直接從getSystemInfoSync()方法中拿到model屬性進(jìn)行判斷。iPhone系列微信還未適配手機(jī)的model返回值為unknown(iphone),也可以提前做適配。

let IPHONE_X = /iphone x/ilet IPHONE_X_11 = /iphone 11/ilet IPHONE_UNKNOWN = /unknown/(iphone/)/i//方法一:使用model判斷是否是IPhoneX及其他包含安全區(qū)域的機(jī)型手機(jī)const isIPhoneX = () => {  let model = wx.getSystemInfoSync().model  return (model.search(IPHONE_X) > -1 || model.search(IPHONE_X_11) > -1 ||    model.search(IPHONE_UNKNOWN) > -1)}//也可以使用正則表達(dá)式判斷const isIPhoneXRegex = () => {  let model = wx.getSystemInfoSync().model  return (/iphone/sx/i.test(model)    || (/iphone/i.test(model) && /unknown/.test(model))    || /iphone/s11/i.test(model)) }

方法二:使用wx.getSystemInfoSync()中的screenHeightsafeArea對(duì)象的bottom屬性判斷

這里使用screenHeight而不是windowHeight,因?yàn)?code>bottom是以屏幕左上角為原點(diǎn)開始計(jì)算的,所以需要的是屏幕高度,對(duì)比screenHeightbottom,如果相等則說明不需要適配,不相等則需要適配。

注意:如果使用微信開發(fā)者工具中的模擬器,screenHeight和bottom始終是相等的,需要用真機(jī)來測(cè)試。

//方法二:使用wx.getSystemInfoSync()中的screenHeight和safeArea的bottom判斷const isIPhoneX = () => {  let screenHeight = wx.getSystemInfoSync().screenHeight  let bottom = wx.getSystemInfoSync().safeArea.bottom  return screenHeight !== bottom}

解決了如何判斷設(shè)備是iPhoneX的問題,就可以寫代碼了。

<view class="bottom-button {{isIpX ? 'view-IPX' : ''}}">底部按鈕</view>

方案二:使用微信官方API,getSystemInfo()中的safeArea對(duì)象進(jìn)行適配(推薦)

使用wx. getSystemInfo()中的safeArea對(duì)象獲取底部小黑條的高度

step 1:使用上面講的方法先判斷是否是需要適配的iPhone機(jī)型
step 2:如果是需要適配的機(jī)型,使用safeArea中的bottom,得到安全區(qū)域底部縱坐標(biāo),然后使用screenHeight減去bottom就能得到小黑條的高度。保存到localstorage里面,全局都可以使用。

方案三:使用蘋果官方推出適配方案css函數(shù)env()、constant()來適配 (推薦)

蘋果官方推薦使用env()constant()來適配,建議使用該方案,不需要管數(shù)值具體是多少。這2個(gè)方法是什么呢?

env()和constant(),是IOS11新增特性,Webkit的css函數(shù),用于設(shè)定安全區(qū)域與邊界的距離,有4個(gè)預(yù)定義變量:

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

因?yàn)槟繕?biāo)是需要對(duì)底部小黑條做適配,所以只需要關(guān)注safe-area-inset-bottom這個(gè)值。

而env()和constant()函數(shù)有個(gè)必要的使用前提,當(dāng)網(wǎng)頁設(shè)置viewport-fit=cover的時(shí)候才生效,根據(jù)微信小程序的表現(xiàn)和我在實(shí)際真機(jī)測(cè)試時(shí)這兩個(gè)函數(shù)生效,推測(cè)小程序里的viewport-fit默認(rèn)是cover

有一點(diǎn)要注意,在IOS11.2系統(tǒng)以前,可以使用constant()函數(shù),但是在IOS11.2系統(tǒng)以后,這個(gè)函數(shù)就被廢棄了,被env()函數(shù)替代了。官方原話如下:

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.

所以我們?cè)谧銎聊贿m配時(shí),需要這樣寫:

padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/

注意:env()和constant()需要同時(shí)存在,而且順序不能換。

3. 在H5上適配安全區(qū)域

在H5上適配安全區(qū)域就方便多了,采用viewport+env+constant方案。

viewport-fit 默認(rèn)有3個(gè)值:

  • contain:可視窗口完全包含網(wǎng)頁內(nèi)容(左圖)
  • cover:網(wǎng)頁內(nèi)容完全覆蓋可視窗口(右圖)
  • auto:默認(rèn)值,此值不影響初始布局視圖端口,并且整個(gè)web頁面都是可查看的。

contain和cover具體區(qū)別如下圖:

而我們需要將viewport設(shè)置為cover,env和constant才能生效。設(shè)置代碼如下:

<meta name="viewport" content="width=device-width,initial-scale=1.0,viewport-fit=cover">

同時(shí)設(shè)置env和constant代碼,同樣env()和constant()需要同時(shí)存在,而且順序不能換。

/* 可以通過增加padding-bottom來適配 */padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*//* 可以通過margin-bottom來適配 */margin-bottom: constant(safe-area-inset-bottom);margin-bottom: env(safe-area-inset-bottom);/* 或者改變高度*/height: calc(55px +  constant(safe-area-inset-bottom));height: calc(55px +  env(safe-area-inset-bottom));

也可以在底部添加一個(gè)空白的div顏色塊來做適配。

還有一種是使用 @supports 隔離兼容樣式

可以使用 @supports 來隔離兼容樣式,當(dāng)瀏覽器支持bottom: constant(safe-area-inset-bottom)或者bottom: env(safe-area-inset-bottom)的時(shí)候,bottom-button類就會(huì)新增margin-bottom的樣式

@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {     .bottom-button {        margin-bottom: constant(safe-area-inset-bottom);        margin-bottom: env(safe-area-inset-bottom);      }}

以上就是我對(duì)iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5適配的總結(jié)。

如果對(duì)你有幫助的話,點(diǎn)贊、評(píng)論、贊賞都是對(duì)我的鼓勵(lì),也是支持我寫下去的動(dòng)力,謝謝!

參考文章:

網(wǎng)頁適配 iPhoneX,就是這么簡(jiǎn)單

蘋果官方開發(fā)者文檔關(guān)于屏幕適配的說明

微信小程序吸底區(qū)域適配iPhone X

微信小程序適配 iPhone X 總結(jié)

到此這篇關(guān)于iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配的文章就介紹到這了,更多相關(guān)iPhoneX底部H5的屏幕適配內(nèi)容請(qǐng)搜索武林網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持武林網(wǎng)!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
高清av中文在线字幕观看1| 精品国产高清a毛片无毒不卡 | 国内外激情在线| 四虎在线免费视频| 福利资源在线久| 久久久久久日本一区99| 在线播放一区二区精品产| 国产美女被草| 在线观看的av网站| 日本黄在线观看| 四虎影视成人永久免费观看视频| 91精品国产高久久久久久五月天| 国产精品第八页| 国产精品666| 亚洲伊人网在线观看| 日本福利午夜视频在线| 91超碰免费在线| 精品街拍一区二区| 国产美女高潮一区二区三区| 国产成人综合亚洲欧美在| 在线免费观看污| 九色视频网站| 精灵使的剑舞无删减版在线观看| 国产中文字幕在线视频| 国产成人久久精品77777| www.狠狠操| 18 激情视频在线| 福利在线国产| 伊人永久在线| 国产www网站| 福利在线国产| 欧美色第一页| 超碰97在线免费观看| ·天天天天操| 69国产精品视频| 国产经典av| 国产视频1区| 香蕉视频在线看| 国产三级在线免费| 国产在线看片| 天天操人人干| 国产小视频在线播放| **三级三级97片毛片| 夜夜操com| 国产对白在线| 五月婷婷导航| 午夜av在线免费观看| 国产中文在线| 国产一级黄色片免费| 国产麻豆精品一区二区三区v视界| www.三区| 国产在线资源| 国产亚洲精品拍拍拍拍拍| 国产美女免费观看| 最近免费中文字幕在线第一页| 国产老肥熟xxxx在线观看| 中文字幕视频在线免费| 尤物视频免费在线观看| 国产午夜三区视频在线| 91黄色在线| 亚洲精品天堂在线观看| jizz在线视频| 国产亚洲精品久久久久久移动网络| 国产亚洲精品自在线观看| 国产不卡精品一区二区三区| 在线观看精品一区二区三区| 免费99热在线观看| 国产成人精品实拍在线| 人人干人人插| 国产精品久久在线| www.蜜桃av| 国产馆av播放| 国产中文字幕在线观看| 国产黄在线看| 超碰在线97国产| av高清资源| 日本福利午夜视频在线| 国产小视频在线高清播放| 亚洲成人av高清| 国产精品一卡二卡三卡| av男人的天堂网| 五月天丁香在线| 九七电影韩国女主播在线观看| 国产乱xxⅹxx国语对白| 任你操在线观看| 在线伊人免费视频| 国产黄色免费电影| 最近中文字幕av免费高清| 超碰97在线免费观看| 99在线视频影院| 国产三级在线| 免费的黄网站在线观看| 四虎国产精品永久| 在线观看午夜av| 伊人av免费在线观看| 国产欧美久久久久久久久| 久草亚洲一区| 天天爱天天色| 国产真实伦在线观看| 蜜桃视频中文字幕| 免费在线高清av| 浪潮av一区| 久热免费在线视频| 狠狠狠综合7777久夜色撩人| www.91在线播放| 日本卡一卡2卡3卡4精品卡网站| 中中文字幕av在线| 国产精品一品| 国产精品186在线观看在线播放| 国产免费专区| 国产免费av高清在线| 日本中文字幕在线看| 国产网红在线| 91视频久色| www.香蕉视频在线观看| 久热中文字幕在线观看| 国产精品臀控福利在线观看| 国产精品免费视频一区一| 97视频在线观看网站| av在线二区| 国产精品一区二区三区视频网站| 国产尤物视频| 国产精品伦一区二区三区视频 | 久久精品国产麻豆| 国产色在线 com| 亚洲第一成人在线视频| 国产在线视频网站| av福利在线| 国产写真视频在线观看| av中文字幕在线看| 国产一卡2卡3卡四卡网站| 亚洲国产日韩成人综合天堂| 国精一区二区三区| 国产亚洲精品拍拍拍拍拍| 亚洲一区二区三区在线观看网站| 福利在线视频导航| baoyu777.永久免费视频| 五月天亚洲激情| 午夜影院在线免费观看| 国产尤物一区二区三区| 99色在线观看| 最好看更新中文字幕| 午夜在线视频播放| 在线欧美一级视频| 国产91在线视频蝌蚪| 国产美女在线一区二区三区| 一级黄色av| 国产黄色免费网站| 国产69久久| 另类视频在线| 欧美xxxx黑人又粗又长| 在线观看免费视频一区二区三区| 国产性一级片| 五月婷婷导航| 国产香蕉视频在线看| 另类高清dbsm日本tvav| 日本卡一卡2卡3卡4精品卡网站| av二区三区| av在线播放国产| 亚洲一区二区三区在线观看网站| 97福利电影| 亚洲91av| 麻豆精品永久免费视频| 亚洲人成影院在线| 日本一本久久| 二人午夜免费观看在线视频| 91caoporn在线| 国产无套粉嫩白浆在线2022年 | 精品街拍一区二区| 2018中文字幕在线观看| 91精品专区| 麻豆视频在线观看免费网站| 福利视频网址导航| 国产黄色免费在线观看| 91资源在线观看| www.91在线播放| 日本福利在线| 五月婷婷导航| 在线视频中文字幕久| 亚洲欧美精品中文第三| 成年黄网站在线观看免费| 91caoporn在线| 中文视频在线| 国产鲁鲁视频在线观看特色| 国产精品剧情一区二区三区| 一级二级在线观看| 国产在线视频福利| 国产福利图片| 激情四房婷婷| 在线视频99| 中文字幕毛片| 97影院秋霞午夜在线观看| 日本在线天堂| 国产精品视频流白浆免费视频 | 最新国产在线| 国产啊啊啊视频在线观看| 欧美精品久久久久久久小说| 国产精品入口麻豆免费看| 欧美日韩一区二区三区视视频| 国产卡一卡二卡三|