負のz-indexを持つ要素がクリックできない問題の解決策

負のz-indexを持つ要素がクリックできない問題の解決策
最近、ポップアップ広告に取り組んでいました。デフォルト ページには z-index が設定されていないため、負の z-index を持つ要素はクリックできないことがわかりました。解決策は、ポップアップ広告の z-index を 1 に設定し、他の要素の z-index を増やすことです。

次のような要件があると仮定します。



ヘッダーとメイン領域はすでにあります。次に、ページに背景画像を追加する必要があります。背景レイヤーはメイン領域の下にある必要がありますが、メイン領域の外側の部分はクリック可能で、リンクになっています。

ちょっと考えてみたところ、背景画像はクリックできないので、背景画像を使用してこれを実現することはできないことに気付きました。 js を使用して body のクリックを監視し、クリック位置に基づいて背景画像がクリックされたかどうかを判断することもできますが、これはあまりにも扱いにくいです。そこで、メインエリアの下にレイヤーを追加し、z-index: -1 を設定することにしました。画像は bgImg の背景画像として設定されます。コードは次のとおりです。

 <!DOCTYPE html>
<html>
    <ヘッド>
    <スタイル>
      .bgImg {位置: absolute; z-index: -1; 背景: url(...) no-repeat center;}
    </スタイル>
    </head>
    <本文>
         <ヘッダー></ヘッダー>
         <div class="bgImg"></div>
         <div class="main"><div>
    </本文>
</html>

しかし、この設定後、負の z-index を持つ要素が body レイヤーの下に配置されるため、クリック イベントとホバー イベントが body レイヤーによってカバーされ、bgImg をクリックできず、ホバーしても手の形が表示されなくなります。

解決:

1. z-index を 0 に設定します。メイン領域を position:relative; z-index: 1; に設定します。これにより、背景レイヤーがメイン領域に影響を与えなくなり、メイン領域の外側の部分もクリックできるようになります。



2. 構造は1と同じですが、実装方法が異なります。位置を使用する代わりに、負の margin-bottom を使用します。

背景レイヤー {height: 500px; margin-bottom: -500px;}

メインエリアでは変更は必要ありません。

原則として、負の margin-bottom は下の要素を引き上げ、背景レイヤーの高さ = height + padding-top + padding-bottom + border-top-width + border-bottom-width + margin-top + margin-bottom = 0 となります (設定されていないプロパティはすべて reset.css で 0 にリセットされます)。そのため、背景レイヤーはドキュメント フローのスペースを占有せず、クリックすることができます。

<<:  CSS で複数の境界線を実装するためのヒント

>>:  フロントエンドの vue+express ファイルのアップロードとダウンロードの例

推薦する

React+TS を使用したシンプルな Jira プロジェクトを実装するためのベスト プラクティス

トレーニングのための一連のプロジェクト反応+ts内容は少ないですが、フックのカプセル化、ts ジェネ...

HTML ヘッド構造

以下では、よく使われるヘッド構造と、各タグや要素の意味や使用シーンを紹介します(この記事は、Yisi...

データベース内のSQL整合性制約ステートメントの分析

整合性制約整合性制約はテーブル データの正確性を保つためのものです。データが正しくない場合は、そもそ...

MySQL 最適化 query_cache_limit パラメータの説明

クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...

CSS3はさまざまな境界効果を実現します

半透明の境界線結果: 実装コード: <div> 半透明の境界線が見えますか? </...

ReactにおけるRefの相互利用の詳細な説明

目次1. まずRefとは何かを説明しましょう2. フックでのrefの使用1. HTMLDomフックで...

Vuex環境の詳細な説明

目次Vuex環境を構築する要約するVuex環境を構築するsrcディレクトリにフォルダstoreを作成...

MySQL マルチテーブル共同クエリ操作例の分析

この記事では、MySQL のマルチテーブル共同クエリ操作について説明します。ご参考までに、詳細は以下...

MySQLとNavicatプレミアムのインストールと設定の詳細な手順

前提条件: Mac、zsh がインストールされ、bash のときに mysql がダウンロードされ、...

JSアルバム画像の揺れと拡大表示効果のサンプルコード

前回の記事では、JS を使って簡単な揺れ効果を実現する方法を紹介しました。ご興味があればクリックして...

SQL インジェクション脆弱性プロセスの例と解決策

コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...

Ace をベースにした Markdown エディターを共有する

エディターは 2 つのカテゴリに分かれていると思います。1 つは、即時レンダリングを実現するために左...

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

nginx のロケーションと書き換えの使用法の詳細な説明

1. 位置情報の利用状況の概要ロケーションは、さまざまな処理方法に対してさまざまな種類のリクエストを...

Vuex のモジュール化と名前空間の例のデモ

1. 目的:コードの保守が容易になり、さまざまなデータの分類が明確になります。 2. store/i...