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

推薦する

MySQLデータベースパラダイムの詳細な説明

序文:データベースパラダイムについてはよく耳にしていましたが、詳細まで理解したことはありませんでした...

CentOS6.5 でファイル共有サービス Samba を構築するチュートリアル

Samba サービス:このコンテンツはサンバサービス学習者の参考用ですケースの説明:企業の管理者は、...

MySQL フィールドで NOT NULL を使用する必要があるのはなぜですか?

私は最近新しい会社に入社したのですが、データベース設計にいくつか小さな問題があることに気付きました。...

自動検索提案機能のスタイルファイルを入力します: suggestion.css

コードをコピーコードは次のとおりです。 .sugLayerDiv{位置:相対; overflow:h...

分散監視システムにおけるZabbixのアクティブ、パッシブ、Web監視のプロセスの詳細な説明

前回の記事では、Zabbix のネットワーク検出機能について学習し、アクションと組み合わせてホストの...

MySQLの一般クエリログとスロークエリログの分析

MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含...

MySQL 5.7 解凍版のインストール、アンインストール、および文字化けしたコードの問題のグラフィック解決

1. 解凍版のインストール(1)圧縮パッケージをダウンロードし、ディスクの場所に解凍します。圧縮パッ...

Linux の fsevents モジュールによって発生する npm ls エラーの解決方法の詳細な説明

Mac で開発されたプロジェクトがあり、パッケージ npm i がインストールされており、すべて正常...

SQL Server での exists と except の使用法の概要

目次1. 存在する1.1 説明1.2 例1.3 交差/2017-07-21 2. 除く2.1 説明2...

js で 0ms 遅延タイマーを実装するいくつかの方法

目次キューマイクロタスク非同期/待機メッセージチャネルやっと付録ここ二日間、「タイムリーな setT...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...

vuex での Getter の使用法の詳細な説明

序文Vuex を使用すると、ストア内に「ゲッター」を定義できます (これはストアの計算されたプロパテ...

Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法

最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...

Django がローカル MySQL データベースに接続する手順 (pycharm)

ステップ1:setting.pyでデータベースを変更する # データベースを構成する DATABAS...

Windows 10 に Linux サブシステムをインストールする 2 つの方法 (画像とテキスト付き)

Windows 10 は Linux サブシステムをサポートするようになり、面倒なデュアル システ...