負の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 ファイルのアップロードとダウンロードの例

推薦する

Vue での keepAlive の使用例の詳細な説明

開発においては、一覧から詳細ページにジャンプし、また詳細ページに戻る際に一覧ページの状態(スクロール...

Dockerコンテナのエクスポートとインポートの例

目次DockerコンテナのエクスポートDockerコンテナのインポ​​ートこの記事では主に、コンテナ...

MySQLが数十億のトラフィックをサポートする方法

目次1 マスター・スレーブの読み取り・書き込み分離1.1 コア2 マスタースレーブレプリケーション2...

K8Sの高度な機能を理解するための記事

目次K8Sの高度な機能高度な機能要約するkubectl サービスの問題のトラブルシューティングK8S...

LinuxサーバにおけるNginxとApacheの共存の実装方法の分析

この記事では、Linux サーバー上で Nginx と Apache の共存を実装する方法について説...

deepin apt コマンドを使用して最新バージョンの docker をインストールする方法

ステップ1: Ubuntuソースを追加するルートに切り替える suルートソフトウェアソースファイルの...

JavaScript のマイクロタスクとマクロタスクの説明

序文: js はシングルスレッド言語なので、非同期にすることは不可能です。しかし、js のホスト環境...

Vue印刷機能を実装する2つの方法の概要

方法1: npm経由でプラグインをインストールする1. npm install vue-print-...

docker を使って sonarqube を構築する方法

目次1. Dockerをインストールする2. ソナーイメージをインストールする3. ソナーを使ってコ...

ウェブページを白黒に変換します(Google、Firefox、IE、その他のブラウザと互換性があります)

CSSファイルに書き込むコードをコピーコードは次のとおりです。 01.html {グレイスケール(1...

MySQLでテーブルを接続するいくつかの方法

MySQL テーブルでの接続方法は実は非常に簡単なので、ここではその特徴を簡単にリストします。テーブ...

MySQL InnoDB インデックス拡張の詳細な説明

インデックス拡張: InnoDB は、プライマリ キー列をそのインデックスに追加することで、各セカン...

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

1. 成果を達成する 2. バックエンドから返されるデータ形式 「リスト」: [ { "i...

yumコマンドの使い方

1. yumの紹介Yum (フルネームは Yellow dogUpdater、Modified) は...