CSS z-index 属性 は、ノードのスタック順序を設定するために使用されます。これは、z-index の一般的な使用法です。同時に、z-index 値を大きな値に設定すると、必ずしもノードが最前面に表示されるとは限りません。この記事では、z-index の使用法を説明するためにいくつかの例を示します。分析し、z-index 階層ツリー の概念を皆さんに紹介します
今週、私たちのチームは社内テクノロジーの共有を行い、Pumpkin Xiaomi Congee が CSS z-index の階層の概念についての理解と紹介を共有しました。この共有のライブ効果は非常に優れているため、z-index と階層ツリーのトピックもブログに移動して説明します
この記事では、ノードの表示レベルに影響を与える複数のルールについて説明します。すべての例は、「ページ ノード レベルにおける位置属性と z-index 属性の影響の例」にリストされています。ルール
階層ツリールール
<div id="a">A</div><div id="b">B</div>
位置決めルール
position が static に設定されている場合、ドキュメント フローの後ろにあるノードは前にあるフローティング ノードをカバーするため、position:static はノードのカバー関係に影響を与えません。
Position が相対 (相対位置決め)、絶対位置 (絶対位置決め)、または固定 (固定位置決め) に設定されている場合、そのようなノードは位置属性が設定されていないノード、または位置属性が設定されているノードを上書きします。属性値は静的であり、順序規則と位置規則に従って、前者の方が後者よりも高いデフォルト レベルを持つことを示します。ここでは、A も B も設定しません。位置を設定します。ただし、A の子ノード A-1 を基準にして位置を設定します。順序ルールに従って、B は A をカバーし、配置ルールに従って、B が A をカバーします。 A' は B をカバーします。
<div id="a" style="position:relative;">A</div><div id="b">B</div> |
このような実装は、どのような場合に相互にオーバーレイするために使用されますか? 奇妙に思えるかもしれませんが、実際には、カテゴリ表示リストなどで非常によく使用されます。 ECサイトのサイドカラムのような表示もこの手法で実現できます
下の写真は某サイトより カテゴリ表示領域では、第2階層のカテゴリのフローティングレイヤーが第1階層のカテゴリの外枠を覆っています。 CSS を使用して表示効果を実現する場合、第 1 レベルのカテゴリの外枠は、図の A に相当します。上の例では、第1レベルカテゴリのノードはA-1に相当し、第2レベルカテゴリのフローティングレイヤーはBに相当します。
参加ルール |
z-index プロパティは、位置決めされた要素でのみ機能します。位置: 絶対;、位置: 相対; または位置: 固定;)。ただし、z-index が 1 以上のノードは、z-index が定義されていないノードをカバーします。z-index が定義されていないノードは、z のないノードでカバーされます。 -index が定義されました。
Pass 確認したところ、position が相対、絶対、または固定に設定されているが、z-index が設定されていない場合、z- のデフォルト値が使用されることもわかりました。 IE8 以降と W3C ブラウザ (以下、まとめて W3C ブラウザと呼びます) のインデックスは auto ですが、IE6 と IE7 のインデックスは 0 です。
親ルールから
ノード A と B の両方がposition:relative を定義し、z が定義されている場合-ノード A のインデックスがノード B のインデックスより大きい場合、A の子ノードは B の子ノードの前をカバーする必要があります。
<div id="a" style="z-index:2;">A</div><div id="b" style="z-index:1;">B</div><div id="c" style="z-index:0;">C</div>
如果所有节点都定义了 position:relative, A 节点的 z-index 和 B 节点一样大, 但因为顺序规则, B 节点覆盖在 A 节点前面. 就算 A 的子节点 z-index 值比 B 的子节点大, B 的子节点还是会覆盖在 A 的子节点前面.
<div id="a" style="position:relative;z-index:0;"> <div id="a-1" style="position:relative;z-index:2;">A-1</div></div> <div id="b" style="position:relative;z-index:0;"> <div id="b-1" style="position:relative;z-index:1;">B-1</div></div> |
很多人将 z-index 设得很大, 9999 什么的都出来了, 如果不考虑父节点的影响, 设得再大也没用, 那是无法逾越的层级.
层级树规则
可能你会觉得在 DOM 结构中的兄弟节点会拎出来进行比较并确定层级, 其实不然.
<div id="a" style="position:relative;z-index:2;"> <div id="a-1" style="position:relative;z-index:0;">A-1</div></div> <div id="b"> <div id="b-1" style="position:relative;z-index:1;">B-1</div></div> |
我们认为同时将 position 设为 relative, absolute 或者 fixed, 并且 z-index 经过整数赋值的节点, 会被放置到一个与 DOM 不一样的层级树里面, 并且在层级树中通过对比 z-index 决定显示的层级. 上面的例子如果用层级树来表示的话, 应该如下图所示.
图中虽然 A-1 (z-index:0) 的值比 B-1 (z-index:1) 小, 但因为在层级树里 A (z-index:2) 和 B-1 在一个层级, 而 A 的值比 B-1 大, 根据从父规则, A-1 显示在 B-1 前面.
参与规则 2
前面提到的参与规则认为只要节点的 position 属性为 relative, absolute 或者 fixed, 即可参与层级比较, 其实不准确. 如果所有节点都定义了 position:relative, 并且将 z-index 设为整数值, 根据从父规则, 父节点的层级决定了子节点所在层级.
<div id="a" style="position:relative;z-index:0;"> <div id="a-1" style="position:relative;z-index:100;">A-1</div></div> <div id="b"> <div id="b-1" style="position:relative;z-index:0;"> <div id="b-1-1" style="position:relative;z-index:10;">B-1-1</div> </div></div> <div id="c" style="position:relative;z-index:0;"> <div id="c-1"> <div id="c-1-1"> <div id="c-1-1-1" style="position:relative;z-index:1;">C-1-1-1</div> </div> </div></div> |
例子中 A, B-1, C-1-1 作为父节点, z-index 的值相同, 根据顺序规则, C-1-1 在 B-1 之前, B-1 在 A 之前; 又根据从父规则, 无论子节点的 z-index 值是什么, C-1-1-1 在 B-1-1 之前, B-1-1 在 A-1 之前.
如果我们将所有父节点的 z-index 属性去除, 诡异的事情发生了. IE6 和 IE7 浏览器显示效果不变, 而 W3C 浏览器的子节点不再从父, 而是根据自身的 z-index 确定层级.
<div id="a" style="position:relative;"> <div id="a-1" style="position:relative;z-index:100;">A-1</div></div> <div id="b"> <div id="b-1" style="position:relative;"> <div id="b-1-1" style="position:relative;z-index:10;">B-1-1</div> </div></div> <div id="c" style="position:relative;"> <div id="c-1"> <div id="c-1-1"> <div id="c-1-1-1" style="position:relative;z-index:1;">C-1-1-1</div> </div> </div></div> |
根据默认值规则, IE6 / IE7 和 W3C 浏览器上的元素存在 z-index 默认值的区别. 我们相信, 仅当 position 设为 relative, absolute 或者 fixed, 并且 z-index 赋整数值时, 节点被放置到层级树; 而 z-index 为默认值时, 只在 document 兄弟节点间比较层级. 在 W3C 浏览器中, A, B-1 和 C-1-1 的 z-index 均为 auto, 不参与层级比较.
而在 IE6 和 IE7 中, 因为 z-index 的默认值是 0, 所以也参与了层级比较.
设置了 position 而没有 z-index 的节点虽然不参与层级树的比较, 但还会在 DOM 中与兄弟节点进行层级比较.
<div id="a" style="position:relative;"> <div id="a-1" style="position:relative;z-index:100;">A-1</div></div> <div id="b"> <div id="b-1"> <div id="b-1-1" style="position:relative;z-index:10;">B-1-1</div> </div></div> <div id="c" style="position:relative;"> <div id="c-1"> <div id="c-1-1"> <div id="c-1-1-1" style="position:relative;z-index:1;">C-1-1-1</div> </div> </div></div> |
我们对上个例子改造一下, 将 B-1 的 position 属性删除后, W3C 浏览器显示如下图. 根据定位规则, A 和 C-1-1 会显示在 B-1 的前面; 而根据顺序规则, C-1-1 又显示在 A 前面.
在 IE6 和 IE7 中, 因为 A 和 C-1-1 设置了 position:relative, 而且 z-index 的默认值为 0, 所以也参与层级树比较, 所以有如下效果.
总结
浏览器节点显示层级是一个费力的活, 今天你觉得 A 区块会永远置顶, 但明天因为需求变动, 突然出现 B 元素需要置顶. 一层一层往上堆砌, 某天回头一看, 发现很多区块交错在一起, 而且他们的值一个比一个大, 根本搞不清头绪. 我觉得在操刀干活之前, 最好先将 position, z-index 和层级的关系搞搞清楚, 以免后患无穷.
另外, 非情非得已, 切勿用 JavaScript 计算 z-index, 并将某个节点的 z-index 设置成所有节点中层级最高.
因为篇幅太长, 本文仅从节点属性角度进行讨论, 没有涉及 select 和 iframe 等特殊页面节点考虑, 如果有机会下次再为大家分享.

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

HTMLは、簡単に学習しやすく、結果をすばやく見ることができるため、初心者に適しています。 1)HTMLの学習曲線はスムーズで簡単に開始できます。 2)基本タグをマスターして、Webページの作成を開始します。 3)柔軟性が高く、CSSおよびJavaScriptと組み合わせて使用できます。 4)豊富な学習リソースと最新のツールは、学習プロセスをサポートしています。

Anexampleapalofastartingtaginhtmlis、それはaperginsaparagraph.startingtagsaresentionentientiontheyinitiateelements、definetheirtypes、およびarecrucialforurturingwebpagesandcontingthomedomを構築します。

メニューで点線のラインセグメンテーション効果を設計する方法は?メニューを設計するときは、通常、皿の名前と価格の間に左右に合わせることは難しくありませんが、真ん中の点線またはポイントはどうですか...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
