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 でカバーできないバグの解決方法

推薦する

親要素に対する CSS 子要素の配置の実装

解決親要素に position:relative を追加します。子要素に position:abso...

Windows システムに MySQL を素早くインストールして展開する方法 (グリーンの無料インストール バージョン)

まずは緑色の無料インストール版のMySQLをダウンロードします。任意のフォルダに入れて構いません。今...

ミニプログラムはリストのカウントダウン機能を実装します

この記事の例では、ミニプログラムでリストカウントダウンを実装するための具体的なコードを参考までに共有...

crontab スケジュールされたタスクが実行されない理由の分析と解決

序文Linux のスケジュールされたタスクを実装する方法としては、cron、anacron、at な...

2つのNode.jsプロセスがどのように通信するかの詳細な説明

目次序文異なるコンピュータ上の 2 つの Node.js プロセス間の通信TCPソケットの使用HTT...

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

MySQLの基本操作を詳しく解説(第2部)

序文この記事には1. データベースのいくつかの主要な制約2. テーブル間の関係制約:主キー制約: 機...

Linux curl フォームのログインまたは送信と Cookie の使用に関する詳細な説明

序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...

Docker の win ping 失敗コンテナ回避ガイド

win docker-desktopを使ってコンテナ開発に接続し、ネットワーク上で色々試してみたいと...

自己終了XHTMLタグを書くときに注意すべきこと

XHTMLの img タグは、次のように記述する必要があります: <img alt="...

CentOS 7 ブートカーネルの切り替えとブートモードの切り替えの説明

Centos7 スイッチブートカーネル注: 必要に応じて、最初にyum update -yを実行して...

JavaScript を使用してタイムラインとアニメーション効果を実装するためのサンプル コード (フロントエンドのコンポーネント化)

目次コードのクリーニングJavaScript の「フレーム」 「フレーム」の実装方法1. 間隔を設定...

HTML ドキュメントに CSS を埋め込む一般的な 3 つの方法

HTMLでCSSを定義するには、埋め込み、リンク、インラインの3つの方法が一般的に使用されます。 1...

MySQLを定期的にバックアップしてQiniuにアップロードする方法

ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...