webkit-overflow-scrolling-touch兼容性

爲了項目在移動端體驗起來更加流暢,我們通常給元素設置 -webkit-overflow-scrolling: touch; 屬性來實現,具體原因,CSS參考手冊給了詳細的解釋

也就是說:這個屬性是通過設置滾動的回彈效果,讓頁面在滑動的時候看起來流暢。

但當我在項目裏面給 body 設置這個屬性,同時給某個元素設置 overflow:scroll,並且這個元素裏面存在 fiexd 定位的子元素,此時發現,固定定位元素無法顯示,即使我給固定定位的元素設置 z-index:980 來提高他的層級,問題依然存在。
剛開始以爲是 ios 系統升級導致的,理由如下:

第一:這個 -webkit-overflow-scrolling: touch; 屬性之前用過,但是沒有遇到過今天所出現的定位元素無法顯示的問題。
第二:這個問題在 ios 下才會存在,Android 不存在這個問題。

經過調試發現,如果去掉固定定位元素的父元素的 overflow:scroll 屬性,定位元素就可以顯示。但是通過去掉父元素滾動的屬性來解決這個問題,不是一個好的方案。關鍵還是需要找到問題的本質原因。

經過研究發現,這個問題很早就存在,現在也一直存在,而且 Android 之所以不存在這個現象,是因爲 Android 壓根不支持 -webkit-overflow-scrolling: touch; 這個屬性,而 ios 存在問題,恰恰是因爲 ios 支持了這個屬性,但是它處理的機制是:
如果一個元素同時存在 -webkit-overflow-scrolling: touch;overflow:scroll屬性,固定定位的元素會在容器發生滾動的時候,跟着一起往上或者線下滾動,同時固定定位元素也就失去了固定定位的效果。所以這也就是上面爲什麼,我設置了z-index:980依然無法解決問題 原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章