モーダル を実装しております。
モーダル 自体はきちんと動きます。
そこで、モーダル を開くボタンをおし、モーダル が出てきた際、bodyの部分はmodal_bgとしてグレーのレイヤーがかかるようにしています。
そこで、問題なのが、このモーダルが開いた際、bodyとグレーのレイヤーがスライドしてしまいます。
モーダル が開いた際、背景は固定されているようにしたいです。
自分で行ったこととしては、
そこで、調べつつ
height: 100vh;
overflow-y: hidden;
を追加したり、自分でJSを書いたりしましたが、うまくいきませんでした。
私としては、モーダルオープンを押した時に、cssにすでに記載しているmodal-openのクラスが付与され、背景が固定化し、モーダル閉じるを押すと、クラスが除去されるというように実装したつもりでした。
おそらくJSの書き方に問題があるのかもしれません。
何か悪い点など見当たればご教授頂きたいです。よろしくお願いいたします。
(文字数の都合上、モーダル のデザインのCSSは省略させて頂いております。)
html
1 <div class="work-photo"> 2 <div class="container"> 3 <h3 class="work-title">Photography</h3> 4 <div class="work-items"> 5 <div class="work-item"> 6 <p class="work-item-title"></p> 7 <a class="js-modal-open" href="" data-target="modal04"><img src="/img/work-1-icon.jpg" alt=""></a> 8 </div> 9 <div class="work-item"> 10 <p class="work-item-title"></p> 11 <a class="js-modal-open" href="" data-target="modal05"><img src="/img/work-2-icon.JPG" alt=""></a> 12 </div> 13 <div class="work-item"> 14 <p class="work-item-title"></p> 15 <a class="js-modal-open" href="" data-target="modal06"><img src="/img/work-3-icon.jpg" alt=""></a> 16 </div> 17 </div> 18 </div> 19 20 <div id="modal04" class="modal js-modal"> 21 <div class="modal__bg js-modal-close"></div> 22 <div class="modal__content"> 23 <img src="/img/work-1.jpg" alt="photo-1"> 24 <a href="" class="js-modal-close">close</a> 25 </div> 26 </div> 27 <div id="modal05" class="modal js-modal"> 28 <div class="modal__bg js-modal-close"></div> 29 <div class="modal__content"> 30 <img src="/img/work-2.jpg" alt="photo-2"> 31 </div> 32 <a href="" class="js-modal-close">close</a> 33 </div> 34 </div> 35 <div id="modal06" class="modal js-modal"> 36 <div class="modal__bg js-modal-close"></div> 37 <div class="modal__content"> 38 <img src="/img/work-3.jpg" alt="photo-3"> 39 </div> 40 <a href="" class="js-modal-close">close</a> 41 </div> 42 </div> 43 44 </div> 45 </div>
javascript
1 2jQuery(function(){ 3 jQuery('.js-modal-open').each(function(){ 4 jQuery(this).on('click',function(){ 5 var target = jQuery(this).data('target'); 6 var modal = document.getElementById(target); 7 jQuery(modal).fadeIn(); 8 return false; 9 }); 10 }); 11 jQuery('.js-modal-close').on('click',function(){ 12 jQuery('.js-modal').fadeOut(); 13 return false; 14 }); 15}); 16 17 18 19jQuery(function($){ 20 $('.js-modal-open').on('click', function () { 21 $body.toggleClass('modal-open'); 22 $('.js-modal-close').on('click', function () { 23 $body.removeClass('modal-open'); 24 }); 25 }); 26}); 27
css
1 2 3.modal{ 4 display: none; 5 height: 100vh; 6 position: fixed; 7 top: 0; 8 width: 100%; 9 z-index: 999; 10 11.modal__bg{ 12 background: rgba(0,0,0,0.8); 13 position: absolute; 14 width: 100%; 15 height: 100%; 16} 17.modal__content{ 18 background: #fff; 19 left: 50%; 20 padding: 50px 35px; 21 position: absolute; 22 top: 50%; 23 transform: translate(-50%,-50%); 24 width: 70%; 25 max-width: 500px; 26 height: 70%; 27 overflow-y: scroll; 28 z-index: 999; 29 img { 30 margin-bottom: 30px; 31 } 32 .work-item-text { 33 text-align: center; 34 width: 85%; 35 margin: 0 auto; 36 .fas { 37 font-size: 25px; 38 padding-right: 10px; 39 } 40 .work-place { 41 padding: 10px 0; 42 } 43 .work-camera { 44 padding-bottom: 30px; 45 } 46 .work-explain { 47 padding-bottom: 20px; 48 line-height: 25px; 49 } 50 } 51 .work-url { 52 padding-bottom: 30px; 53 } 54 55 56 .js-modal-close { 57 display: block; 58 text-align: center; 59 color: $text-color; 60 padding: 10px; 61 border: 1px $text-color solid; 62 width: 50%; 63 margin: 0 auto; 64 &:hover { 65 background-color: $text-color; 66 color: #fff; 67 } 68 } 69} 70} 71 72 73 74body .modal-open { 75 height: 100vh; 76 overflow-y: hidden; 77} 78