在ios系统的浏览器中, 如果想让可滚动元素(例如有overflow: scroll属性的元素)带有弹性效果, 往往会给可滚动元素添加-webkit-overflow-scrolling: touch属性.
但这个属性有个bug, 可能会导致其内部的某些元素不显示.看起来就好象给元素加上了visibility:hidden一样.
为了修复这个bug, 需要给"某些"后代元素添加transform: translate3d(0,0,0)属性.
1 | div { |
这里之所以称"某些",是因为无法确定到底应该加到哪些元素之上.
因为translate3d会产生很多副作用, 例如会改变元素的z-index, 要依具体情况而定.
需注意的是这个方法也不一定总是有效.
另外,有些教程会很极端的给所有元素都加上了translate3d.
这样不仅会改变元素顺序,还会生成大量无法合并的合成层.
1 | // 一个糟糕的样式,最好不要这么作 |
参考
-webkit-overflow-scrolling设置为touch的一个bug
https://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela
无线性能优化:Composite | Taobao FED | 淘宝前端团队