在平常開發中,咱們常常須要用到z-index這個屬性來實現一些浮層層疊的交互,z-index的屬性值有auto和nubmer數字2種,數值越大,層級越高,看上去很好理解,很好使用。但實際上,咱們在使用中仍會遇到一些讓人疑惑的問題。chrome
疑惑:爲啥我這個浮層設的z-index比另一個高,卻怎麼仍是在它的下面啊?瀏覽器
首先,咱們仍是要明確下幾種瀏覽器是如何對z-index解析的,以及結合瀏覽器是如何渲染頁面的。佈局
.a{width:200px;height:200px;background:red;position:relative;}
.b{width:200px;height:100px;background:blue;position:relative;}
.c{width:110px;height:100px;background:yellow;position:absolute;top:-100px;left:20px;z-index:1}
.d{width:100px;height:100px;background:green;position:absolute;top:10px;left:10px;z-index:10}開發
<body>
<div class="b"><div class="d">d</div></div>
<div class="a"><div class="c">c</div></div>
</body>it
根本緣由就是chrome和ff他們父節點沒有設置z-index,不參與層級pk,c和d就按照自身的z-index大小pk,因此d蓋住c;而ie下,父節點沒有設置z-index,會以z-index:0參與比較,而a和b同級節點z-index都是0(都沒有設置z-index屬性),層級同樣,則按前後順序覆蓋了,即c蓋住d;若是給b設置z-index:1,則結果相反。io
5. 經過父節點設置position:relative,能夠把父元素的z-index屬性做用到子節點上,若是層級很深的話能夠這樣作。class
經過了解上面幾點,咱們應該就清楚了爲何層級有時候「不受控制」。容器
另外:在在開發浮層組件,若是bubble,panel等的時候,不要插入到使用的容器元素裏,而應該往body中插入,這樣就能把元素跑到外層,z-index設置的就很容易參與比較了,而不會被「平白無故」的被覆蓋。渲染
我的理解,若是不許確的地方,還望不吝指點!謝謝!float