CSS の :chekced
擬似クラスを利用して表示を制御する方法です。
参考にさせていただいたサイトです。
上記のサイトでは要素を id で指定していますが、class で指定するように変更することで複数のモーダルの表示ができるようになります。
以下の例では同じページで二つのモーダルを表示させています。
コード
HTML
<label for="first-modal"><span>最初のモーダルを表示</span></label> <label for="second-modal"><span>二つ目のモーダルを表示</span></label> <div class="modal"> <input id="first-modal" class="modal-checkbox" type="checkbox"> <label for="first-modal" class="modal-close"></label> <div class="modal-content"> <div>最初のモーダル</div> </div> </div> <div class="modal"> <input id="second-modal" class="modal-checkbox" type="checkbox"> <label for="second-modal" class="modal-close"></label> <div class="modal-content"> <div>二つ目のモーダル</div> </div> </div>
CSS (SASS)
// モーダルの土台 .modal { // ページの中央に配置 margin: auto; width: 50%; } // モーダルの中身 .modal-content { // モーダルをページ外(ページの上部)に配置する position: fixed; top: 0; transform: translateY(-100%); // 表示する時のアニメーション transition: all 0.3s ease-in-out 0s; // 表示時の背景との表示順を指定 z-index: 40; // 表示時の背景のグレイアウトに影響されないように背景色を設定 background: #fff; // 見た目を綺麗に padding: 20px; border-radius: 8px; width: 640px; } // モーダルの背景(クリックするとモーダルを閉じる) .modal-close { // 通常は非表示 display: none; // ページ全体を黒色で覆う position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #000; opacity: 0; // 表示時のフェードイン transition: all 0.3s ease-in-out 0s; // モーダルの背面に配置 z-index: 39; } // 表示の制御をするためのチェックボックス .modal-checkbox { // チェックボックス自体は非表示 // (!important は必要な場合に設定してください) display: none !important; // チェックされたときの表示の設定 &:checked ~ { .modal-content { // 表示位置をページ内に変更する transform: translateY(0); top: 100px; // 影をつける box-shadow: 6px 0 25px rgba(0, 0, 0, 0.16); } .modal-close { // 背景に薄く表示する display: block; opacity: 0.3; } } }
明日の自分のための補足説明。
~
は兄弟要素を指しています。
実行
ページを開くと二つのキャプションが表示されます。
最初のキャプションをクリックした状態。
二つ目のキャプションをクリックした状態。
<label for="first-modal">×</label>