婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門標(biāo)簽:黃石ai電銷機器人呼叫中心 ok電銷機器人 智能電銷機器人被禁用了么 電話機器人技術(shù) 地圖標(biāo)注軟件打印出來 如何查看地圖標(biāo)注 惡搞電話機器人 高德地圖標(biāo)注商戶怎么標(biāo) 欣鼎電銷機器人 效果

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

前言

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

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

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

安全區(qū)域

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

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

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

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

三種方案:

  • 使用已知底部小黑條高度34px/68rpx來適配(不推薦)
  • 使用微信官方API,getSystemInfo()中的safeArea對象進(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,實際我也在真機確認(rèn)了是34px,所以可以根據(jù)該值,設(shè)置底部按鈕或選項卡的margin-bottom、padding-bottom、height等,或者添加一個div來占位小黑條的位置。

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

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

2種方案:

  • 使用wx.getSystemInfoSync()model屬性判斷
  • 使用wx.getSystemInfoSync()中的screenHeightsafeArea對象的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系列微信還未適配手機的model返回值為unknown(iphone),也可以提前做適配。

let IPHONE_X = /iphone x/i
let IPHONE_X_11 = /iphone 11/i
let IPHONE_UNKNOWN = /unknown\(iphone\)/i

//方法一:使用model判斷是否是IPhoneX及其他包含安全區(qū)域的機型手機
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對象的bottom屬性判斷

這里使用screenHeight而不是windowHeight,因為bottom是以屏幕左上角為原點開始計算的,所以需要的是屏幕高度,對比screenHeightbottom,如果相等則說明不需要適配,不相等則需要適配。

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

//方法二:使用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對象進(jìn)行適配(推薦)

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

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

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

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

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

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

因為目標(biāo)是需要對底部小黑條做適配,所以只需要關(guān)注safe-area-inset-bottom這個值。

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

有一點要注意,在IOS11.2系統(tǒng)以前,可以使用constant()函數(shù),但是在IOS11.2系統(tǒng)以后,這個函數(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.

所以我們在做屏幕適配時,需要這樣寫:

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

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

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

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

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

  • contain:可視窗口完全包含網(wǎng)頁內(nèi)容(左圖)
  • cover:網(wǎng)頁內(nèi)容完全覆蓋可視窗口(右圖)
  • auto:默認(rèn)值,此值不影響初始布局視圖端口,并且整個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è)置env和constant代碼,同樣env()和constant()需要同時存在,而且順序不能換。

/* 可以通過增加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));

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

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

可以使用 @supports 來隔離兼容樣式,當(dāng)瀏覽器支持bottom: constant(safe-area-inset-bottom)或者bottom: env(safe-area-inset-bottom)的時候,bottom-button類就會新增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);  
    }
}

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

如果對你有幫助的話,點贊、評論、贊賞都是對我的鼓勵,也是支持我寫下去的動力,謝謝!

參考文章:

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

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

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

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

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

標(biāo)簽:綏化 萍鄉(xiāng) 金昌 中山 阿壩 盤錦 聊城 赤峰

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配》,本文關(guān)鍵詞  iPhoneX,安全,區(qū)域,Safe,Area,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配》相關(guān)的同類信息!
  • 本頁收集關(guān)于iPhoneX安全區(qū)域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩电影免费一区| 国产精品乱码久久久久久| 91精品国产综合久久久久久久久久 | 成人手机在线视频| 色综合 综合色| 国产日韩一级二级三级| 国产精品一区二区男女羞羞无遮挡| 欧美日韩免费一区二区三区 | 久久免费视频色| 另类小说图片综合网| 精品国产免费久久| 懂色av一区二区夜夜嗨| 最新国产精品久久精品| 色噜噜狠狠成人中文综合| 亚洲黄色性网站| 欧美视频一区二区三区在线观看| 一区二区三区 在线观看视频| 欧美日韩一级二级三级| 久草中文综合在线| 国产午夜精品久久| 欧美亚洲综合在线| 日韩中文字幕91| 欧美在线播放高清精品| 亚洲欧美激情一区二区| 欧美日韩精品一区视频| 麻豆精品在线播放| 国产精品成人免费在线| 美女mm1313爽爽久久久蜜臀| 91在线观看美女| 亚洲国产综合人成综合网站| 91精品欧美久久久久久动漫 | 国产精品欧美一区喷水| 国产精品一级二级三级| 在线视频国内一区二区| 欧美一区二区三区日韩视频| 国产在线不卡一区| 日本久久电影网| 欧美国产日产图区| 国产69精品久久777的优势| 亚洲色欲色欲www| 在线免费观看日韩欧美| 久久婷婷国产综合精品青草| 欧美丰满一区二区免费视频| 寂寞少妇一区二区三区| 久久先锋影音av| 黄网站免费久久| 亚洲一卡二卡三卡四卡五卡| 欧美一级高清片在线观看| 国产一区二区三区免费播放| 欧美一二三四在线| 美腿丝袜一区二区三区| 日韩理论片在线| 久久先锋影音av| 日韩一区二区三区观看| 免费黄网站欧美| www.欧美.com| 久久成人免费日本黄色| 亚洲曰韩产成在线| 久久久.com| 精品国产伦一区二区三区观看方式| 欧美综合色免费| 色综合 综合色| 久久精品国产精品青草| 日本午夜一区二区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 欧美一级理论片| 91蜜桃婷婷狠狠久久综合9色| 国产一区二区三区在线观看免费视频 | 日韩伦理免费电影| 不卡视频一二三四| 国产综合色视频| 男女男精品视频网| 午夜影视日本亚洲欧洲精品| 亚洲欧美色一区| 一区二区三区中文字幕在线观看| 一色屋精品亚洲香蕉网站| 中文字幕国产一区| 中文字幕乱码日本亚洲一区二区| 国产精品久久久一本精品| 国产欧美日韩久久| 亚洲人成电影网站色mp4| 亚洲精品国产成人久久av盗摄| 亚洲精品国产品国语在线app| 亚洲精品免费在线| 69堂精品视频| 欧美三级一区二区| 欧美一区二区三区性视频| 日韩一区二区在线看片| 国产日韩欧美在线一区| 国产精品国产三级国产aⅴ中文| 亚洲欧美在线视频观看| 亚洲电影激情视频网站| 九色综合狠狠综合久久| 99久久综合99久久综合网站| 欧美日韩亚洲综合在线| 欧美成人一区二区三区片免费| 亚洲精品一区二区三区蜜桃下载| 中文一区在线播放 | 精品欧美一区二区在线观看| 国产视频一区在线观看| 一区二区三区不卡视频在线观看| 日本特黄久久久高潮| 成人在线综合网站| 国产成人在线免费观看| 国产成人在线影院| av一区二区三区| 欧美电影在线免费观看| 久久久久九九视频| 一区二区三区毛片| 国产精品亚洲视频| 欧美色区777第一页| 久久久久久久久久看片| 亚洲免费色视频| 国产一区二区在线视频| 在线视频国内自拍亚洲视频| 国产欧美一区二区精品婷婷| 亚洲国产成人av网| 成人精品免费网站| 精品免费99久久| 三级成人在线视频| 成人精品国产一区二区4080| 日韩视频不卡中文| 丝瓜av网站精品一区二区| 成人精品小蝌蚪| av电影一区二区| 欧美一级黄色大片| 亚洲高清在线视频| 成人综合婷婷国产精品久久免费| 欧美肥妇bbw| 亚洲欧美日韩一区| 风间由美一区二区av101| 7777精品伊人久久久大香线蕉的 | 91片黄在线观看| 日本一区二区三区免费乱视频| 精品中文字幕一区二区小辣椒| 欧美日韩成人高清| 国产成人精品网址| 色婷婷久久综合| 久久久九九九九| 老司机免费视频一区二区| 欧美自拍偷拍午夜视频| 国产精品久久久久9999吃药| 国产精品 日产精品 欧美精品| 欧美一区二区精品在线| 一区二区理论电影在线观看| 99精品久久久久久| 最新日韩在线视频| 在线一区二区三区做爰视频网站| 国产精品久久二区二区| 91网上在线视频| 亚洲视频一区二区免费在线观看| youjizz国产精品| 自拍偷拍国产亚洲| 在线观看一区二区视频| 五月天久久比比资源色| 亚洲综合av网| 99久久精品国产麻豆演员表| 亚洲视频在线一区| 欧美特级限制片免费在线观看| 亚洲综合另类小说| 这里只有精品视频在线观看| 久久精品国产精品亚洲红杏| 久久精品欧美一区二区三区麻豆| 国产91精品欧美| 亚洲一区二三区| 欧美va亚洲va| 色婷婷久久久亚洲一区二区三区 | 亚洲欧洲av在线| 欧美色综合影院| 国产乱码精品一区二区三| 亚洲日本在线天堂| 欧美一级高清片在线观看| 成人免费高清在线观看| 五月婷婷综合在线| www一区二区| 在线免费观看成人短视频| 裸体一区二区三区| 日韩一区有码在线| 日韩精品在线一区| 91美女片黄在线观看| 久久超碰97人人做人人爱| 亚洲三级久久久| 欧美国产视频在线| 欧美大片日本大片免费观看| 一本色道a无线码一区v| 国产乱码精品一区二区三 | 一区二区三区国产精品| 精品国产一区二区三区不卡 | 日本免费在线视频不卡一不卡二| 精品嫩草影院久久| 欧美日韩国产成人在线免费| 国产综合久久久久影院| 婷婷国产v国产偷v亚洲高清| 亚洲国产成人午夜在线一区 | 欧美色中文字幕| 国产成人亚洲综合a∨猫咪| 午夜精品久久一牛影视| 一区在线观看免费| 久久精品一区四区| 精品国产乱码久久久久久蜜臀|