モーダルウインドウ表示時に背景をぼかす方法
モーダルウインドウ表示時に背景をぼかす方法を紹介します。モーダルを開いた際に背面コンテンツへぼかし効果を適用することで、ユーザーの視線をモーダルへ集めやすくできるサンプルです。HTML・CSS・JavaScriptのみで実装できるため、一般的なWebサイトや管理画面へ簡単に導入できます。
サンプルではモーダルを開くと背景全体へぼかし効果を適用し、モーダルを閉じると元の表示へ戻ります。背景クリックや閉じるボタンにも対応しており、自然な操作感で利用できます。ダイアログや確認画面、お知らせ表示など、ユーザーへ注目してほしい情報を表示する場面に適しています。
ぼかしの強さや背景色、モーダルサイズ、ボタンデザインなどはコード内から自由に変更できます。お問い合わせ画面、会員サイト、管理画面、ECサイトなど、視認性を高めたいモーダルウインドウへ応用しやすい構成です。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
背景ぼかしモーダル
モーダル表示中は背景へぼかし効果が適用されます。
モーダル表示中
背景へぼかし効果を適用しています。
「閉じる」を押すと元へ戻ります。
「モーダルを開く」をクリックすると背景へぼかし効果を適用した状態でモーダルウインドウが表示されます。背景または「閉じる」をクリックすると元の表示へ戻ります。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン表示対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>モーダルウインドウ表示時に背景をぼかす</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 背景として表示するメインコンテンツ -->
<div class="blur-background-modal_wrap" data-blur-background-modal-content>
<!-- 操作エリアのタイトル -->
<div class="blur-background-modal_title">
背景ぼかしモーダル
</div>
<!-- 操作エリアの説明文 -->
<p class="blur-background-modal_text">
モーダル表示中は背景へぼかし効果が適用されます。
</p>
<!-- モーダルを開くボタン -->
<button
class="blur-background-modal_button"
type="button"
data-blur-background-modal-open>
モーダルを開く
</button>
</div>
<!-- モーダル背景 -->
<div
class="blur-background-modal_overlay"
data-blur-background-modal-overlay>
<!-- モーダル本体 -->
<div
class="blur-background-modal_modal"
role="dialog"
aria-modal="true"
aria-labelledby="blur-background-modal-title">
<!-- モーダルタイトル -->
<div
class="blur-background-modal_heading"
id="blur-background-modal-title">
モーダル表示中
</div>
<!-- モーダルの説明文 -->
<p class="blur-background-modal_message">
背景へぼかし効果を適用しています。<br>
「閉じる」を押すと元へ戻ります。
</p>
<!-- モーダルを閉じるボタン -->
<button
class="blur-background-modal_close"
type="button"
data-blur-background-modal-close>
閉じる
</button>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ページ外側の余白をなくす */
padding:40px 20px; /* 上下40px・左右20pxの余白 */
background:#ffffff; /* ページ全体の背景色 */
color:#111827; /* ページ全体の基本文字色 */
font-family:sans-serif; /* ページ全体のフォント */
box-sizing:border-box; /* paddingと枠線を要素サイズに含める */
}
/* 背景として表示するメインコンテンツ */
.blur-background-modal_wrap{
max-width:700px; /* 操作エリアの最大横幅 */
margin:40px auto; /* 上下40pxの余白を付けて左右中央へ配置 */
padding:32px; /* 操作エリア内側の余白 */
border:1px solid #e5e7eb; /* 操作エリアの枠線 */
border-radius:18px; /* 操作エリアの角丸 */
background:#f8fafc; /* 操作エリアの背景色 */
text-align:center; /* 内容を中央揃え */
transition:filter .3s; /* 0.3秒かけてぼかし状態を切り替える */
box-sizing:border-box; /* paddingと枠線を横幅に含める */
}
/* モーダル表示中の背景 */
.blur-background-modal_wrap.is-blur{
filter:blur(6px); /* ぼかしの強さ。値を大きくすると強くぼける */
}
/* 操作エリアのタイトル */
.blur-background-modal_title{
margin:0 0 12px; /* 下側12pxの余白 */
color:#111827; /* タイトルの文字色 */
font-size:22px; /* タイトルの文字サイズ */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
}
/* 操作エリアの説明文 */
.blur-background-modal_text{
margin:0 0 24px; /* 下側24pxの余白 */
color:#4b5563; /* 説明文の文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間 */
}
/* モーダルを開くボタン */
.blur-background-modal_button{
padding:12px 26px; /* ボタン内側の上下・左右余白 */
border:none; /* ボタンの枠線を非表示 */
border-radius:8px; /* ボタンの角丸 */
background:#2563eb; /* ボタンの背景色 */
color:#ffffff; /* ボタンの文字色 */
font-size:16px; /* ボタンの文字サイズ */
font-weight:700; /* ボタン文字を太字にする */
line-height:1.5; /* ボタン文字の行間 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
}
/* モーダル背景 */
.blur-background-modal_overlay{
display:none; /* 初期状態ではモーダルを非表示 */
position:fixed; /* 画面全体へ固定 */
inset:0; /* 上下左右を0にして画面全体へ広げる */
z-index:9999; /* 他の要素より前面へ表示 */
align-items:center; /* モーダル本体を縦中央へ配置 */
justify-content:center; /* モーダル本体を横中央へ配置 */
padding:20px; /* 画面端との余白 */
background:rgba(15,23,42,.35); /* 背景色。.35を大きくすると暗くなる */
backdrop-filter:blur(6px); /* 背景全体のぼかし。値を大きくすると強くぼける */
box-sizing:border-box; /* paddingを画面幅に含める */
}
/* モーダル表示状態 */
.blur-background-modal_overlay.is-active{
display:flex; /* 表示用クラスが付いた時にモーダルを表示 */
}
/* モーダル本体 */
.blur-background-modal_modal{
width:100%; /* 画面幅に合わせて縮小 */
max-width:420px; /* モーダルの最大横幅 */
padding:30px; /* モーダル内部の余白 */
border-radius:18px; /* モーダル本体の角丸 */
background:#ffffff; /* モーダル本体の背景色 */
text-align:center; /* モーダル内の内容を中央揃え */
box-shadow:0 20px 50px rgba(0,0,0,.25); /* モーダル本体の影 */
box-sizing:border-box; /* paddingを横幅に含める */
}
/* モーダルタイトル */
.blur-background-modal_heading{
margin:0 0 16px; /* 下側16pxの余白 */
color:#111827; /* タイトルの文字色 */
font-size:28px; /* タイトルの文字サイズ */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
}
/* モーダルの説明文 */
.blur-background-modal_message{
margin:0 0 24px; /* 下側24pxの余白 */
color:#4b5563; /* 説明文の文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間 */
}
/* モーダルを閉じるボタン */
.blur-background-modal_close{
padding:12px 28px; /* ボタン内側の上下・左右余白 */
border:none; /* ボタンの枠線を非表示 */
border-radius:8px; /* ボタンの角丸 */
background:#111827; /* ボタンの背景色 */
color:#ffffff; /* ボタンの文字色 */
font-size:16px; /* ボタンの文字サイズ */
font-weight:700; /* ボタン文字を太字にする */
line-height:1.5; /* ボタン文字の行間 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
}
/* 画面幅640px以下 */
@media (max-width:640px){
/* スマートフォン用の操作エリア */
.blur-background-modal_wrap{
padding:24px 18px; /* 上下24px・左右18pxへ余白を縮小 */
}
/* スマートフォン用のモーダル本体 */
.blur-background-modal_modal{
padding:24px 18px; /* 上下24px・左右18pxの内側余白 */
}
}
// モーダルを開くボタンを取得
const blurBackgroundModalOpen=document.querySelector(
"[data-blur-background-modal-open]"
);
// モーダルを閉じるボタンを取得
const blurBackgroundModalClose=document.querySelector(
"[data-blur-background-modal-close]"
);
// モーダル背景を取得
const blurBackgroundModalOverlay=document.querySelector(
"[data-blur-background-modal-overlay]"
);
// 背景として表示するメインコンテンツを取得
const blurBackgroundModalContent=document.querySelector(
"[data-blur-background-modal-content]"
);
// モーダルを閉じる共通処理
function closeBlurBackgroundModal(){
// モーダル背景から表示用クラスを削除
blurBackgroundModalOverlay.classList.remove("is-active");
// メインコンテンツからぼかし用クラスを削除
blurBackgroundModalContent.classList.remove("is-blur");
}
// モーダルを開くボタンをクリックした時
blurBackgroundModalOpen.addEventListener("click",function(){
// モーダル背景へ表示用クラスを追加
blurBackgroundModalOverlay.classList.add("is-active");
// メインコンテンツへぼかし用クラスを追加
blurBackgroundModalContent.classList.add("is-blur");
});
// 閉じるボタンをクリックした時
blurBackgroundModalClose.addEventListener("click",function(){
// モーダルを閉じて背景のぼかしを解除
closeBlurBackgroundModal();
});
// モーダル背景をクリックした時
blurBackgroundModalOverlay.addEventListener("click",function(event){
// モーダル本体ではなく背景部分をクリックした場合だけ閉じる
if(event.target===blurBackgroundModalOverlay){
// モーダルを閉じて背景のぼかしを解除
closeBlurBackgroundModal();
}
});
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLには背景コンテンツとモーダルウインドウの構造、CSSには背景ぼかしやモーダルのデザイン、JavaScriptにはモーダルの開閉と背景ぼかしの切り替え処理を記述しています。モーダル表示中だけ背景へぼかし効果を適用し、閉じると元の表示へ戻る構成になっています。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.html
背景として表示するコンテンツ、モーダルウインドウ、開閉ボタンなどのHTML構造を管理します。タイトルや説明文、ボタン名などを自由に変更できます。
style.css
背景ぼかし、モーダルのデザイン、ボタン、余白、角丸、影などの見た目を管理します。ぼかしの強さやモーダルサイズもここで調整できます。
script.js
モーダルの表示・非表示と、背景へぼかし用クラスを追加・削除する処理を管理します。
設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置します。sample/index.htmlをブラウザで開くと動作を確認できます。「モーダルを開く」をクリックするとモーダルウインドウが表示され、背景へぼかし効果が適用されます。「閉じる」または背景部分をクリックするとモーダルが閉じ、背景も元の状態へ戻ります。
カスタマイズできる内容
index.htmlではタイトル、説明文、ボタン名、モーダル内の文章を変更できます。style.cssでは背景色、モーダルサイズ、ぼかしの強さ、ボタン色、余白、角丸、影などを変更できます。script.jsではモーダルを開閉するタイミングや、ぼかしを適用する対象要素を変更できます。
数値調整
style.cssのfilter:blur(6px);とbackdrop-filter:blur(6px);の6pxを変更すると背景のぼかしの強さが変わります。transition:.3s;の0.3秒を変更するとぼかしの切り替え速度が変わります。max-width:420px;を変更するとモーダルの最大横幅が変わります。padding:30px;を変更するとモーダル内部の余白が変わります。
レスポンシブ対応
style.cssではwidth:100%、max-width、padding、@media(max-width:640px)を使用してレスポンシブ対応しています。スマートフォンではモーダルの余白を自動調整し、タブレット・PCでも画面中央へ見やすく表示されます。
コメント