
通常「モーダル・ポップアップ」はjQueryを利用して実装するケースが多いかと思いますが、今回紹介する[Pure CSS Modal Popup]は、その名のとおりスタイルシートの設定だけで実装できる便利なテクニックです。
まずは下記URLよりサンプルをご覧ください。
Pure CSS Modal Popup:実装サンプル
HTMLの記述
実際にサンプルサイトで使っているHTMLコードです。
<div class="modal"> <input id="modal-trigger" type="checkbox"> <label for="modal-trigger">Launch Modal</label> <div class="modal-overlay"> <div class="modal-wrap"> <label for="modal-trigger">✖</label> <h4>ポップアップ・ウィンドウ・タイトル</h4> <p>コンテンツ</p> </div> </div> </div>
ここでのポイントはinput要素に必ず「id属性」を指定しておくこと。
さらにポップアップする要素の外側と内側にlabel要素を作ります。このlabel要素には「for属性」を追加して、先ほどのinput要素に記述した「id属性」と同じ値を記述します。
こうして紐づけられたinput要素とlabel要素が、この[Pure CSS Modal Popup]のキモの部分になってきます。
CSSの記述
以下、スタイルシートの中からモーダル・ポップアップの動作に関わる主要な要素をピックアップしました。
.modal > label {
background: #FFD300;
color: #000;
cursor: pointer;
display: inline-block;
}
.modal-overlay {
background:#000;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
text-align:center;
}
.modal-wrap {
position: relative;
margin: 0 auto;
width: 100%;
}
.modal-wrap label {
background: #FFD300;
color: #000;
cursor: pointer;
display: inline-block;
}
input {
position: absolute;
z-index: -9999;
visibility: hidden;
}
.modal-overlay {
opacity:0;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
-webkit-transition: all 0.75s cubic-bezier(0.65, -0.55, 0.265, 1.55);
-moz-transition: all 0.75s cubic-bezier(0.65, -0.55, 0.265, 1.55);
-ms-transition: all 0.75s cubic-bezier(0.65, -0.55, 0.265, 1.55);
-o-transition: all 0.75s cubic-bezier(0.65, -0.55, 0.265, 1.55);
transition: all 0.75s cubic-bezier(0.65, -0.55, 0.265, 1.55);
z-index: -999;
}
input:checked ~ .modal-overlay {
opacity: 1;
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-0-transform: scale(1);
transform: scale(1);
z-index: 999;
}
スタイルシート側ではinput:checkedのときに間接セレクタ「~」を使ってinput:checked ~ .modal-overlayと指定して、インプット要素にチェックされたときにオーバーレイが実行される仕組みになっています。これがポップアップ時の背景になるワケです。
HTML側でポップアップする要素の外側と内側にlabel要素を2つ作った理由は、モーダル・ウィンドウを閉じるときに必要になるからです。
input要素と2つのlabel要素が紐づけられているために、それぞれのlabel要素のクリックでinput要素のオン・オフを切り替え、それがモーダル・ウィンドウの表示・非表示に繋がっていると言う仕組みになっています。
仕組みが理解できれば実装は簡単ですね。
難しいjQueryは抜きで、デザインも含めすべての処理がスタイルシートだけで完結しているので、初心者の方でも比較的簡単に扱えると思います。
ぜひご利用ください。
Pure CSS Modal Popup:実装サンプル