ホームページ ウェブフロントエンド CSSチュートリアル 相対絶対突破できないレベル問題の解決_体験交流

相対絶対突破できないレベル問題の解決_体験交流

May 16, 2016 pm 12:05 PM
css

li をposition:relativeに設定し、span をposition:absoluteに設定すると、span の z-index 値がどれほど高く設定されていても、常にその背後にある親よりも下になることがわかります。

少し前、グループ内で誰が本当に理解できなかった質問をしたのか覚えています。

<ul>   
<li>第一块</li>   
<li><span>第二块</span></li>   
<li>第三块</li>   
<li>第四块</li>   
<li>第五块</li>   
</ul>
ログイン後にコピー

li をposition:relative に設定すると、スパンをpositionに設定します:すると、span の z-index 値がどれほど高く設定されても、その値は常にその背後にある親よりも下になることがわかります。

*{margin:0; padding:0; list-style:none;}   
li {width:100px; height:100px; margin:0 5px 0 0; background:#000; float:left; position:relative; z-index:1;}   
li span {width:200px; height:100px; background:#c00; position:absolute; top:0; left:100px; z-index:1000;}
ログイン後にコピー

試してみると、子を見つけるのは簡単です。z-index 値は 1000 に達し、position:absolut に設定されます。子はすべて親の下にファイルされます。長い間考えましたが、根本的な問題は、同じ位置を設定すること (相対/絶対)、同じレベルのラベル間のレベルを z-index で超えることはできない、ということだと思います。上の例では、最初の li のレベルは常に次の li のレベルよりも小さいため、li の子にposition:absolute; を設定し、非常に高い z-index 値を与えます。

おそらく、あなたはそれについて考えるでしょう。position: relative を設定している限り、次のようになります。とても正しいです。他の li がposition:relative; を設定していない場合、必要な子はすべてのコンテンツの上にフローティングできます。しかし、実際に、すべての li でスパンが必要で、すべてのプロパティが同じである必要がある場合はどうなるでしょうか?もちろん、この効果は必ずしも必要というわけではありません。ただし、そのような効果が必要です。すべての子が非表示になり、マウスの反応があるときに表示され、すべてのコンテンツの上に浮かび上がります。上で見たように、子は表示されるときに次の親ラベルの下に押し付けられるため、これは確かに頭の痛い問題であることを知っておく必要があります。このマウス応答の位置決め効果を実装しましょう:

<ul>   
<li><a href="" title=""><span>第一块</span></a></li>   
<li><a href="" title=""><span>第二块</span></a></li>   
<li><a href="" title=""><span>第三块</span></a></li>   
<li><a href="" title=""><span>第四块</span></a></li>   
<li><a href="" title=""><span>第五块</span></a></li>   
</ul>
ログイン後にコピー

リンクされたマウス イベントを通じてこの表示/非表示効果を完成させます:

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}   
li a {position:relative; z-index:1; display:block; height:100px; width:100px; background:#000;}   
li a:hover {background:#000000;}   
li span {display:none;}   
li a:hover span {display:block; background:#c00; width:200px; height:200px; position:absolute; top:0; left:100px; z-index:1000;}
ログイン後にコピー

このように a を position:relative に設定しますの場合、その子は親の左上隅を座標原点として配置されます。次に、スパンの特定の形状と位置プロパティを設定して、それを非表示にします。次に、a の pseudo-class:hover を使用して、span をアクティブにします。結果を見ると、一番上にあるはずのものがすべて一番下にあることがわかります。では、この問題をどうやって解決すればよいでしょうか? 実際のところ、css で強制的に突破することは不可能なので、トリガーされていない親タグには、position:relative; 属性を持たせないようにできないか考えますが、トリガーされていない親タグには、position:relative; 属性を持たせないようにすることができます。トリガーされますか? この親にそのような値を割り当てますか?実際、これを考えると基本的にすべての問題を解決できます。

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}   
li a {display:block; height:100px; width:100px; background:#000;}   
li a:hover {position:relative; z-index:1; }   
li span {display:none;}   
li a:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }
ログイン後にコピー

a:hover の属性をposition:relative; に設定するだけで、マウスがトリガーされたときにのみ a に相対位置属性が割り当てられます。これで、他の親タグによってブロックされる問題は解決されました。

もちろん、ie5 などのブラウザを気にしない場合は、コードを簡略化することもできます:

<ul>   
<li><span>第一块</span></li>   
<li><span>第二块</span></li>   
<li><span>第三块</span></li>   
<li><span>第四块</span></li>   
<li><span>第五块</span></li>   
</ul>
ログイン後にコピー

css は次のように変更できます:

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px; background:#000;}   
li:hover {position:relative; z-index:1;}   
li span {display:none;}   
li:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }
ログイン後にコピー

追記:
少し前に公開した「ポジション:相対・絶対ではレベルを突破できない」という記事で、ポジショニングにおけるレベルについて書かれていましたが、ここ数日読み返してみたら、次のような記事でした。徹底されておらず、重要なポイントを指摘していませんでした。したがって、位置レベルをより明確かつ明確に説明できることを期待して、ここで特別に補足させていただきます。

位置には 4 つの異なる値、つまり静的 | 絶対 | 固定 | 相対があることは誰もが知っています。これについては、su yu の「css2 中国語マニュアル」で説明されています: 静的: 特別な位置決めはせず、オブジェクトは html の位置決め規則に従います; 絶対: オブジェクトをドキュメント フローの外にドラッグし、左、右、上、下およびその他の属性を使用して絶対的な位置にします位置。そして、そのカスケードは z-index 属性によって定義されます。現時点では、オブジェクトにはマージンはありませんが、パディングと境界線はまだあります。相対: オブジェクトは積み重ねることはできませんが、左、右、上、下などの属性に基づいて通常のドキュメント フロー内でオフセットされます。 .; 修正: ie5.5 および ns6 はまだ利用できません このプロパティはサポートされていません。

ただし、オブジェクトの積み重ね位置を変更するには、別の css プロパティ、z-index が必要です。ただし、この z-index は万能ではなく、html コード レベルによって制限されます。 z-index は、同じレベルの html にのみその効果を反映できます。ここで述べておく必要があるのは、z-index はオブジェクトの位置値が相対/絶対である場合にのみ使用できるということです。以下に、レベルの特性を説明するためにいくつかの例を示します:

<p id="box_1">   
<p id="a">这是第一个块</p>   
<p id="b">这是第二个块</p>   
</p>
ログイン後にコピー

上記の html コードの場合、それを定義する css を記述する必要もあります:

#a,#b {position:absolute; width:300px; height:100px; }   
#a {z-index:10; left:0; top:0; background:#000; }   
#b {z-index:1; left:20px; top:20px; background:#c00; }
ログイン後にコピー

これが最も重要です。 common この場合、#a と #b のスタッキング レベルは z-index を通じて設定できます。これは問われていないので、どのような状況で問題が発生するのでしょうか?別の例を見てみましょう:

<p id="box_1">   
<p id="a">这是第一个块</p>   
</p>   
<p id="box_2">   
<p id="b">这是第二个块</p>   
</p>
ログイン後にコピー

この構造に基づいて別の css を作成します。この css 内のさまざまな場所に注意してください:

#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}   
#a, #b {position:absolute; width:100px; height:300px; }   
#a {background:#c00; z-index:100; }   
#b {background:#0c0; z-index:1; left:50px;}
ログイン後にコピー

現時点では、#a に関係なく、はどんなに大きな値を設定しても #b を超えることはできないので、z-index は html のレベルを突破することができません。同じレベルでなければ力を発揮できません。では、この問題を解決するにはどうすればよいでしょうか?逆に考えてもいいのですが、いとこ同士の順序は整理できないのであれば、親のレベルを整理したらどうでしょうか? そこで、#box_1 と z-index の css に z-index: 100; を追加します。 : 1; #box_2 の css に追加します。効果をもう一度見てみましょう:

#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}   
#box_1 {z-index:100;}   
#box_2 {z-index:1;}   
#a, #b {position:absolute; width:100px; height:300px; }   
#a {background:#c00; }   
#b {background:#0c0; left:50px;}
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

vscodeで不明な属性を設定する方法 vscodeで不明な属性を設定する方法 vscodeで不明な属性を設定する方法 vscodeで不明な属性を設定する方法 May 09, 2024 pm 02:43 PM

1. まず、左下隅にある設定アイコンを開き、設定オプションをクリックします。 2. 次に、ジャンプしたウィンドウで CSS 列を見つけます。 3. 最後に、不明なプロパティ メニューのドロップダウン オプションをエラー ボタンに変更します。 。

Visual Studio 2019 で CSS のデフォルトのプロパティを設定するためのグラフィカルな手順 Visual Studio 2019 で CSS のデフォルトのプロパティを設定するためのグラフィカルな手順 May 09, 2024 pm 02:01 PM

1. Visual Studio 2019 を開き、そのオプション設定を見つけて、[CSS] をクリックします。 2. ここでは、次の属性の技術設定を確認できます。 3. ここでテキストと塗りつぶしの境界線を設定できます。 4. このとき、ここでフローティング位置を設定することもできます。 5. この時点で、ここで境界線と背景を設定して操作を完了することもできます。 6. 最後に、ここで [OK] ボタンをクリックして、CSS のデフォルトのプロパティを設定します。

Vue のコンポーネント内のスタイルを分離する方法 Vue のコンポーネント内のスタイルを分離する方法 May 09, 2024 pm 03:57 PM

Vue コンポーネントでのスタイルの分離は 4 つの方法で実現できます。 スコープ付きスタイルを使用して、分離されたスコープを作成します。 CSS モジュールを使用して、一意のクラス名を持つ CSS ファイルを生成します。モジュール性と再利用性を維持するために、BEM 規則を使用してクラス名を編成します。まれに、スタイルをコンポーネントに直接挿入できる場合がありますが、これはお勧めしません。

vue の v-show と v-if の違い vue の v-show と v-if の違い May 09, 2024 pm 01:48 PM

Vue における v-show と v-if の主な違いは次のとおりです。 v-show: 表示スタイル属性を変更することで要素の表示を制御します。これは、表示/非表示を頻繁に切り替える要素にとって軽量でパフォーマンスに優れています。要素が占めるスペースが保持され、ちらつきが発生する可能性があります。 v-if: 条件によって要素を挿入または削除します。レイアウト フローに影響を与え、ちらつきを回避します。ただし、要素の破棄と再作成のコストが高く、表示要素と非表示要素を頻繁に切り替えるには適していません。

Bitstamp Exchange Pro に登録するにはどうすればよいですか?安全ですか?公式ですか? Bitstamp Exchange Pro に登録するにはどうすればよいですか?安全ですか?公式ですか? Aug 13, 2024 pm 06:36 PM

BitstampPro の登録方法は? BitstampPro Web サイトにアクセスしてください。個人情報とメールアドレスを入力してください。パスワードを作成し、規約に同意します。メールアドレスを確認してください。 BitstampPro は安全ですか?認証が必要です。 2 要素認証の使用を強制します。ほとんどの資産は冷蔵倉庫に保管されています。 HTTPS を使用して通信を暗号化します。定期的なセキュリティ監査を実施します。 BitstampPro は合法ですか?ルクセンブルクで登録されています。ルクセンブルク金融監督委員会によって規制されています。マネーロンダリング防止および顧客確認に関する規制を遵守します。

Vue でクラスとスタイルを動的にバインドする方法 Vue でクラスとスタイルを動的にバインドする方法 May 09, 2024 pm 01:12 PM

Vue では、v-bind ディレクティブを通じてクラス名とスタイルを動的にバインドできます。クラス名をバインドするには、v-bind:class ディレクティブを使用してオブジェクトまたは配列を渡します。オブジェクトの true 値は、スタイルをバインドするために要素に追加されることを意味し、v-bind を使用します。 :style ディレクティブはオブジェクトとオブジェクト キーを渡します。値は属性値を表します。v-bind 命令は配列値を渡すこともでき、各配列要素はオブジェクトまたは文字列になります。バインドされたデータ値が変更されると、Vue は要素のクラス名やスタイルを自動的に更新し、コンポーネントの状態やユーザーの操作に基づいて要素の外観を変更します。

DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? DCAT管理者にデータを追加するためにクリックのカスタムテーブル関数を実装する方法は? Apr 01, 2025 am 07:09 AM

DCATを使用するときにDCATADMIN(Laravel-Admin)にデータを追加するためにカスタムクリックのテーブル関数を実装する方法...

仮想通貨取引プラットフォームアプリの最新のランキングリスト(上位10の仮想通貨取引プラットフォームの在庫) 仮想通貨取引プラットフォームアプリの最新のランキングリスト(上位10の仮想通貨取引プラットフォームの在庫) Mar 04, 2025 pm 03:51 PM

この記事では、OKX、Binance、Gate.io、Huobi、Kraken、Coinbase、Kucoin、Crypto.com、Bitfinex、Bitstampなど、世界のトップ10の主要な暗号通貨取引所をリストします。技術的な強さ、豊富な製品ライン、厳格なコンプライアンス運用、革新的な生態学的構造により、これらの交換は世界の暗号通貨市場でリードしています。この記事では、それぞれ特別な機能、技術アーキテクチャ、セキュリティ対策、コンプライアンス資格、エコシステム構造を紹介し、投資家が適切な取引プラットフォームを選択するための参照を提供します。

See all articles