此bug出現須要條件:父元素需使用絕對定位absolute或固定定位fixed,使用overflow: scroll / auto(或overflow-y: scroll / auto),內部子元素是動態大小(例如較大的svg document,近似爲內嵌iframe,等等)。html
bug出現緣由:沒有相關官方文檔描述該bug。在查閱文檔及本身測試的時候總結:iOS safari 會將overflow:scroll的元素識別爲一個單獨的 ScrollView,並予以一個 -webkit-overflow-scrolling 屬性爲auto。而safari中的網頁自己就是一個大的ScrollView,在脫離文檔流的定位時,子元素的高度若是沒有在ScrollView創建以前肯定,就不會觸發內部滑動,而會觸發外部滑動。web
關於 -webkit-overflow-scrolling:Safari CSS Reference官方是這樣描述的:segmentfault
Specifies whether to use native-style scrolling in an overflow:scroll element.
即該屬性會讓overflow:scroll的元素擁有像iOS原生同樣順滑的滑動效果。爲了實現此目標,safari將全部overflow:scroll的元素用原生建立一個ScrollView,當-webkit-overflow-scrolling屬性爲touch時,啓用硬件加速,出現順滑效果。瀏覽器
據以上分析以及大量測試得出完美解決方法爲:異步
此問題的深層緣由找到了,詳情請見:iOS safari瀏覽器上overflow: scroll元素沒法滾動bug深究svg