CSS基礎:層疊順序和層疊上下文

簡介css

  在考慮到兩個元素可能重疊的狀況下,層疊順序決定了那個元素在前面,那個元素在後面,這是針對普通元素而言。而層疊上下文和塊級格式化上下文 (BFC) 同樣,基本上也是由一些 CSS 屬性建立的,它單獨做爲一個體系,也就是說內容的層疊順序是以容器的層疊順序爲基準的,而與容器外部元素的層疊順序無關,層疊上下文的建立能夠分爲如下三類:html

(1) 頁面根元素天生具備層疊上下文,稱爲根層疊上下文佈局

(2) "z-index" 爲數值的定位元素擁有本身的層疊上下文,數值越大,層疊順序越高flex

(3) 某些 CSS3 屬性也擁有本身的層疊上下文spa

 

元素的層疊順序3d

  如圖所示:code

(1) 層疊順序大的元素會覆蓋較小的元素orm

(2) 層疊順序相同時,處於 DOM 流中後面的元素會覆蓋前面的元素htm

(3) "background/border" 特指層疊上下文元素的背景和邊框,若是一個元素是普通元素,沒有建立單獨的層疊上下文,而且它的子代有負的 "z-index",那這個子代就會隱藏在背景後面,由於它的子代是相對於根層疊上下文決定的。blog

示例1:

<!-- html -->
<
div class="box"> <div class="order1"></div> </div>
//css
.box {
  width: 200px;height: 200px;
  background: lightblue;
}
.order1 {
  width: 150px;height: 150px;
  background: red;
  position: relative;
  z-index: -1;
}

運行結果:

示例2:

//css
.box {
  width: 200px;height: 200px;
  background: lightblue;
  position: relative;
  z-index: 1;
}
.order1 {
  width: 150px;height: 150px;
  background: red;
  position: relative;
  z-index: -1;
}

運行結果:

(4) "z-index:auto" 和 "z-index:0" 雖然層疊順序同樣,也就是遵循規則 (2) 中 "後來者居上" 的原則,可是它們的區別在於後者會建立單獨的層疊上下文。

示例1:

<!-- html -->
<div class="box">
  <div class="order1"><div class="child1"></div></div>
  <div class="order2"><div class="child2"></div></div>
</div>
//css
.box {
  height: 300px;
  position: relative;
  z-index: 1;
}
.order1 {
  width: 250px;height: 250px;
  background: red;
  position: absolute;
  z-index: auto;
}
.order1 .child1 {
  width: 50px;height: 50px;
  background: yellow;
  position: relative;
  z-index: 2;
}
.order2 {
  width: 200px;height: 200px;
  background: green;
  position: absolute;
  z-index: auto;
}
.order2 .child2 {
  width: 100px;height: 100px;
  background: blue;
  position: relative;
  z-index: 1;
}

運行結果:

因爲 "order1" 和 "order2" 的 "z-index:auto",雖而後者覆蓋了前者,可是沒有建立新的層疊上下文,所以它們的子代的層疊順序實際上是相對於同一個 "根層疊上下文",因此 "z-index" 值大的元素位於前面。

示例2:

  將 "order1" 和 "order2" 設置爲 "z-index:0"

運行結果:

同理,後者覆蓋了前者,同時 "z-index:0" 建立了新的層疊上下文,子代層疊順序是相對於父容器決定的,而 "order1" 已經被 "order2" 覆蓋,其子代不管將 "z-index" 設置爲多大都沒法影響父容器外部的層疊順序。

(5) 定位元素的 "z-index" 屬性默認生效,而且值爲 "auto",這也是爲何定位元素的層疊順序要高於塊級、浮動和內聯元素的緣由

(6) CSS3 中某些新屬性會建立新的層疊上下文,層疊順序與 "z-index:auto" 相同,例如:"flex" 佈局的元素,"opacity" 不爲1的元素,"transform" 不是1的元素...

相關文章
相關標籤/搜索