LoginSignup
5
7

More than 5 years have passed since last update.

プラグインを使わない超カンタンなモーダルウィンドウの作り方

Posted at

ちょっとしたモーダルをプラグインを使わずに簡単に書くためのメモになります。
ほぼ参考サイト様のまんまですが、モーダルを天地中央に置く記述はCSSにまかせて、
より短いコードにしています。

サンプルコード

DEMO

HTML


<a href="javascript:void(0)" id="js_modal_open" class="btn">modal</a>
<div class="modal">
    <div class="modal-btn_box">
        <a href="javascript:void(0)" class="close_btn" id="js_modal_close"><i data-icon="ei-close" data-size="m"></i></a>
    </div>
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium
        quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium.</p>
</div>

CSS


.btn{
  display: block;
  margin: 100px auto;
  padding: 10px 0;
  width: 140px;
  color: #fff;
  background: #333;
  text-align: center;
  text-decoration: none;
}
.modal{
  display: none;
  width: 40%;
  position: absolute;
  top: 50%;
  left: 50%;
  background: #fff;
  padding: 20px;
  transform: translate(-50%,-50%);
  box-sizing: border-box;
  z-index: 1;
  @media screen and (min-width: 480px) {
      width: 80%;
  }
}
.modal-btn_box{
  text-align: right;
}
.close_btn{
  display: inline-block;
  width: 50px;
  height: 50px;
  color: #333;
}
.is-overlay{
  display: none;
  width: 100%;
  height: 120%;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 0;
  background-color: rgba(0,0,0,.6);
}


js


$(function(){
  $('#js_modal_open').on('click', function(){
      $(this).blur(); //ボタンからフォーカスをはずす
      if($('.is-overlay')[0]){ // すでにオーバーレイが存在していたら何もしない
          return false;
      }
      $('body').append('<div class="is-overlay"></div>'); // オーバーレイをセット
      $('.is-overlay').fadeIn(300);
      $('.modal').fadeIn(400);
      // オーバーレイとモーダルをaddでまとめてフェードアウト後モーダル自身を削除
      $('.is-overlay').add($('#js_modal_close')).on('click', function(){
          $('.modal').add($('.is-overlay')).fadeOut(300, function(){
              $('.is-overlay').remove();
          });
      });
  });
});

add()で要素をまとめて指定するとこんなに簡単に☓ボタンだけでなくモーダル外をクリックした時にも非表示にできるように書けるのだなと勉強になりました。

参考

jQuery プラグインを使わないでモーダルウィンドウを表示する方法

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7