校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

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

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

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

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

前言

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

1. 安全區域是什么意思?

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

安全區域

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

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

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

2. 在微信小程序上適配安全區域

三種方案:

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

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

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

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

這樣做要有一個前提,需要判斷當前機型是需要適配安全區域的機型。

問題:如何判斷當前機型是需要適配安全區域

2種方案:

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

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

已知市面上已有的帶安全區域的蘋果設備包括iPhone X、iPhone XR、iPhone XS Max、iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max,所以可以直接從getSystemInfoSync()方法中拿到model屬性進行判斷。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及其他包含安全區域的機型手機
const isIPhoneX = () => {
  let model = wx.getSystemInfoSync().model
  return (model.search(IPHONE_X) > -1 || model.search(IPHONE_X_11) > -1 ||
    model.search(IPHONE_UNKNOWN) > -1)
}

//也可以使用正則表達式判斷
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,如果相等則說明不需要適配,不相等則需要適配。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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上適配安全區域

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

viewport-fit 默認有3個值:

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

contain和cover具體區別如下圖:

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

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

同時設置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 來隔離兼容樣式,當瀏覽器支持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安全區域(Safe Area)底部小黑條在微信小程序和H5適配的總結。

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

參考文章:

網頁適配 iPhoneX,就是這么簡單

蘋果官方開發者文檔關于屏幕適配的說明

微信小程序吸底區域適配iPhone X

微信小程序適配 iPhone X 總結

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

標簽:綏化 萍鄉 金昌 中山 阿壩 盤錦 聊城 赤峰

巨人網絡通訊聲明:本文標題《iPhoneX安全區域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配》,本文關鍵詞  iPhoneX,安全,區域,Safe,Area,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《iPhoneX安全區域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配》相關的同類信息!
  • 本頁收集關于iPhoneX安全區域(Safe Area)底部小黑條在微信小程序和H5的屏幕適配的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    69堂成人精品免费视频| 欧美精品久久一区二区三区| 99精品视频在线免费观看| 久久久精品国产免费观看同学| 久久成人久久鬼色| 欧美激情一区二区三区不卡| 成人的网站免费观看| 中文字幕一区视频| 日本精品裸体写真集在线观看| 亚洲成人激情社区| 精品国产自在久精品国产| 国产精品88888| 亚洲免费三区一区二区| 欧美裸体一区二区三区| 久久机这里只有精品| 中文字幕国产一区| 欧美三级韩国三级日本一级| 韩国三级电影一区二区| 亚洲女爱视频在线| 精品国产百合女同互慰| 欧洲一区二区三区在线| 久久狠狠亚洲综合| 亚洲精品在线一区二区| 91网站在线播放| 久久99精品国产麻豆婷婷| 日韩美女视频一区| 日韩欧美一级片| 一本高清dvd不卡在线观看| 久久国产精品露脸对白| 亚洲第一成人在线| 中文幕一区二区三区久久蜜桃| 欧美一区二区三区日韩视频| 日本韩国一区二区| 成人中文字幕合集| 麻豆国产一区二区| 亚洲一区二区三区不卡国产欧美| 久久综合色8888| 在线不卡一区二区| 在线观看日产精品| 91丨九色丨黑人外教| 国模一区二区三区白浆| 天涯成人国产亚洲精品一区av| 国产精品国产三级国产三级人妇 | 日韩写真欧美这视频| 一本一道综合狠狠老| 成人网男人的天堂| 国产综合色视频| 狠狠色综合色综合网络| 美日韩一区二区| 麻豆国产一区二区| 国内精品久久久久影院薰衣草 | 国产精品色眯眯| 久久久蜜桃精品| 日韩欧美中文一区| 3d成人h动漫网站入口| 欧美一级片免费看| 欧美一级一级性生活免费录像| 7777精品伊人久久久大香线蕉的 | 精品电影一区二区| 欧美精品一区二区三区在线| 欧美不卡一区二区三区四区| 亚洲精品一区二区三区精华液| 亚洲精品一区二区三区99| 国产亚洲精品久| 国产精品成人一区二区艾草 | 91精品国产综合久久福利软件| 欧美日韩mp4| 欧美日韩在线观看一区二区 | 国产.欧美.日韩| av不卡在线观看| 一本色道久久加勒比精品| 一本久道中文字幕精品亚洲嫩| 欧美三级日韩三级| 精品99999| 综合分类小说区另类春色亚洲小说欧美 | 亚洲一级二级在线| 日韩二区三区在线观看| 蜜臀av一区二区在线免费观看| 国产精品一级黄| 色88888久久久久久影院按摩| 欧美一区二区网站| 国产精品三级电影| 中文字幕一区二区在线观看| 中文字幕一区在线观看| 午夜精品爽啪视频| 国产福利一区二区三区视频在线 | 狠狠v欧美v日韩v亚洲ⅴ| 9i看片成人免费高清| 777色狠狠一区二区三区| 欧美激情一区二区三区在线| 亚洲图片欧美色图| 国产一区二区三区在线观看免费 | 99re免费视频精品全部| 欧美人与性动xxxx| 欧美一卡二卡三卡四卡| 国产精品久久久久久久久图文区| 一色屋精品亚洲香蕉网站| 亚洲自拍都市欧美小说| 久久成人麻豆午夜电影| 一本到不卡精品视频在线观看| 欧美另类z0zxhd电影| 国产日韩一级二级三级| 亚洲bdsm女犯bdsm网站| 国产成人8x视频一区二区 | 欧美怡红院视频| 国产欧美日韩亚州综合| 午夜欧美一区二区三区在线播放| 国产乱码字幕精品高清av | 日本一道高清亚洲日美韩| 97se亚洲国产综合自在线不卡| 久久亚洲精品国产精品紫薇| 午夜精品久久久久久久99水蜜桃| 成人av网站大全| 久久久久久日产精品| 秋霞成人午夜伦在线观看| 在线视频欧美区| 综合久久国产九一剧情麻豆| 成人亚洲一区二区一| 久久夜色精品国产噜噜av| 蜜臀a∨国产成人精品| 欧美浪妇xxxx高跟鞋交| 亚洲一二三区不卡| 99国产精品一区| 国产精品麻豆久久久| 国产成人一级电影| 久久嫩草精品久久久久| 麻豆久久一区二区| 日韩欧美专区在线| 日韩1区2区日韩1区2区| 在线电影一区二区三区| 亚洲电影你懂得| 欧美日韩国产a| 午夜视频在线观看一区二区| 欧美日韩和欧美的一区二区| 亚洲线精品一区二区三区| 欧美亚洲综合网| 亚洲综合丝袜美腿| 欧美日韩在线不卡| 奇米影视7777精品一区二区| 日韩欧美一卡二卡| 国产在线视频一区二区三区| 精品国产3级a| 成人久久18免费网站麻豆| 国产精品免费久久久久| 色综合天天在线| 一区二区三区丝袜| 99精品久久只有精品| 有坂深雪av一区二区精品| 欧美亚洲愉拍一区二区| 免费观看一级欧美片| 久久品道一品道久久精品| av中文字幕不卡| 亚洲综合丝袜美腿| 日韩精品自拍偷拍| 成人午夜电影网站| 亚洲一二三四在线| 欧美视频一二三区| 国产一区二区中文字幕| 亚洲色图19p| 日韩欧美第一区| 成人亚洲精品久久久久软件| 亚洲综合免费观看高清完整版在线| 91精品久久久久久蜜臀| 国产成人综合在线| 亚洲午夜日本在线观看| 久久精品亚洲精品国产欧美kt∨| 99精品一区二区三区| 老司机午夜精品| 亚洲理论在线观看| 欧美一级在线免费| 色综合天天综合网天天狠天天 | 午夜精品一区二区三区三上悠亚| 久久综合中文字幕| 在线观看日韩一区| 精品午夜一区二区三区在线观看| 亚洲精品精品亚洲| www国产亚洲精品久久麻豆| 日本精品免费观看高清观看| 国产精品一区二区不卡| 水蜜桃久久夜色精品一区的特点| 国产精品短视频| 久久久亚洲国产美女国产盗摄| 欧美日韩国产经典色站一区二区三区| 国内一区二区在线| 亚洲成精国产精品女| 国产精品麻豆视频| 久久久www免费人成精品| 欧美日韩国产一级片| 91黄色免费观看| 国产福利一区二区| 麻豆精品视频在线| 视频一区二区中文字幕| 亚洲精品第一国产综合野| 欧美极品美女视频| 久久久不卡网国产精品二区| 日韩精品一区二区三区中文精品| 欧美色图片你懂的| 日本韩国欧美三级| 99久久婷婷国产综合精品电影| 国产精品一区三区|