爲了項目在移動端體驗起來更加流暢,我們通常給元素設置 -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
依然無法解決問題 原因。