移動端ios上彈窗loading被隱藏
阿新 • • 發佈:2020-12-08
控制元素層級可通過z-index
和transform
來實現。
1、通過z-index
控制z
軸,需要配合position
屬性,且position
的屬性值為relative
、absolute
、fixed
和sticky
時。並且給z-index
顯式的設定數值,數值越大,其層級越高。簡單點說,數值越高,元素越在頂上。
2、transform
可以通過它的translateZ()
來改變元素的層疊順序,其值越大,越在頂層,離螢幕越近。不過通過transform:translateZ()
改變元素z
軸的層級,必須在元素的父元素中顯示的設定transform-style: preserve-3d
或者在transform
perspective()
。
問題:
ios上transform:translateZ(100px) 居然能作用在zindex上,在安卓則正常。
在ios上如果祖先元素沒有overflow:hidden/scroll/auto等限制,則會直接忽略自身和其他元素的z-index層疊順序設定,而直接使用真實世界的3D視角進行渲染。
解決方案:
-
方法1:父級,任意父級,非
body
級別,設定overflow:hidden
可恢復和其他瀏覽器一樣的渲染 -
方法2:都使用3D transform變換。transform: translateZ(100px);
- 方法3:都使用z-index控制
z-index
::before
或者::after
時讓其z
軸在元素的底部,特別是碰到大的元素渲染(比如全屏背景圖),會直接影響效能,特別是在移動端,會造成客戶端閃退,也就是大家所說的Crash,給使用者造成非常不好的體驗。
因而推薦通過transform
中的translateZ()
或者translate3d()
來控制z
軸的順序。