[CSSチュートリアル]z-indexの違い。cssのz-index: 0とz-index: autoの違い。
最近、カスケードコンテキストの勉強をしていたのですが、その過程でz-indexが0とautoの違いは何だろうと思い、Baiduで調べてみたところ、以下のような情報がありました。いくつかの問題を発見し、自分たちの実践(実験?)と合わせて整理したのがこのノートです。
正誤表
情報を調べていると、z-indexを0にすると新しいカスケードコンテキストが作成され、0がautoより上になるという記述を見つけました。文の後半は間違いで、z-index: 0とz-indexが設定されていない、つまり、同じ階層内のz-index: autoが上でも下でもなく、最初に出現した後のドキュメントフローが優先されます。
z-indexを持つ。0またはz-index: autoが設定されている場合、ドキュメントストリーム内で後から発生したものが先に発生したものを上書きします。
ちょっとした実験をしてみましょう
<!DOCTYPE html>
<html>
<head>
<title> z-index is 0 or auto</title>
<style>
.red,
.blue{
width: 200px;
height: 200px;
}
.red {
position: absolute;
z-index: 0;
top: 100px;
left: 100px;
background: #FF0000;
}
.blue {
position: absolute;
z-index: auto;
top: 40px;
left: 40px;
background: #0000FF;
}
</style>
</head>
<body>
<div class="red">
index-0
</div>
<div class="blue"> index-auto</div>
</body>
</html>
このコードの結果は、:
青い要素が赤い要素に重なり、文書内の赤と青のブロックの順序が次のように入れ替わっていることがわかります。
<div class="blue">index-auto</div>
<div class="red">
index-0
</div>
を取得することが可能です。
この時点で、赤の要素は青の要素の上に再び重なっています。z-indexの値が0またはautoの場合、カスケードコンテクスト内の要素の順序に影響を与えないという結論が得られます。
これに加えて、MDNドキュメントでこんな一文も見かけました。
z-indexが指定されていない場合、すべての要素はデフォルトのレベル(レベル0)でレンダリングされます。
つまり、autoと0は同じレイヤーです。
そして、上のコードの青いブロックの後に、新しい緑のブロックを追加してください。
<div class="green">don't set z-index</div>
.green {
position: absolute;
top: 160px;
left: 160px;
background: greenyellow;
}
この時点でページはこのようになっています。
z-indexの値が緑色で設定されていない。一般的なブラウザの位置が静止しておらず、z-indexが設定されていない場合、z-indexはauto、IE6/7ではz-indexは0となります。
緑は最後の要素として表示され、青と赤の両方の要素を上書きします。
z-index: 0 はカスケードコンテキストの作成
では、red 要素が z-index:0 のためにカスケード・コンテキストを作成することを検証してみましょう。test要素をred要素に追加します。
<div class="test"></div>
.test {
width: 140px;
height: 140px;
position: absolute;
right: 0px;
top: 0px;
background: grey;
z-index: 10;
}
この時点で、ページは次のようになります。
グレーのテストブロックは、青と緑のブロックに覆われています。
test 要素の z-index が 10 であっても、カスケードコンテキストの最上位に表示できないことは明らかでしょう。これは、testが親要素であるredによって作成されたカスケードコンテキストの一部であるためです。要素がカスケードコンテクストを作成する場合、その子カスケードコンテキストの z-index 値は親レベルでしか意味を持ちません。すべての灰色のブロックのz-indexは、赤のブロックの中でしか有効ではありません。
z-index: auto はカスケードコンテクストを作成しない。
では次に、このテスト要素を青いブロックの中で試してみるとどうでしょうか。(青い要素のz-indexはautoです)
グレーの要素がすべての要素の一番上に表示され、z-index 値が有効になっていることがわかりますね この時点で、test 要素はルート要素によって作成されたカスケードコンテキストの一部になっています(カスケードコンテキストの階層構造では、カスケードコンテキストを作成しない要素は、親と同じカスケードコンテキストにあります。青いブロックはカスケード・コンテキストを持たず、その親であるルート要素と同じカスケード・コンテキストにあります)。赤い要素もルート要素によって作成されたカスケード コンテキストにありますが、赤い要素の z-index は 0 で 10 未満なので、灰色のブロックが一番上にあります。
要約すると
- z-indexの値が設定されていない場合、デフォルトのレイヤーはautoになります。
- z-index: 0とz-indexが定義されていない場合(z-index: auto)は、同じレベル内で階層がなく、ドキュメントフローで後に現れるものが先に現れるものを上書きします。
- z-index: 0 はカスケードコンテクストを作成します z-index: auto はカスケードコンテクストを作成しません。
この記事では、z-index.の違いについて説明します。cssのz-index: 0とz-index: autoの違いについては、この記事にまとめています。z-index.の詳細については、こちらをご覧ください。0とz-index: autoについては、スクリプトハウスの過去記事を検索していただくか、引き続き以下の関連記事をご覧ください!今後ともスクリプトハウスをよろしくお願いいたします。
関連
-
[CSSチュートリアル】CSS たった1行のコードでアバターと国旗の一体化を実現
-
[css3]CSS3タブアニメーションの背景切り替えの動的効果例
-
[CSSチュートリアル】resizeで画像のプレビューを切り替える方法
-
[CSSチュートリアル】CSSを解析して、画像のテーマカラー機能を抽出する(コツ)
-
[CSSチュートリアル】ピュアCSSで実装した通知バーの3種類のスクロール効果
-
[css3]本のページをめくるような効果を実現するcss3サンプルコード
-
[css3]CSS3ベジェ曲線サンプル:リンクホバーアニメーション効果の作成
-
[css3] css3の擬似クラスについて、共通使用前と共通使用後で説明する。
-
[CSSチュートリアル】ピュアCSS3による水平無限スクロールのサンプルコード
-
[CSSチュートリアル]フレックス内のボタンを縦に中央寄せにしない意外な解決法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】シングルセレクトの折りたたみメニュー機能を実現するCSS
-
[CSSチュートリアル】CSSでemを開く正しい方法 詳細へ
-
[CSSチュートリアル】ネイティブCSSでテキストの無制限回転を実現する汎用的な方法
-
[Div+CSSチュートリアル】divの背景を透明にする設定例
-
[CSSチュートリアル】CSSで粘着効果をつけてみる方法
-
[CSSレイアウト例】等間隔の四角形で完璧なページレイアウトを実現する方法
-
[CSSチュートリアル】画面全体に広がるアダプティブな高さを実現するCSS
-
[css3]CSS3:overflowプロパティ
-
[CSSチュートリアル】CSSを使ってボックスの水平・垂直方向の中央寄せを実現(全8種)
-
[CSSチュートリアル]純粋なCSSは、効果を引き出すために、ページ内のリストを達成するために