這幾天開發的時候遇到了個問題,如圖1。css
寫了個demo demo 地址html
因爲頁面並無進行總體縮放,致使在小屏幕手機上顯示會有異常。PM要求可以顯示最後一個完整的標籤。css3
當在iPhone5手機上查看頁面的時候,因爲設置了height
以及overflow:hidden
後面的標籤被隱藏了。可是邊框是用before僞元素實現的,並無由於overflow:hidden
而一塊兒隱藏(後面再探討這種邊框的不一樣實現方式)。git
搜索解決方式時一直關注的是overflow:hidden
失效,而沒有想過是由於使用了transform
的影響。github
網上搜到了一種解決方式:瀏覽器
在父元素上添加:transform-style:preserve-3d
試了下,果真好了,然而。。。換個手機,換個瀏覽器就不行了。這個屬性存在兼容性問題。wordpress
那既然跟transform
有關,試一下transform:translateZ(0)
,發現問題解決了,試了多個手機和瀏覽器,沒有兼容性的問題。spa
在解決問題的過程當中,發現了另外一種解決辦法,在父元素上添加position:relative
。這也就是說,是由於overflow:hidden
失效了致使了這樣的問題,而與是否使用了transform
沒有直接的關係(我把transform
去掉,仍然有圖1的問題,只能說使用transform
能夠解決問題)。3d
緣由能夠看這個文章 overflow:hidden失效code
從這個角度進行分析的話,由於咱們的before
僞元素使用了absolute
絕對定位,且外層沒有定位,致使了這個before
元素沒有成功被隱藏,而相應的tag元素,因爲沒有設置定位,因此正常隱藏了。
那爲何使用了transform:translateZ(0)
以後,問題也可以解決呢?
參考這個文章 transform對元素的影響
absolute絕對定位元素,若是含有overflow不爲visible的父級元素,同時,該父級元素以及到該絕對定位元素之間任何嵌套元素都沒有position爲非static屬性的聲明,則overflow對該absolute元素不起做用。
這裏涉及到層疊上下文的問題 能夠參考 層疊上下文
當使用transform:translateZ(0)
時,生成了新的層,覆蓋在了上面。
有的手機使用了transform以後仍然會出現上述問題,因此,更好的解決方式應該是設置position