国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

層疊上下文【stacking context】與層疊順序【stacking order】

Developer / 2311人閱讀

摘要:層疊上下文可以嵌套,內部層疊上下文及其所有子元素均受制于外部的層疊上下文。例當按以下設置,則出現紅色在綠色之上的效果。如何觸發觸發一個元素形成層疊上下文有以下方法,摘自根元素值不為的絕對相對定位一個值不為的項目,即父元素。

層疊上下文【stacking context】

對于stacking context,在MDN中的描述是

Stacking context is the three-dimensional conceptualization of HTML
elements along an imaginary z-axis relative to the user who is assumed
to be facing the viewport or the webpage.HTML elements occupy this
space in priority order based on element attributes.

翻譯過來是:
層疊上下文是HTML元素的三維概念,這些HTML元素在一條假想的相對于面向(電腦屏幕的)視窗或者網頁的用戶的 z 軸上延伸,HTML 元素依據其自身屬性按照優先級順序占用層疊上下文的空間。
z軸即用戶與屏幕間看不見的垂直線。

層疊水平【stacking level】

層疊水平順序決定了同一個層疊上下文中元素在z軸上的顯示順序

層疊順序【stacking order】

關于這個,有一張圖形可以形象的說明

不過上面圖示的說法有一些不準確,按照 W3官方 的說法,準確的 7 層為:

the background and borders of the element forming the stacking context.

the child stacking contexts with negative stack levels (most negative first).

the in-flow, non-inline-level, non-positioned descendants.

the non-positioned floats.

the in-flow, inline-level, non-positioned descendants, including inline tables and inline blocks.

the child stacking contexts with stack level 0 and the positioned descendants with stack level 0.

the child stacking contexts with positive stack levels (least positive first).

翻譯過來是:

形成層疊上下文環境的元素的背景與邊框

擁有負 z-index 的子堆疊上下文元素 (負的越高越堆疊層級越低)

正常流式布局,非 inline-block,無 position 定位(static除外)的子元素

無 position 定位(static除外)的 float 浮動元素

正常流式布局, inline-block元素,無 position 定位(static除外)的子元素(包括 display:table 和 display:inline )

擁有 z-index:0 的子堆疊上下文元素

擁有正 z-index: 的子堆疊上下文元素(正的越低越堆疊層級越低)

一個普通元素具有了層疊上下文,其層疊順序就會變高。那它的層疊順序究竟在哪個位置呢?
這里需要分兩種情況討論:

如果層疊上下文元素不依賴z-index數值,則其層疊順序是z-index:auto可看成z:index:0級別;

如果層疊上下文元素依賴z-index數值,則其層疊順序由z-index值決定。

所以為什么定位元素會層疊在普通元素的上面?其根本原因就在于,元素一旦成為定位元素,其z-index就會自動生效,此時其z-index就是默認的auto,也就是0級別,根據上面的層疊順序表,就會覆蓋inline或block或float元素。

不支持z-index的層疊上下文元素天然z-index:auto級別,也就意味著,層疊上下文元素和未設置z-index的定位元素是一個層疊順序的,于是當他們發生層疊的時候,遵循的是“后來居上”準則。

層疊上下文可以嵌套,內部層疊上下文及其所有子元素均受制于外部的層疊上下文。

如何比較兩元素的上下關系

在同一個層疊上下文中,則根據7階層疊水平比較。若兩元素在同一層疊水平,則后來居上,即在DOM流中處于后面的元素會覆蓋前面的元素。
在不同的層疊上下文中,則直接比較父元素的層疊水平:
若父元素的z-index不同,則z-index數值越大,越在上面。
若父元素的z-index相同,則在DOM流中處于后面的元素會覆蓋前面的元素。

注:

比較時,先看兩個元素是不是在同一個父元素之下,若不是,則一層層往上找,直到找到其祖先元素在同一級時停止。然后,再依次往下尋找各自的子元素,找到第一個是層疊上下文元素的子元素后進行比較。

子元素的 z-index 值只在父級層疊上下文中有意義。即父元素的 z-index 低于父元素另一個同級元素,子元素 z-index再高也沒用。

例:


    
div1-1-1
div2-1-1

當css按以下設置,則出現紅色在綠色之上的效果。
原因:要比較div-1-1與div2-1-1的上下,則先找到div1與div2在同一層級。而div1為普通元素,div1-1為層疊上下文元素,div2為層疊上下文元素,所以這時候div2與div1,div1-1在同一 個層疊上下文,而div1-1的z-index為1,div2的z-index為1,DOM流中div2在div1-1之后,所以紅色在綠色之上。若此時將div1-1的z-index設置為2時,則會出現綠色在紅色之上的效果。

.div2 {
    position: absolute;
    z-index: 1;
}

.div1-1 {
    position: absolute;
    z-index: 1;
}

.div2-1 {
    position: absolute;
    z-index: 2;
}

.div1-1-1 {
    background-color: rgba(20, 150, 150, 0.9);
    width: 100px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    border: 1px dashed #e6e6e6;
    font-size: 16px;
    position: absolute;
    z-index: 2;
}

.div2-1-1 {
    background-color: rgba(233, 2, 233, 0.5);
    width: 100px;
    height: 100px;
    margin-left: 70px;
    line-height: 100px;
    text-align: center;
    border: 1px dashed #e6e6e6;
    font-size: 16px;
    position: absolute;
    z-index: 3;
}

當在原樣式基礎上,再添加一個樣式,則出現綠色在紅色之上的效果,是因為這時候div2與div1在同一個層疊上下文,而div1的z-index為2,div2的z-index為1,所以綠色在紅色之上。

.div1 {
    position: absolute;
    z-index: 2;
}

補充:

以下例子中,當將鼠標放在d1-inner上時,會發現d2在d1-inner上面。

原因:不支持z-index的層疊上下文元素天然z-index:auto級別,所以當給d1-inner添加transform: scale(1.7,1.7);時,d1-inner在根元素的層疊上下文中的z-index:auto級別,而d2未設置z-index,所以其z-index就是默認的auto。兩者都在根元素的層疊上下文中的z-index:auto級別,那就根據后來居上判斷。d1-inner的父元素d1在DOM流中在d2的前面,所以導致d2在d1-inner上面。


 
d1-inner
d2-inner

如何觸發

觸發一個元素形成層疊上下文有以下方法,摘自 MDN:

根元素 (HTML)

z-index 值不為 "auto"的 絕對/相對定位

一個 z-index 值不為 "auto"的 flex 項目 (flex item),即:父元素 display: flex|inline-flex。(需滿足兩個條件才能觸發:1是父級需要是display:flex或者display:inline-flex水平,2是子元素的z-index不是auto,必須是數值。則這個子元素為層疊上下文元素)

opacity 屬性值小于 1 的元素(參考 the specification for opacity)

transform 屬性值不為 "none"的元素

mix-blend-mode 屬性值不為 "normal"的元素

filter值不為“none”的元素

perspective值不為“none”的元素

isolation 屬性被設置為 "isolate"的元素

position: fixed

在 will-change 中指定了任意 CSS 屬性,即便你沒有直接指定這些屬性的值

-webkit-overflow-scrolling 屬性被設置 "touch"的元素

參考自:
深入理解CSS中的層疊上下文和層疊順序
層疊順序與堆棧上下文知多少

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111616.html

相關文章

  • z-index

    摘要:層疊上下文是中的一個三維的概念如果一個元素含有層疊上下文我們就可以理解為這個元素在軸上就高人一等軸表示用戶與屏幕之間并不存在的的垂直線通俗點講就是人眼看屏幕的視線這條垂直于屏幕的線擁有層疊上下文的元素包括頁面根元素天生具有層疊上下文稱之為根 stacking context 層疊上下文(stacking context)是HTML中的一個三維的概念.如果一個元素含有層疊上下文,我們就可...

    vincent_xyb 評論0 收藏0
  • CSS 中重要的層疊概念

    摘要:標簽中的一切都被置于這個默認的層疊上下文的一個層疊層上物品放在桌子上。在層疊上下文中,其子元素按照上面解釋的規則進行層疊。在中所有的盒模型元素都處于三維坐標系中。 最近在項目的過程中遇到了一個問題,menu-bar希望始終顯示在最上面,而在之后的元素都顯示在它之下,當時設置了 z-index 也沒有效果,不知道什么原因,因此找了一下css有關層疊方面的資料,解決了這個問題,這里記錄一下...

    sshe 評論0 收藏0
  • CSS 層疊下文Stacking Context

    摘要:當第二層的容器盒子升級為層疊上下文時,紅色盒子及灰色盒子的軸層級受制于第二層的容器盒子。當元素處于同一層疊上下文內時可按照如下規則進行層疊判斷。 本文首發于政采云前端團隊博客:CSS 層疊上下文(Stacking Context) 在網頁制作的過程中,元素與元素之間的位置關系,在坐標軸上一般可體現為 X 軸、Y 軸和 Z 軸。對于 X 軸和 Y 軸的定位大多數開發都能比較直觀的搞清楚...

    marek 評論0 收藏0
  • CSS > CSS3 中的層疊下文初探

    摘要:但該盒不建立新的層疊上下文,除非是根元素。以上是基于的層疊上下文介紹。同級情況下,按照二者在源代碼中的順序,居后的又重新占領高地了?,F在我們看以下源代碼這個時候,以視口為包含塊進行定位和大小計算,將會鋪滿整個屏幕。 前言:關于層疊上下文,筆者還沒有去閱讀更詳細的 W3C 規范來了解更本質的原理(表打我,等我校招拿到 offer 了我就讀好伐 T_T)。一直聽說 CSS3 里的層疊上下文...

    pcChao 評論0 收藏0
  • 徹底理解z-index,看完還是只會無厘頭的設置9999你打我~~~~

    摘要:如果同級父元素不是層疊上下文元素就不需要看父元素的眼色了文章到這里就結束了,希望看完這篇文章的同學可以徹底理解。 今天寫代碼用antd-mobile的checkbox時候,想在內容文本后面添加一個icon,并且需要對這個icon綁定事件,發現綁定之后怎么也點不中,調試發現原來被層層嵌套的dom元素蓋住了,肯定是z-index在作祟??墒前凑瘴抑皩-index的了解(自信滿滿)卻怎么...

    bladefury 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<