動きのあるウェブサイト制作を目指して、クリックすると背景が暗転してコンテンツが浮かび上がるモーダルウィンドウを実装しよう。
モーダルウィンドウとは
モーダル(modal)ウィンドウは、元のウィンドウの上に別枠で表示されるウィンドウのこと。
主な目的としては以下の2つ。
・重要な情報への注意を喚起
・必要な入力がなされるまで、アプリケーションの実行をブロック
元のウィンドウの上にあるボタンなどをクリックすることで、見てほしいコンテンツを表示し、表示している間は、元のウィンドウの操作はできなくなるという訳。
早速実例
専門家でない限りコピペで済むのが一番!ということで、定番のjQueryを使ってみよう。
サイト上にボタンを設置して、それをクリックすることで、画像や文章などのモーダルウィンドウが立ち上がる。
せっかくなので複数のモーダルウィンドウを設置するパターンにしてみた。
【HTML】
<button id="openModal">クリックしてね!その1</button> <!-- モーダルエリアその1ここから --> <section id="modalArea" class="modalArea"> <div id="modalBg" class="modalBg"></div> <div class="modalWrapper"> <div class="modalContents"> <h1>モーダルコンテンツその1</h1> <p>モーダルコンテンツその1の内容がここに表示されます。</p> </div> <div id="closeModal" class="closeModal"> × </div> </div> </section> <!-- モーダルエリアその1ここまで --> <button id="openModal02">クリックしてね!その2</button> <!-- モーダルエリアここから --> <section id="modalArea02" class="modalArea"> <div id="modalBg" class="modalBg"></div> <div class="modalWrapper"> <div class="modalContents"> <h1>モーダルコンテンツその2</h1> <p>モーダルコンテンツその2の内容がここに表示されます。</p> </div> <div id="closeModal" class="closeModal"> × </div> </div> </section> <!-- モーダルエリアここまで -->
【java】
<!-- ↓jqueryの読み込み --> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> <!-- ↓1つめのモーダルウィンドウ --> <script type="text/javascript"> $(function () { $('#openModal').click(function(){ $('#modalArea').fadeIn(); }); $('#closeModal , #modalBg').click(function(){ $('#modalArea').fadeOut(); }); }); </script> <!-- ↓2つめのモーダルウィンドウ --> <script type="text/javascript"> $(function () { $('#openModal02').click(function(){ $('#modalArea02').fadeIn(); }); $('#closeModal , #modalBg').click(function(){ $('#modalArea02').fadeOut(); }); }); </script>
【CSS】
.modalArea { display: none; position: fixed; z-index: 10; top: 0; left: 0; width: 100%; height: 100%; } .modalBg { width: 100%; height: 100%; background-color: rgba(30,30,30,0.9); } .modalWrapper { position: absolute; top: 50%; left: 50%; transform:translate(-50%,-50%); width: 70%; max-width: 500px; padding: 10px 30px; background-color: #fff; } .closeModal { position: absolute; top: 0.5rem; right: 1rem; cursor: pointer; }
ちょっと補足
モーダルウィンドウが立ち上がるのはボタンなので、デフォルトだと背景や罫線が入ってしまう。
ということでボタンをリセットしたいなら以下のCSSを追加しよう。
button{ background-color: transparent; border: none; cursor: pointer; outline: none; padding: 0; appearance: none; }