CSS におけるスタックコンテキストの具体的な使用法

CSS におけるスタックコンテキストの具体的な使用法

序文

一部の CSS 相互作用の影響により、要素に設定されたz-index実際のサイズに応じて重ね合わされません。その背後にある原理をこれまで理解していませんでした。最近、関連情報を特別に確認し、簡単にまとめました。

スタックコンテキストとスタック順序

スタッキング コンテキストは、HTML における 3 次元の概念、つまり要素の Z 軸です。積み重ね順序とは、積み重ねたときの特定の垂直表示順序を指します。

カスケード基準

年上の方が先に行く

識別されたz-indx値などの明示的なスタッキング レベルの指示がある場合、同じスタッキング コンテキスト内で、スタッキング レベル値が大きい方が、スタッキング レベル値が小さい方よりも優先されます。

後ろから来る

要素のスタック レベルが一貫しており、スタック順序が同じである場合、DOM フロー内の後の要素が前の要素をカバーします。

スタッキングコンテキストの特徴

スタッキング コンテキストには次の特性があります。

  • スタッキング コンテキストは、通常の要素よりもスタッキング レベルが高くなります。
  • スタックコンテキストは要素のブレンドモードをブロックする可能性があります。
  • スタッキング コンテキストはネストすることができ、内部のスタッキング コンテキストとそのすべての子要素は外部のスタッキング コンテキストの対象となります。
  • 各スタッキング コンテキストは兄弟要素から独立しているため、スタッキングの変更やレンダリングを実行するときは、子孫要素のみを考慮する必要があります。
  • 各スタッキング コンテキストは自己完結的です。要素がスタックされると、要素全体が親スタッキング コンテキストのスタック順序にある​​と見なされます。

z-index値がautoでない場合は、スタッキングコンテキストが作成される。

position: relative; position: absolute;を含む配置された要素、および FireFox/IE ブラウザーでposition宣言がある要素の場合、 z-index値がautoでない場合、スタック コンテキストが作成されます。

HTMLコード

<div class="red-wrapper">
    <div class="red">シャオホン</div>
</div>
<div class="gray-wrapper">
    <div class="gray">リトルグレイ</div>
</div>

CSSコード

.red-wrapper {
    位置: 相対的;
    zインデックス: 自動;
}

。赤 {
    位置: 絶対;
    zインデックス: 2;
    幅: 300ピクセル;
    高さ: 200px;
    テキスト配置: 中央;
    背景色: 茶色;
}

.gray-wrapper {
    位置: 相対的;
    zインデックス: 自動;
}  

.グレー{
    位置: 相対的;
    zインデックス: 1;
    幅: 200ピクセル;
    高さ: 300px;
    テキスト配置: 中央;
    背景色: グレー;
} 

2 つの兄弟要素のz-indexautoの場合、それらは通常の要素であり、子要素は「大きい方が上」という原則に従うため、灰色のz-index: 1;は赤色のz-index: 2;に負けて押し下げられます。

ただし、 z-index数値になると、スタッキング コンテキストが作成され、各スタッキング要素は互いに独立し、子要素は親要素のスタッキング順序に従います。兄弟要素のz-index autoから0の値に変更すると、子要素間の積み重ね関係は子要素自身のz-indexの影響を受けなくなり、親要素のz-indexによって決定されるようになります。

下のXiaohongとXiaohuiの親のz-index 0に調整されています

.red-wrapper {
    /* その他のスタイル */
    zインデックス: 0;
}  

.gray-wrapper {
    /* その他のスタイル */
    zインデックス: 0;
}

ドキュメント フローの要素位置の「後者が上になる」という原則に従って、Xiaohui の親と Xiaohong の親が同じスタック レベルを持つスタック コンテキスト要素になったため、Xiaohui が Xiaohong の上にあることがわかります。

CSS3 のスタックコンテキストへの影響

display: flex|inline-flex とスタックコンテキスト

親がdisplay: flexまたはdisplay: inline-flex;であり、子要素のz-index autoではない。このとき、この子要素(ここでは子要素であることに注意してください)がスタックコンテキスト要素となります。

HTMLコード

<div class="wrapper">
    <div class="gray">
        リトルグレー<div class="red">リトルレッド</div>
    </div>
</div>

CSSコード

.ラッパー{
    ディスプレイ: フレックス;
}

.グレー{
    zインデックス: 1;
    幅: 200ピクセル;
    高さ: 300px;
    テキスト配置: 中央;
    背景色: グレー;
}  

。赤 {
    Zインデックス: -1;
    幅: 300ピクセル;
    高さ: 200px;
    テキスト配置: 中央;
    背景色: 茶色;
    位置: 相対的;
}

このように、Xiaohui の親にはdisplay: flex;があるため、自身のz-index autoではないため、スタックコンテキスト要素となり、元の Xiaohong の下部が Xiaohui に置き換えられます。

ミックスブレンドモードとスタッキングコンテキスト

mix-blend-modeプロパティを持つ要素はスタッキングコンテキスト要素である。

CSS プロパティ mix-blend-mode を使用すると、重ね合わせた要素のコンテンツと背景をブレンドできます。

コードは上記と同じです。グレーにmix-blend-mode属性を追加するだけです。ブレンド効果を確認するには、外側のコンテナーに背景画像を追加します。

.ラッパー{
    背景画像: url("./jz.png");
}

.グレー{
    /* その他のスタイル */
    ミックスブレンドモード: 暗くする;
}

同様に、Xiaohui にはmix-blend-mode属性があり、これによりスタック コンテキスト要素となり、Xiaohui が最下位の要素になります。

不透明度とスタッキングコンテキスト

要素のopacity 1 でない場合、その要素はスタック コンテキスト要素です。

HTMLコード

<div class="gray">
    リトルグレー<div class="red">リトルレッド</div>
</div>

CSSコード

.グレー{
    zインデックス: 1;
    幅: 200ピクセル;
    高さ: 300px;
    テキスト配置: 中央;
    背景色: グレー;
    不透明度: 0.5;
}

。赤 {
    Zインデックス: -1;
    幅: 300ピクセル;
    高さ: 200px;
    テキスト配置: 中央;
    背景色: 茶色;
    位置: 相対的;
} 

灰色の要素にはopacityプロパティがあるため、スタック コンテキスト要素となり、赤色の要素z-index: -1;もそれを貫通できません。

変換とスタックコンテキスト

transformが適用される要素はスタッキングコンテキスト要素である

コードは上記と同じですが、 transformグレーに適用される点が異なります。

.グレー{
    /* その他の関連スタイル */
    変換: 回転(30度);
} 

同様に、灰色の要素はtransform変換を適用することでスタック コンテキスト要素に変換されるため、赤色の要素z-index: -1;もそれを貫通できません。

フィルターとスタックコンテキスト

filter属性を持つ要素はスタックコンテキスト要素である

コードは上記と同じですが、 filter属性が Xiaohui に追加されています。

.グレー{

    /* その他の関連スタイル */
    フィルター: ぼかし(5px);
} 

同様に、灰色の要素にはfilter属性があり、スタック コンテキスト要素になるため、 z-index: -1;赤い要素は灰色の要素の上にあります。

変化とスタッキングコンテキスト

will-change属性を持つ要素は、スタック コンテキスト要素です。

コードは上記と同じですが、 will-change属性が gray 要素に追加されています。

.グレー{
    /* その他の関連スタイル */
    フィルター: will-change;
}

結果は上記と同じです。

要約する

要素のスタッキング ルール全般を理解するには、まず要素がスタッキング コンテキスト要素であるかどうかを理解する必要があります。

  • 配置属性 position: relative|absolute|fixed; を持ち、z-index が auto ではない要素 (Webkit ベースのブラウザーでは、固定配置にはこのような制限はありません) は、スタック コンテキスト要素です。
  • 要素には、スタック コンテキスト要素になることができる CSS3 プロパティがいくつかあります。
  • 親はdisplay: flex|inline-flex; 子要素のz-indexはautoではない。このとき、この子要素(ここでは子要素であることに注意)はスタックコンテキスト要素である。
  • mix-blend-modeプロパティを持つ要素
  • 不透明度属性が1でない要素
  • 変換された要素
  • フィルター属性を持つ要素
  • will-change属性を持つ要素

次に、スタッキング原則を理解する必要があります。「大きい方が上になる」、「後のものが上になる」、そして最後にスタッキング コンテキストの主な特性を理解する必要があります (詳細については、スタッキング コンテキストの特性に関する記事を参照してください)。

CSS におけるスタック コンテキストの具体的な使用法については、これで終わりです。CSS スタック コンテキストに関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Vueはローカルストレージの追加、削除、変更機能を実装します

>>:  IE6 の select を div でカバーできないバグの解決方法

推薦する

HTML ウェブページのブラウザタイトルバーに小さなアイコンを表示する方法

この効果と同様に、方法も非常に簡単です。ヘッダーに次のように記述します: <link rel=...

Keras を使って SQL インジェクション攻撃を判断する (例の説明)

この記事では、ディープラーニングフレームワーク keras を使用して、SQL インジェクションの特...

デザインにおけるユーザーエクスペリエンスの背後にある8つのユーザー本能について話す

編集者注: この記事は、Teambition チームの @娄昊川 が寄稿したものです。Teambit...

Vueルーティング相対パスジャンプメソッド

目次Vueルーティング相対パスジャンプ1. 属性の追加2.router.resolveメソッドVue...

WebStormはVue3統合APIのソリューションを正しく識別できません

1 問題の説明Vue3 の統合 API は、defineComponent やその他の関数が認識でき...

Linux で特定のプログラムを見つけるための whereis の例の詳細な説明

Linuxは特定のプログラムを見つけますwhereis コマンドは主にプログラム ファイルを検索し、...

CSS で写真のスタッキング効果を実装するサンプルコード

成果を達成するステップ1. 初期index.html最初の写真、一番上の写真を作成します。写真の i...

Vue が 4 レベルのナビゲーションと検証コードを実装する方法の例

効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...

Ubuntu 20.04 ベスト設定ガイド (初心者向け)

1. システム構成1. sudoパスワードをオフにするsudo コマンドを使用するたびにパスワード...

MySQLクエリプランでken_lenの値を計算する方法

key_lenの意味MySQL では、次に示すように、explain を使用して SQL ステートメ...

vue ディレクティブ v-bind の使用と注意点

目次1. v-bind: 要素の属性にデータをバインドできる2. v-bind: は次のように省略で...

Vue3 での Teleport の使用に関する詳細な説明

目次テレポートの目的テレポートの仕組みこの記事では、以下の内容を取り上げます。テレポートの目的テレポ...

React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

目次アルゴリズム戦略単一ノードの差分配列ノードの差分キー値の使用要件アルゴリズム戦略React の調...

MySQLは、統計クエリを最適化するために、sum、case、whenを巧みに使用します。

私は最近、会社で統計レポートの開発に関わるプロジェクトに取り組んでいました。データの量が比較的多かっ...

ECMAScriptにおけるプリミティブ値と参照値の詳しい説明

目次序文動的プロパティとは何ですか?値のコピー値の種類を決定する要約する序文これは JavaScri...