[CS]z-indexとスタックコンテキスト


Goal

  • z-indexの使用方法について説明します.
  • スタックコンテキストについて説明します.
  • z-indexの使用


    要素の積み重ね順を変えるには,2つの条件が必要である.
  • POSIItonプロパティを設定します.
  • z-indexプロパティを設定します.
  • ここで、z-indexプロパティは、シンボルのz軸上の位置を表す整数値を有する.
    次の例では、位置属性が適用されないエンティティが기본 렌더링 레이어 (Layoer 0)にあるのではなく、位置属性が指定されたエンティティ間でz−indexによってスタック順序が決定されることが分かる.
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="style.css" />
      </head>
      <body>
        <main class="container">
          <div>
            <p>div 1. position:absolute</p>
            <p>z-index:5</p>
          </div>
          <div>
            <p>div 2. position:relative</p>
            <p>z-index:2</p>
          </div>
          <div>
            <p>div 3. not positioned</p>
            <p>z-index:8</p>
          </div>
          <div>
            <p>div 3. position:absolute</p>
            <p>z-index:-1</p>
          </div>
        </main>
      </body>
    </html>
    main {
      position: relative;
      width: 500px;
      height: 500px;
      text-align: right;
    }
    
    div {
      padding: 5px;
      margin: 5px;
    }
    
    div:nth-child(1) {
      position: absolute;
      width: 150px;
      height: 500px;
      left: 40px;
      background-color: rgba(255, 204, 204);
      z-index: 5;
    }
    
    div:nth-child(2) {
      position: relative;
      width: 500px;
      height: 150px;
      background-color: rgba(255, 255, 0);
      z-index: 2;
    }
    
    div:nth-child(3) {
      width: 500px;
      height: 150px;
      background-color: rgba(0, 255, 0);
      z-index: 8;
    }
    
    div:nth-child(4) {
      position: absolute;
      width: 150px;
      height: 500px;
      top: 0;
      left: 250px;
      background-color: red;
      z-index: -1;
    }

    z-indexなし

    모든 엘리먼트에 z-index 설정이 없을 경우、または여러 엘리먼트들이 같은 z-index를 가질 경우、装飾は以下の順序で下から上へ積み上げられる.
    同じ順序であれば、HTMLソースに書き込まれた順序で順序を決めます.
  • 線分背景、枠線
  • 位置属性およびフローティング属性が設定ブロックレベル要素
  • 位置属性が設定されていないフローティング属性を有するフローティング要素
  • position属性が設定されていないインラインエンティティ
  • の位置属性が設定されたエンティティ
  • 次の例では、z-indexプロパティが指定されていない場合、スタック脈絡を決定する方法について説明します.
    まず、最初のdivはposition属性が指定されていないblock levelセグメントであり、2番目と3番目のdivはposition属性が相対的に指定されている.
    上記の手順から元素の堆積がわかります.
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="style.css" />
      </head>
      <body>
        <div>
          div 1 . not positioned
        </div>
        <div>
          div 2 . relative positioned
        </div>
        <div>
          div 3 . relative positioned
        </div>
      </body>
    </html>
    div {
      border: 1px solid black;
    }
    
    div:nth-child(1) {
      width: 400px;
      height: 400px;
      background-color: rgba(255, 204, 204);
    }
    
    div:nth-child(2) {
      position: relative;
      width: 250px;
      height: 250px;
      top: -300px;
      left: 50px;
      background-color: rgba(255, 255, 0);
    }
    
    div:nth-child(3) {
      position: relative;
      width: 150px;
      height: 150px;
      top: -500px;
      left: 70px;
      background-color: rgba(0, 255, 0);
    }

    最終要素の積み上げ順序


    HTMLソースに位置を設定する要素とz-indexを設定しない要素、およびz-indexを設定しない要素がある場合、最終セグメントのスタック順序は次のとおりです.同じ順序であれば、HTMLソースに書き込まれた順序で順序を決めます.
  • 線分背景、枠線
  • position属性が設定z-indexが負の要素
  • 位置属性およびフローティング属性が設定ブロックレベル要素
  • 位置属性が設定されていないフローティング属性を有するフローティング要素
  • position属性が設定されていないインラインエンティティ
  • positionプロパティ、z-indexが0またはautoのエンティティ
  • を設定します.
  • position属性を設定し、z-indexは譲受人別名
  • である.

    スタックコンテキスト


    スタック脈絡は,仮想Z軸を用いたHTML要素の3次元概念化である.
    上記のように、特定の要素のレンダリング順序は、z-index属性値によって決まります.これは、これらの要素が有する属性が쌓임 맥락を生成するためである.
    堆積脈は以下の条件を満たすときに生成される.
  • ドキュメントのルート要素(html)
  • の位置は絶対的で相対的であり、z-indexはautoの要素
  • ではない.
  • 位置固定、粘性要因
  • Flexboxコンテナのサブアイテムでは、z-indexはautoの要素
  • ではありません.
  • gridコンテナのサブアイテムのうち、z-indexはautoの要素ではありません
  • 不透明度が1未満の要素
  • 脈絡内部のサブ要素の特徴を蓄積する


  • スタック脈絡を生成する要素のサブ要素は、スタック脈絡生成規則とz-index規則と同様にスタックされる.

  • 蓄積された脈絡の内部には、蓄積された脈絡も含まれる可能性がある.したがって、蓄積された脈絡は계층 구조である.
  • HTMLのすべての要素はスタック脈絡ではなく、スタック脈絡階層はHTML要素階層の부분집합である.

  • サブエレメントのz-index値は、親エレメント内でのみ意味があります.

  • 自分の蓄積脈絡を作らなければ、親の蓄積脈絡に同化される.
  • Reference

  • CSS reference z-index
  • MDNスタック脈絡
  • MDNz-indexの適用
  • MDNz-indexが存在しない場合のスタック