h5頁面嵌套APP中炕矮,在iOS中出現(xiàn)無法滑動問題

摘要


此bug出現(xiàn)需要條件:父元素需使用絕對定位absolute或固定定位fixed尚洽,使用overflow: scroll / auto(或overflow-y: scroll / auto)磨隘,內(nèi)部子元素是動態(tài)大兴狻(例如較大的svg document到忽,近似為內(nèi)嵌iframe橄教,等等)清寇。

描述:
最近在項目中遇見的,比較奇異护蝶。最外層的div設(shè)置定位华烟,里面的兩個模塊(main1、main2)設(shè)置了相對定位持灰。并且這兩個模塊通過v-if判斷盔夜,只能出現(xiàn)一個。main1里面有很多的其他元素組成堤魁,里面還分有多個小模塊喂链,且小模塊都設(shè)置有高度。main2是動態(tài)生成的圖片撐起來的高度妥泉,設(shè)置高度為100vh椭微,在main2內(nèi)只有定位設(shè)置一個信息提示。 結(jié)果:main1能正趁ち矗滑動蝇率,main2在iOS部分(當時是ios10.x,ios11.x)系統(tǒng)機器不能滑動刽沾。

bug出現(xiàn)原因:沒有相關(guān)官方文檔描述該bug本慕。在查閱文檔及自己測試的時候總結(jié):iOS safari 會將overflow:scroll的元素識別為一個單獨的 ScrollView,并予以一個 -webkit-overflow-scrolling 屬性為auto侧漓。而safari中的網(wǎng)頁本身就是一個大的ScrollView锅尘,在脫離文檔流的定位時,子元素的高度如果沒有在ScrollView建立之前確定布蔗,就不會觸發(fā)內(nèi)部滑動藤违,而會觸發(fā)外部滑動。

關(guān)于 -webkit-overflow-scrolling:Safari CSS Reference官方是這樣描述的:

Specifies whether to use native-style scrolling in an overflow:scroll element.

分析


1.父元素不脫離文檔流時何鸡,無此bug纺弊。
2.父元素在不指定 -webkit-overflow-scrolling:touch時必定出現(xiàn)無法滑動的問題。
3.當內(nèi)部元素為正常的html元素時骡男,無此bug。
4.當為父元素重新設(shè)置overflow屬性時傍睹,可能會導(dǎo)致safari重建ScrollView而bug消失隔盛。(之前版本的實驗室用這種方法解決的,但新海外版不能用這種方法fix拾稳,所以是可能)

解決方法


1.必須為所有在移動端的overflow: scroll元素增加屬性 -webkit-overflow-scrolling: touch吮炕。
2.當父元素可不脫離文檔流時不要脫離文檔流。
3.在子元素iframe加載完成后可異步將父元素的overflow: scroll屬性重寫(此方法可能不成功)访得。
4.如以上沒有解決龙亲,則給予子元素一個min-height陕凹,大小不限(略大于效果最好),幫助safari建立ScrollView(親測最有效)鳄炉。

后續(xù)


之后瀏覽文章的時候發(fā)現(xiàn)了原因杜耙,記錄下:
究其原因,是因為我在頁面上放了很多張圖片讓其自行占位拂盯,而在頁面剛加載時佑女,其他瀏覽器會預(yù)先獲取到圖片的大小而給其一個占位,無論圖片是否加載完成頁面總高度固定的谈竿。而safari就不一樣团驱,圖片沒加載成功時高度是0。
圖片沒加載成功時高度是0!!!!哦豁空凸,這個要牢記嚎花,以后能多避坑

safari瀏覽器在渲染頁面元素的時候,會預(yù)先走webkit瀏覽器的渲染流程:
1.構(gòu)建DOM tree
2.構(gòu)建CSS rule tree
3.根據(jù)DOM和CSS tree來構(gòu)建render tree
4.根據(jù)render tree計算頁面的layout
5.render頁面

注意在第三步和第四步的時候呀洲,safari瀏覽器在構(gòu)建render tree的時候贩幻,會預(yù)先找到相應(yīng)的overflow: scroll元素,在計算頁面layout的時候两嘴,會計算父元素的高度與子元素的高度丛楚,若子元素高于父元素,則在render頁面時為其建立一個原生的scrollView憔辫。

這個scrollView有什么用的趣些?其實就是為了給其一個彈彈樂的效果(但確實用戶體驗不錯)。

當子元素是某個媒體格式時贰您,比如img坏平、object(svg)等,safari在加載完成之前是不會在計算在layout之內(nèi)的锦亦,也就是高度為0舶替,則子元素的高度就一定小于父元素的高度,safari不會給父元素一個原生的scrollView杠园。

參考鏈接: https://segmentfault.com/a/1190000012761272

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顾瞪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抛蚁,更是在濱河造成了極大的恐慌陈醒,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞧甩,死亡現(xiàn)場離奇詭異钉跷,居然都是意外死亡,警方通過查閱死者的電腦和手機肚逸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門爷辙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彬坏,“玉大人,你說我怎么就攤上這事膝晾∷ㄊ迹” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵玷犹,是天一觀的道長混滔。 經(jīng)常有香客問我,道長歹颓,這世上最難降的妖魔是什么坯屿? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮巍扛,結(jié)果婚禮上领跛,老公的妹妹穿的比我還像新娘。我一直安慰自己撤奸,他們只是感情好吠昭,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胧瓜,像睡著了一般矢棚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上府喳,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天蒲肋,我揣著相機與錄音,去河邊找鬼钝满。 笑死兜粘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的弯蚜。 我是一名探鬼主播孔轴,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碎捺!你這毒婦竟也來了路鹰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤牵寺,失蹤者是張志新(化名)和其女友劉穎悍引,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帽氓,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年俩块,在試婚紗的時候發(fā)現(xiàn)自己被綠了黎休。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浓领。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖势腮,靈堂內(nèi)的尸體忽然破棺而出联贩,到底是詐尸還是另有隱情,我是刑警寧澤捎拯,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布泪幌,位于F島的核電站,受9級特大地震影響署照,放射性物質(zhì)發(fā)生泄漏祸泪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一建芙、第九天 我趴在偏房一處隱蔽的房頂上張望没隘。 院中可真熱鬧,春花似錦禁荸、人聲如沸右蒲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瑰妄。三九已至,卻和暖如春映砖,著一層夾襖步出監(jiān)牢的瞬間间坐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工啊央, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眶诈,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓瓜饥,卻偏偏與公主長得像逝撬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乓土,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容