See the Pen Untitled by チータツ (@cheese_fuji) on CodePen.
Rerunで再読み込み↑
右下の画像をクリックすると、ポップアップで詳細情報を表示するブロック。中身と画像だけ変更すれば、他はコピペで使えます。
※サンプルはポップアップを小さくしています
邪魔にならないようにバナーを閉じるためのボタンも用意していますが、碌に見ずにすぐ削除されるのも面白くないので、少し遅れてフェードインするようにしています。
主にイベントや広告のために使うことが多いと思いますが、デザインを調整して補足説明などに使うのも良いでしょう。
CSSの解説
前提として、今回はクリック感知のために以下の二つを使用して条件分岐を行っています。
- input type=checkbox:チェックボックス
- label:チェックボックスに✔を入れるためのボタン的要素
input と labelがセットになるということだけはおさえておいてください。
この2つの要素を使用する大まかな流れは以下のようになります。
- label要素がクリックされる
- inputのチェックボックスに✔が入る
- ✔が入った時の疑似要素:checkedを使い、表示したい要素をdisplay: noneとdisplay: blockで切り替える
気をつけるポイントとして、inputは最初にまとめて書くこと。
理由としてはCSSで同階層の後に続く要素を指定する "~" を使用するためです。チェックボックスより前に書かれている要素は、✔の有無で条件分岐させることができないので注意してください。
("最初"である必要はありませんが、まとめて最初に書いておいた方が管理上も楽だと思います)
また、inputとlabelには同じ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:checkedにdisplay: 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;
}
なお、レイアウトに関しては以下の画像のようになっています。
背面から順にオーバーレイ→閉じるボタン→広告を固定表示しています。
