ボタン・広告

クリックでポップアップ表示する追従バナー(改)

【広告・告知に最適】クリックでポップアップするブロックのCSS

See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.

Rerunで再読み込み↑

右下の画像をクリックすると、ポップアップで詳細情報を表示するブロック。中身と画像だけ変更すれば、他はコピペで使えます。
※サンプルはポップアップを小さくしています

邪魔にならないようにバナーを閉じるためのボタンも用意していますが、碌に見ずにすぐ削除されるのも面白くないので、少し遅れてフェードインするようにしています。

主にイベントや広告のために使うことが多いと思いますが、デザインを調整して補足説明などに使うのも良いでしょう。

CSSの解説

  • input type=checkbox:チェックボックス
  • label:チェックボックスに✔を入れるためのボタン的要素

input と labelがセットになるということだけはおさえておいてください。
この2つの要素を使用する大まかな流れは以下のようになります。

  1. label要素がクリックされる
  2. inputのチェックボックスに✔が入る
  3. ✔が入った時の疑似要素:checkedを使い、表示したい要素をdisplay: nonedisplay: blockで切り替える

気をつけるポイントとして、inputは最初にまとめて書くこと
理由としてはCSSで同階層の後に続く要素を指定する "~" を使用するためです。チェックボックスより前に書かれている要素は、✔の有無で条件分岐させることができないので注意してください。
("最初"である必要はありませんが、まとめて最初に書いておいた方が管理上も楽だと思います)
また、inputlabelには同じidを振り分けることも忘れずに。
inputにはid=""で指定、labelはfor=""でIDを指定します。

今回は、以上のようなチェックボックスを「バナーを閉じる」、「ポップアップを開く」、「ポップアップを閉じる」の3つ作成しています。(詳細は下記で解説)

チェックボックスについて、まだよく分からないという方はこちらをご覧ください。
チェックボックスを使った要素の表示・非表示切り替え

バナーを閉じるチェックボックス

<!--チェックボックス -->
<input type="checkbox" id="trg-close">

<!--ラベル-->
<label for="trg-close" class="circle-close">
  <img src="">
</label>

※便宜上チェックボックスとラベルを並べて書いていますが、隣接させる必要はありません

/*チェックボックス*/
#trg-close{
  display: none;
}

/*閉じるボタンが押された or ポップアップした時*/
#trg-close:checked ~ .circle-close, #popup:checked ~ .circle-close{
  display: none; /*ボタンを削除*/
}

チェックボックス自体はユーザーに見せる必要がないため、常時display:noneで隠しておきます。

ラベル(閉じるボタン)に関しては、閉じるボタンをクリックした時#trg-close:checked、ポップアップした時(バナーをクリックした時)#popup:checkeddisplay: noneで非表示にします。

"~" は「同じ階層かつ後に続く要素」を指定する際に使います。
#trg-close:checked ~ .circle-closeであれば、✔が入った状態の #trg-close より後ろにある同じ階層のクラス .cirlce-close だけに限定されます。

開くためのチェックボックス

<!-- ポップアップのためのチェックボックス -->
<input type="checkbox" id="popup">

<!-- ラベル(バナー画像) -->
<label for="popup" class="pup-trg">
  <img src="">
</label>

チェックを入れるためのlabelには画像を使用しています。

/*チェックボックス*/
#popup{
  display: none; /*ユーザーに見せない*/
}

/*ポップアップした or 閉じるボタンが押された*/
#popup:checked ~ .pup-trg, #trg-close:checked ~ .circle-close{
  display: none; /*バナーを削除*/
}

チェックボックスはユーザーに見せても意味がないので、display: noneで非表示に。

また、ポップアップした時と閉じるボタンが押された時に、ラベル(バナー画像)をdisplay: noneで非表示にします。

閉じるためのチェックボックス

<input type="checkbox" id="popup-close">

<!-- ポップアップ -->
<div class="pup-block">
  <!-- 閉じるための要素 -->
  <label for="popup-close">
    <div class="pup-overlay"></div><!--オーバーレイ-->
    <div class="close-btn">×</div> <!--閉じるボタン-->
  </label>
<!--ここにポップアップ内容-->
</div>

ポップアップを閉じる際も同様にチェックボックスを使用します。

その際、labelはポップアップを開いている時にだけ表示したいので、 label をポップアップさせる要素 (.pup-block) の中に組み込みます。

なお、今回は label をオーバーレイ(黒背景)と×ボタンの両方に設定。labelにしたい要素が複数ある場合も、labelのタグの中に入れるだけです。

/*チェックボックス*/
#popup-close{
 display: none; /*非表示*/ 
}

/*× or オーバーレイをクリックしたら*/
#popup-close:checked ~ .pup-block{
  display: none; /*ポップアップを削除*/
}

チェックボックス本体を非表示にしておくのは、他と同様。

label(×やオーバーレイ)がクリックされた場合に、display:noneでポップアップ全体を削除します。

ポップアップ要素

ポップアップ要素はチェックボックスにより、以下のように変化します。

  • 通常時はdisplay: none
  • バナーがクリックされ、開く用のチェックボックスに✔が入ればdisplay: block
  • オーバーレイや×がクリックされ、閉じる用のチェックボックスに✔が入ればdisplay: none

条件分岐は以下の通りです。

/*通常時*/
.pup-block{
  display: none;
}

/*開くボタンクリック時*/
#popup:checked ~ .pup-block{
  display: block;
}

/*閉じるボタンorオーバーレイのクリック*/
#popup-close:checked ~ .pup-block{
  display: none;
}

なお、レイアウトに関しては以下の画像のようになっています。
背面から順にオーバーレイ→閉じるボタン→広告を固定表示しています。

ポップアップブロックのレイアウト