jQueryプラグインのjquery.magnific-popup.jsを利用します。レスポンシブ対応で、bodyのスクロールバーは非表示です。html内のソースをidで指定してモーダルウィンドウ内に表示します。
なお利用にはCSSファイルとjsファイルの読み込みが必要です。
<link rel="stylesheet" href="css/magnific-popup.css">
<script src="js/jquery.magnific-popup.min.js"></script>
まず、htmlのコードです。
モーダルウィンドウを開くリンクとモーダルウィンドウのdivタグにそれぞれidを付与し、jQuery側で対象を特定できるようにします。モーダルウィンドウのdivタグにはクラス名mfp-hideを付与します。これでページ表示時はモーダルウィンドウが非表示になります。モーダルウィンドウの×と閉じるのbuttonタグにはクラス名mfp-closeを付与します。これでモーダルウィンドウを閉じる動作が実装できます。mfp-hideとmfp-closeはmagnific-popup.cssのCSSです。
<ul>
<li><a class="modal-open" id="link_category01">モーダルウィンドウ01</a></li>
<li><a class="modal-open" id="link_category02">モーダルウィンドウ02</a></li>
<li><a class="modal-open" id="link_category03">モーダルウィンドウ03</a></li>
</ul>
<div id="modal_wrap">
<div id="category01" class="modal-content mfp-hide">
<div class="modal-header">
<p class="modal-title">モーダルウィンドウ01:タイトル</p>
<button type="button" class="close mfp-close">×</button>
</div>
<div class="modal-body">
<p>モーダルウィンドウ01:ダミーテキストダミーテキストダミーテキスト</p>
</div>
<div class="modal-footer">
<button type="button" class="btn mfp-close">閉じる</button>
</div>
</div>
<div id="category02" class="modal-content mfp-hide">
<div class="modal-header">
<p class="modal-title">モーダルウィンドウ02:タイトル</p>
<button type="button" class="close mfp-close">×</button>
</div>
<div class="modal-body">
<p>モーダルウィンドウ02:ダミーテキストダミーテキストダミーテキスト</p>
</div>
<div class="modal-footer">
<button type="button" class="btn mfp-close">閉じる</button>
</div>
</div>
<div id="category03" class="modal-content mfp-hide">
<div class="modal-header">
<p class="modal-title">モーダルウィンドウ03:タイトル</p>
<button type="button" class="close mfp-close">×</button>
</div>
<div class="modal-body">
<p>モーダルウィンドウ03:ダミーテキストダミーテキストダミーテキスト</p>
</div>
<div class="modal-footer">
<button type="button" class="btn mfp-close">閉じる</button>
</div>
</div>
</div>
続いてCSSのコードです。
magnific-popup.cssのCSSであるクラス名mfp-closeを追加したことで×と閉じるのbuttonタグのCSSに影響があるため、必要な箇所はオーバーライトします。それ以外はモーダルウィンドウの体裁に関わるCSSですが、モーダルウィンドウの画面中央への表示や背景のオーバーレイのCSSはmagnific-popup.cssで制御されているため記述は不要です。
.modal-open {
text-decoration: underline;
cursor: pointer;
}
.modal-content {
max-width: 500px;
margin: 0 auto;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 0.3rem;
background: #fff;
}
.modal-header {
display: flex;
justify-content: space-between;
padding: 1rem;
border-bottom: 1px solid #dee2e6;
}
.modal-header .close {
position: relative;
width: auto;
height: auto;
font-size: 1.5rem;
font-weight: 700;
line-height: 1;
color: #000;
opacity: .5;
}
.modal-header .close:hover {
opacity: .75;
}
.modal-header .close:active {
top: 0;
}
.modal-body {
padding: 1rem;
}
.modal-footer {
display: flex;
justify-content: flex-end;
padding: 1rem;
border-top: 1px solid #dee2e6;
}
.btn {
position: relative;
width: auto;
height: auto;
display: inline-block !important;
font-weight: 400;
color: #fff !important;
text-align: center;
vertical-align: middle;
user-select: none;
background: #6c757d !important;
border: 1px solid #6c757d !important;
padding: 0.375rem 0.75rem !important;
font-size: 1rem;
line-height: 1.5;
border-radius: 0.25rem;
transition: 0.15s;
opacity: 1;
font-family: initial;
}
.btn:hover {
background: #5a6268;
border-color: #545b62;
opacity: 0.7;
transition: 0.7s;
}
.btn:active {
top: 0;
}
最後にjQueryのコードです。
モーダルウィンドウを開くリンクに付与したidがセレクタ、オプションのitemsのsrcで指定したidがモーダルウィンドウで表示する対象ソースです。なおコンテンツタイプは「inline」になりますが、初期値が「inline」のため指定していません。
$(function() {
$('#link_category01').magnificPopup({
items: {
src: '#category01'
}
});
$('#link_category02').magnificPopup({
items: {
src: '#category02'
}
});
$('#link_category03').magnificPopup({
items: {
src: '#category03'
}
});
});