2020/03/03

要素の量によって高さが可変するモーダルの中央配置






高さ可変のモーダルの中央配置のやり方メモです。

width: 80%; margin: auto; right: 0; left: 0; で左右を真ん中に配置。

max-height: 300px; top: 50%; transform: translateY(-50%); で、高さ可変の縦位置の中央配置。

max-height: 200px; overflow: scroll; さらに量が増えすぎた場合にスクロールさせる。

簡単なモーダルウィンドウのサンプル | Proglad
それ以外はこちらの記事と同じコードです。



コンテンツ量の差を許容できるので、使い勝手はいいかなと思います。



See the Pen 高さ可変のモーダルの中央配置 by takapen (@takapen) on CodePen.






btn

中身

btn2

中身

中身

中身

中身

中身

中身

中身

中身

中身

中身

中身

中身





/*とりあえずのリセット*/
div,p{margin: 0;padding: 0;}
 
/*ここからモーダル用*/
.js-modal__bg {
  width: 100%;
  height: 100%;
  display: none;
  background-color: rgba(0,0,0,0.6);
  position: fixed;
  top: 0;
  left: 0;
  z-index: 100;
}
.js-modal__main {
  width: 80%;
  max-height: 300px;
  margin: auto;
  padding: 20px;
  top: 50%;
  right: 0;
  left: 0;
  transform: translateY(-50%);
  background: #fff;
  border-radius: 5px;
  position: absolute;
}
.js-modal__main__scroll {
  max-height: 200px;
  margin-bottom: 20px;
  overflow: scroll;
}
.js-modal__btn {
  cursor: pointer
}
.js-modal__btn--close {
  width: 30px;
  height: 30px;
  background: #333;
  border-radius: 50%;
  position: absolute;
  top: -12px;
  right: -12px;
  z-index: 101;
  cursor:pointer;
}
.js-modal__btn--close:before{
  content:"";
  width: 20px;
  height: 20px;
  border-right:2px solid #fff;
  transform: rotate(-45deg);
  position: absolute;
  top:12px;
  left:-3px;
}
.js-modal__btn--close:after{
  content:"";
  width: 20px;
  height: 20px;
  border-right:2px solid #fff;
  transform: rotate(45deg);
  position: absolute;
  top:-2px;
  left:-3px;
}





$(function(){
 
  var modalBtn = $('.js-modal__btn');
  var modalBtnClose = $('.js-modal__btn--close');
  var modalBg = $('.js-modal__bg');
  var modalMain = $('.js-modal__main');
 
  modalBtn.on('click', function (e) {
    $(this).next(modalBg).fadeToggle();
  });
 
  modalBtnClose.on('click', function (e) {
    modalBg.fadeOut();
  });
 
  modalMain.on('click', function (e) {
    e.stopPropagation();
  });
 
  modalBg.on('click', function () {
    $(this).fadeOut();
  });
 
});