🦔
【Web制作】jQueryによるモダール!
モーダル
Webページでよくみられるスムーススクロールを実装してみました。
今回は「モダールを開く」ボタンを押して、モダールを開き、モダール内の「閉じるボタン」でモーダルを閉じるようなものを作りました。
実装例
HTML,SCSS,JSで実装しています。
-
modal-bg
はモーダルの背景の部分(黒色)です。 -
modal-contents
はモーダルの内容が書かれている部分です。
index
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/style.css" type="text/css">
<title>モーダル入門</title>
</head>
<body>
<!-- modal open. -->
<div class="button open">モーダルを開く</div>
<!-- modal contents. -->
<div class="modal">
<div class="modal-bg"></div>
<div class="modal-contents">
<p>モーダル</p>
<div class="button close">閉じる</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="js/script.js"></script>
</body>
</html>
-
.modal
- height: 100vh; → 画面幅いっぱいをとります。
- width: 100%; → 画面幅いっぱいをとります。
- position: fixed; → ブラウザの画面幅に合わせます。
- top: 0;
- left: 0;
- display: none; → 初期はモーダルを非表示にします。
-
.modal-bg
- height: 100%; → 親(.modal)のサイズからみた相対的な値となります。(=100vh)
-
.modal-contents
- position: absolute; → 親(.modal)を基準とした配置となります。
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%); → %はtransformのプロパティをもつ要素(.modal-contents)からみた相対的な値となる。モダールが真ん中に来るように調整している。
- position: absolute; → 親(.modal)を基準とした配置となります。
style.scss
@charset "utf-8";
@import "_reset.scss";
// button
.button {
width: 150px;
padding: 10px;
margin: 40px auto 0px;
border-radius: 5px;
color: #fff;
font-weight: bold;
text-align: center;
cursor: pointer;
}
.open {
background-color: red;
}
.close {
background-color: blue;
margin-bottom: 20px;
}
// modal.
.modal {
height: 100vh;
width: 100%;
position: fixed;
top: 0;
left: 0;
display: none;
}
.modal-bg {
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
}
.modal-contents {
width: 50%;
height: 50%;
border-radius: 5px;
background-color: #fff;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
overflow: scroll;
}
p {
margin: 50px 0 500px;
}
-
.open
のイベントハンドラーを定義しています。-
fadeIn
で.modal
を表示しています。
-
-
.close
のイベントハンドラーを定義しています。-
fadeOut
で.modal
を非表示にしています。
-
script.js
// modal open.
$(".open").on("click", function () {
$(".modal").fadeIn(300);
return false;
})
// modal close.
$(".close").on("click", function() {
$(".modal").fadeOut(300);
return false;
})
動作確認
- 初期状態
- 「モダールを開く」ボタン押下
- モーダル内のスクロール
Discussion