基本的に以下ページを、自分用に使いやすくカスタムしただけ。
# 複数modal対応のcode
<!-- 以下claickでjs発火 data-target="ユニーク名" で紐付け -->
<div class="js-modal-open" href="" data-target="modal01">クリックでモーダル1を表示</div>
<div class="js-modal-open" href="" data-target="modal02">クリックでモーダル2を表示</div>
<!-- data-targetで紐付けた内容 idで管理 -->
<div id="modal01" class="modal js-modal">
<div class="modal__bg js-modal-close"></div>
<div class="modal__content">
<p>1つ目モーダルウィンドウです。</p>
<a class="modal__close-btn js-modal-close" href=""></a>
</div><!--modal__content-->
</div><!--modal-->
<div id="modal02" class="modal js-modal">
<div class="modal__bg js-modal-close"></div>
<div class="modal__content">
<p>2つ目モーダルウィンドウです。</p>
<a class="modal__close-btn js-modal-close" href=""></a>
</div><!--modal__content-->
</div><!--modal-->cssはこれを突っ込めば行けるはず。
以下参考コードはSCSSなので注意。
通常のcssはscssの下に記載。
// mordal
//=====================================================
body.fixed {
position: fixed;
width: 100%;
height: 100%;
left: 0;
}
.modal {
display: none;
height: 100vh;
position: fixed;
top: 0;
width: 100%;
z-index: 99999;
left: 0;
}
.modal__bg {
background: rgba(0,0,0,0.8);
height: 100vh;
position: absolute;
width: 100%;
}
.modal__content {
box-sizing: border-box;
background: #fff;
left: 50%;
padding: 45px;
position: absolute;
top: 50%;
transform: translate(-50%,-50%);
width: 90%;
max-width: 113rem;
max-height: 80vh;
//overflow: scroll;
min-height: 400px;
}
.modal__close-btn {
position: absolute;
width: 64px;
height: 64px;
top: 0;
right: 0;
//background: red;
&:before {
content: "";
display: block;
width: 46px;
height: 1px;
background: #000;
transform: rotate(45deg);
transform-origin: center;
position: relative;
top: 31px;
left: 10px;
}
&:after {
content: "";
display: block;
width: 46px;
height: 1px;
background: #000;
transform: rotate(-45deg);
transform-origin: center;
position: relative;
top: 31px;
left: 10px;
}
}こっちは↓↓↓通常のCSS。
body.fixed {
position: fixed;
width: 100%;
height: 100%;
left: 0;
}
.modal {
display: none;
height: 100vh;
position: fixed;
top: 0;
width: 100%;
z-index: 99999;
left: 0;
}
.modal__bg {
background: rgba(0, 0, 0, 0.8);
height: 100vh;
position: absolute;
width: 100%;
}
.modal__content {
box-sizing: border-box;
background: #fff;
left: 50%;
padding: 45px;
position: absolute;
top: 50%;
transform: translate(-50%, -50%);
width: 90%;
max-width: 113rem;
max-height: 80vh;
min-height: 400px;
}
.modal__close-btn {
position: absolute;
width: 64px;
height: 64px;
top: 0;
right: 0;
}
.modal__close-btn:before {
content: "";
display: block;
width: 46px;
height: 1px;
background: #000;
transform: rotate(45deg);
transform-origin: center;
position: relative;
top: 31px;
left: 10px;
}
.modal__close-btn:after {
content: "";
display: block;
width: 46px;
height: 1px;
background: #000;
transform: rotate(-45deg);
transform-origin: center;
position: relative;
top: 31px;
left: 10px;
}以下js。
jQueryを先に読むのを忘れずに。
ver.3系で動作確認。
// modal
//=====================================================
$(function(){
$('.js-modal-open').each(function(){
$(this).on('click',function(){
scrollPosition = $(window).scrollTop();
$('body').addClass('fixed').css({'top': -scrollPosition});
var target = $(this).data('target');
var modal = document.getElementById(target);
$(modal).fadeIn();
return false;
});
});
$('.js-modal-close').on('click',function(){
$('body').removeClass('fixed').css({'top': 0});
window.scrollTo( 0 , scrollPosition );
$('.js-modal').fadeOut();
return false;
});
});
コメントを残す