本篇文章由:http://xinpure.com/position-fixed-encountered-an-invalid-event/
第一次無效事件
事件主角: transform
應用環境: Chrome/FireFox
事件回顧:
這是在使用 iscroll js滾動庫的時候,遇到的問題
當時的需求是需要在滾動到一定的距離的時候,將一個 tab 列表固定到頂部,不隨頁面滾動
固定定位元素嘛,小事!我們知道這是一個非常普通的需求,實現方式也比較簡單,那就是使用 position: fixed
就可以將元素固定到瀏覽器的指定位置了
而我也照做了,令人無語的是,完全沒有效果?! (僅僅只是 position: absolute
的效果)
后來經過一番調試之后,發現是因為父元素有一個 transform
屬性,導致了這個問題的出現。
因為 iscroll 是基於 transform
屬性實現滾動的, 所以 iscroll 會通過實時修改元素的 transform
屬性以達到滾動的效果
也就是說,只要父元素如果存在 transform
屬性,子元素的 position: fixed
屬性無效。
Google:
https://bugs.chromium.org/p/chromium/issues/detail?id=20574
"position: fixed" still do not cope with transform value
這個解釋好有道理!
鏈接中也有提到說給子元素添加 -webkit-transform: translateZ(0);
就可以解決這個問題
我只能說親測無效!
百度:
http://www.zhangxinxu.com/wordpress/2015/05/css3-transform-affect/
第二次無效事件
事件主角: -webkit-overflow-scrolling
應用環境: 手機Web應用
事件回顧:
在 Mobile Web 開發中,用戶體驗是個非常重要的點。
所以像平滑滾動的特性是少不了的,通常會使用 -webkit-overflow-scrolling
實現這一效果
該屬性控制元素在移動設備上是否使用滾動回彈效果。
-webkit-overflow-scrolling: touch; /* 當手指從觸摸屏上移開,會保持一段時間的滾動 */
-webkit-overflow-scrolling: auto; /* 當手指從觸摸屏上移開,滾動會立即停止 */
不巧,這次我又有個將元素設置成 position: fixed 的需求
在有上次的經歷(transform)后,並沒有讓我長什么記性,不過說實話,position 這原本就是一個特別簡單的一個屬性,又怎么會。。。
只能說話音剛落,瞬間就蒙逼了!又是無效!心中草泥馬縱橫交錯!
最后也是發現,只要父元素的 -webkit-overflow-scrolling
屬性值為 touch
,子元素的 position: fixed
屬性就無效。
Google:
百度:
Not Found