CSSのみでポップアップ画面を表示
JavaScriptが使えないけれどポップアップで表示させたい
以下の機能を持つポップアップを作成します。
- 画像をクリックすることでポップアップを表示
- 任意の場所をクリックでポップアップを閉じる
- 閉じるボタンも表示する(ユーザビリティへの配慮)
HTML:基本の書き方
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div class="tmb"> <label for="pop-01"> <img src="images/image_01.jpg" alt="image_01" class="tmb_img"> </label> <input type="checkbox" value="" id="pop-01"> <div class="popup"> <label for="pop-01" class="popup__btn"></label> <label for="pop-01" class="popup__btnarea"></label> <div class="popup__img"> <img src="images/image_01.jpg" alt="image_01"> </div> </div> </div> |
「tmb(thumbnailの略)」クラスが文字通りサムネイル担当、
「popup」クラスがポップアップ画面担当です。
「popup__btn」は閉じるボタン(×はCSSで表示)、「popup__btnarea」は画面いっぱいに描画してクリックを感知→閉じる役割を持っています。
時おり、labelの中にdivやimgを入れた方法を見かけますが、htmlの文法チェックでエラーが出たので採用していません。
サムネを複数配置したい場合は、labelとinputのid名を「pop-02,pop-03,…」のように変更します。
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
.tmb { width: 50%; } .tmb_img { width: 100%; height: auto; } .tmb_img:hover { cursor: pointer; } .popup { z-index: 10; position: fixed; top: 0; left: 0; width: 100%; height: 100%; transform: scale(0); background-color: rgba(0, 0, 0, 0.8); opacity: 0; transition: opacity 0.3s, transform 0s 0.3s; } .popup__btn { display: block; z-index: 13; position: absolute; top: 1vh; right: 1vh; width: 5vh; height: 5vh; cursor: pointer; } .popup__btn::before, .popup__btn::after { position: absolute; top: 50%; width: 100%; height: 2px; margin-top: -1px; background-color: #fff; content: ''; } .popup__btn::before { transform: rotate(45deg); } .popup__btn::after { transform: rotate(-45deg); } .popup__btnarea { z-index: 12; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .popup__img { z-index: 11; position: absolute; top: 5%; left: 5%; width: 90%; height: 90%; } .popup__img img { width: 100%; height: 100%; object-fit: contain; } input[type="checkbox"] { display: none; } input[type="checkbox"]:checked ~ .popup { transform: scale(1); opacity: 1; transition: opacity 0.3s; } |
z-indexを利用し、上から「popup__btn」→「popup__btnarea」→「popup__img」と配置します。これでどこをクリックしてもポップアップが閉じます。
まとめ
ポップアップの作成方法は多くのサイトで紹介されていますが、何とか簡潔にできないものかと考えてひねり出した方法です。
画像の表示しか試していませんが、文章、動画の表示にも利用できるかもしれません。