移動(dòng)端 H5 盡量不要使用 position: fixed

蘋果會(huì)對(duì)position: fixed的元素位置做調(diào)整嘹黔,這件事情已經(jīng)遇到兩次了该园。

問題

移動(dòng)端開發(fā)中為了實(shí)現(xiàn)一個(gè)居中的彈窗,我們經(jīng)常會(huì)做一個(gè){position: fixed; height: 100%}的半透明蒙層,然后相對(duì)這個(gè)蒙層增加一個(gè)子節(jié)點(diǎn)间护,實(shí)現(xiàn)彈窗企蹭。彈窗里可能是一句簡單提示加一個(gè)確定按鈕白筹;或者有一些相對(duì)復(fù)雜的交互,比如 modal 框里要用戶填寫一些信息谅摄。

2017年3月份遇到的一個(gè)問題是徒河,在 Safari 里,點(diǎn)擊到 modal 框里 <input /> 時(shí)送漠,modal 框會(huì)如下圖所示“閃爍”顽照,這個(gè)問題后來在 iOS 11 發(fā)布后,在 iOS 微信里也出現(xiàn)了闽寡,應(yīng)該是 WKWebview 做的“優(yōu)化”代兵。

image

我最近在 iPhone X 上遇到的問題時(shí),當(dāng)頁面滾動(dòng)到底部時(shí)下隧,position: fixed的元素會(huì)被頂上去奢人。這里和一些 iPhone X 適配文章上說的bottom: 0仍距離底部有 34px 的空白、要設(shè)置viewport-fit=cover不一樣淆院,在我看來這里更像是 iOS 處理 fixed 元素的 bug.

image

(正常的.login)

image

(滾動(dòng)到頁面底部時(shí)何乎,.login顯示仍然靠在底部,但是實(shí)際元素被頂了上去土辩。用戶點(diǎn)擊事件也是選中的區(qū)域在響應(yīng)支救,這是不可接受的)

我的頁面會(huì)遇到這個(gè)問題是因?yàn)橥ㄟ^指定 viewport 寬度來實(shí)現(xiàn)頁面的響應(yīng)式適配,如下拷淘。

<meta name="viewport" content="width=321, user-scalable=no, viewport-fit=cover" />

這里應(yīng)該是 iOS 在處理 viewport 縮放和避讓 iPhone X 底部功能區(qū)域時(shí)各墨,出現(xiàn)了 bug.

這里有一個(gè) demo,可以使用 iPhone X 或 XCode 模擬器的 Safari 查看:

iPhone X reach bottom bug with viewport width?codepen.io

解決方案

解決方案不是很優(yōu)雅启涯,因?yàn)轫?xiàng)目本身已經(jīng)比較穩(wěn)定贬堵,影響頁面眾多,只能暫時(shí)針對(duì) iPhone X 進(jìn)行修復(fù)结洼。

當(dāng)動(dòng)態(tài)向頁面增加 fixed 蒙層時(shí)黎做,將主要內(nèi)容節(jié)點(diǎn)(一個(gè)很長的容器)改成position: absolute,計(jì)算內(nèi)容的scrollTop松忍,作為marginTop賦值給它蒸殿,以此實(shí)現(xiàn)用戶基本無感知后面的內(nèi)容頁面被改動(dòng)了(實(shí)際上在不同 webview 內(nèi)會(huì)有不同程度的一個(gè)閃爍)。

關(guān)閉蒙層的時(shí)候,再逆操作剛剛的步驟宏所,將“被截?cái)唷钡膬?nèi)容節(jié)點(diǎn)再還原酥艳。

更好的解決方案

更好的解決方案,即是如標(biāo)題所述爬骤,盡量避免在移動(dòng)端開發(fā)中使用position: fixed充石,而是更多使用更現(xiàn)代的布局方式和position: absolute來實(shí)現(xiàn)類似需求。

原文來自知乎https://zhuanlan.zhihu.com/p/33479001

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末霞玄,一起剝皮案震驚了整個(gè)濱河市赫冬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溃列,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膛薛,死亡現(xiàn)場(chǎng)離奇詭異听隐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)哄啄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門雅任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咨跌,你說我怎么就攤上這事沪么。” “怎么了锌半?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵禽车,是天一觀的道長。 經(jīng)常有香客問我刊殉,道長殉摔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任记焊,我火速辦了婚禮逸月,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遍膜。我一直安慰自己碗硬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布瓢颅。 她就那樣靜靜地躺著恩尾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惜索。 梳的紋絲不亂的頭發(fā)上特笋,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼猎物。 笑死虎囚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔫磨。 我是一名探鬼主播淘讥,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堤如!你這毒婦竟也來了蒲列?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤搀罢,失蹤者是張志新(化名)和其女友劉穎蝗岖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榔至,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抵赢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唧取。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铅鲤。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枫弟,靈堂內(nèi)的尸體忽然破棺而出邢享,到底是詐尸還是另有隱情,我是刑警寧澤淡诗,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布骇塘,位于F島的核電站,受9級(jí)特大地震影響袜漩,放射性物質(zhì)發(fā)生泄漏绪爸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一宙攻、第九天 我趴在偏房一處隱蔽的房頂上張望奠货。 院中可真熱鬧,春花似錦座掘、人聲如沸递惋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萍虽。三九已至,卻和暖如春形真,著一層夾襖步出監(jiān)牢的瞬間杉编,已是汗流浹背超全。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邓馒,地道東北人嘶朱。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像光酣,于是被迫代替她去往敵國和親疏遏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360