PR

モーダルウィンドウ「CSS」ナナヨ マニュアル

HTML
HTMLHTML&CSS
スポンサーリンク
このページはマジで!英語が苦手なナナヨが、ホームページ作成に必要なHTMLとCSSの
基本と応用を快適に使う為、忘れないように作ったメモページです。
悪戦苦闘する過程の中で、得たヒントを少しでも、
共有または参考にしていただけると幸いです。

CSSで作るモーダルウィンドウ

このモーダルウィンドウは、HTML5 と CSS3 で作っています。
その他の Javascript と競合することは、たぶんありません。(自己責任)

表示(プレビュー)
SAMPLE モーダル表示

サンプルテキスト

サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト

サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト

サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト

サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト



このデモでは、サイズを固定しており、中身がはみ出るときは、スクロールできるようになっています。
その為、常に画面中央に配置することができます。

また、このモーダルウィンドウはレスポンシブ(768pxで切り替え)に対応しています。

ただし、このコンテンツに画像やインラインフレームが入ることを想定していないため、

含めるときは別途 CSS での調整が必要です。

ソースコード
<section class="myModal">
  <input id="myModal_open" type="radio" name="myModal_switch" />
  <label for="myModal_open">Demo</label>
  <input id="myModal_close-overlay" type="radio" name="myModal_switch" />
  <label for="myModal_close-overlay">(オーバーレイで閉じる)</label>
  <input id="myModal_close-button" type="radio" name="myModal_switch" />
  <label for="myModal_close-button"></label>
  <div class="myModal_popUp">
  <div class="myModal_popUp-content">
    <h6>SAMPLE モーダル表示</h6>
<p>サンプルテキスト</p>
<p>サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト</p>
<p>サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト</p>
<p>サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト</p>
<p>サンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキストサンプルテキスト</p>
  </div>
 </div>
</section>

  /* モーダルウィンドウ非表示 */
  .myModal_popUp {
    display: none;
  }

  /* ボタン ---------------------------------------------- */
  /* ラジオボタン非表示 */
  input[name=myModal_switch] {
    display: none;
  }

  /* ラベルの非表示 */
  #myModal_open + label ~ label {
    display: none;
  }

  /* モーダルウィンドウ ------------------------------------- */
  /* ラジオボタンをチェックでポップアップを表示 */
  #myModal_open:checked + label ~ .myModal_popUp {
    display: block;/*表示*/
    left: 50%;/*ボックスの始点を画面中央へ*/
    top: 50%;
    width: 50%;
    height: 50%;
    transform: translate(-50%,-50%);/*X軸Y軸ともに50%ずらしてボックス自体を画面の中央に配置*/
    -webkit-transform: translate(-50%,-50%);
    -ms-transform: translate(-50%,-50%);
    z-index: 99998;/*重ねる*/
    position: fixed;/*位置を固定*/
    background: #fff;
  }

  /*モーダル本文 */
  #myModal_open:checked + label ~ .myModal_popUp > .myModal_popUp-content {
    -webkit-overflow-scrolling:touch;
    overflow-y: auto;
    width: calc(100% - 5px);/*左右パディングを引く*/
    height: calc(100% - 5px - 10px );/*上下パディング*/
    padding: 10px 20px;
  }

  /* 薄暗い背景 */
  #myModal_open:checked + label + #myModal_close-overlay + label {
    background: rgba(0, 0, 0, 0.70);
    display: block;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    white-space: nowrap;
    text-indent: 100%;
    color: #fff;
    z-index: 99997;
    position: fixed;
}

  /* ★閉じるボタン */
  #myModal_open:checked ~ #myModal_close-button + label {
    width: 40%;
    height: 44px;
    text-align: center;
    font-size: 25px;
    line-height: 44px;
    bottom: 20%;
    left: 25%;
    background: #fff;
    display: block;
    z-index: 99999;
    position: fixed;
}
  /*PC表記の時は「×」*/
  #myModal_open:checked ~ #myModal_close-button + label::before {
    content: '×';
    font-family: fontawesome;
  }
    /*MO表記の時はクリックしやすく「CLOSE」*/
  #myModal_open:checked ~ #myModal_close-button + label::after {
    content: 'CLOSE';
    font-family: fontawesome;
    margin-left: 5px;
    font-size: 80%;
  }

  /* モーダル表示のフェードインアニメーション */
  .myModal_popUp {
    animation: fadeIn 1s ease 0s 1 normal;
    -webkit-animation: fadeIn 1s ease 0s 1 normal;
  }
  #myModal_open:checked ~ #myModal_close-button + label{
    animation: fadeIn 2s ease 0s 1 normal;
    -webkit-animation: fadeIn 2s ease 0s 1 normal;
  }
  @keyframes fadeIn {
    0% {opacity: 0;}
    100% {opacity: 1;}
  }
  @-webkit-keyframes fadeIn {
    0% {opacity: 0;}
    100% {opacity: 1;}
  }

  /*ボタンの装飾--------------*/
  /*ボタン共通*/
  #myModal_open + label,
  #myModal_open:checked ~ #myModal_close-button + label {
    background: #ffc107;
    color: #fff;
    box-shadow: 0 1px 1.5px 0 rgba(0, 0, 0, 0.12), 0 1px 1px 0 rgba(0, 0, 0, 0.24);
    transition: .3s ;
  }
  #myModal_open + label:hover,
  #myModal_open:checked ~ #myModal_close-button + label:hover {
    box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.12), 0 2px 2px 0 rgba(0, 0, 0, 0.24);
  }
  /*開くボタン*/
  #myModal_open + label {  
    width: 100px;
    margin: 0 auto;
    padding: 5px 10px;
    text-align: center;
    display: block;
    letter-spacing: 3px;
    font-weight: bold;
  }

  /*閉じるボタン*/
  #myModal_open:checked ~ #myModal_close-button + label::before {
    content: '\f00d';
    font-family: fontawesome;
    margin-right: 5px;
  }

  /* スクリーンサイズが768px以上の場合に適用 ここから */
  @media (min-width: 768px) {
    /* モーダルウィンドウの背景ボックスの大きさ */
    #myModal_open:checked + label ~ .myModal_popUp {
      width: 400px;
      height: 400px;
    }
    /*モーダル本文*/
    #myModal_open:checked + label ~ .myModal_popUp > .myModal_popUp-content {
      height: calc(100% - 5px);/*上下*/
    }
    /* 閉じるボタンの位置と大きさ */
    #myModal_open:checked ~ #myModal_close-button + label {
      left: 50%;
      top: 60%;
      margin-left: 200px;
      margin-top: -290px;
      width: 44px;
      height: 44px;
    }
    #myModal_open:checked ~ #myModal_close-button + label::after {
      display: none;
    }
  }
  /* スクリーンサイズが768px以上の場合に適用 ここまで*/

この組み方は、ラジオボタンを利用しています。

ボタンをクリックすることで

  • 非表示を表示に切り替えること
  • ウィンドウの大きさを固定し、それ以上のテキストがある場合は、スクロールする
  • 背景を薄暗くし、浮き立たせること
  • 背景部分をクリックすると非表示に戻すこと
  • スクリーン幅768pxで閉じるボタンを切り替えること

などが組み込まれています。

タイトルとURLをコピーしました