グラデーション背景と半透明オーバーレイ付きモーダルウインドウの作り方
グラデーション背景と半透明オーバーレイ付きモーダルウインドウの作り方を紹介します。ページ内の操作ボタンをクリックすると、背景を暗く透かしたオーバーレイの上へ、グラデーションを使ったモーダルウインドウを表示できるサンプルです。一般的な単色のモーダルよりも印象的なデザインに仕上げられます。
このサンプルはHTML・CSS・JavaScriptのみで動作します。モーダル本体には青から紫へ変化するグラデーション背景を使用し、背面には半透明のオーバーレイを表示します。右上の「×」ボタン、下部の「閉じる」ボタン、またはモーダル外の背景部分をクリックすると閉じられます。
キャンペーン案内、会員サイトの特典表示、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="gradient-overlay-modal-window_wrap">
<!-- 操作エリアのタイトル -->
<div class="gradient-overlay-modal-window_title">
グラデーションモーダル
</div>
<!-- 操作エリアの説明文 -->
<p class="gradient-overlay-modal-window_text">
「モーダルを開く」をクリックすると、半透明オーバーレイの上へグラデーション背景のモーダルを表示します。
</p>
<!-- モーダルを開くボタン -->
<button
class="gradient-overlay-modal-window_open"
type="button"
data-gradient-overlay-modal-window-open>
モーダルを開く
</button>
</div>
<!-- 半透明のモーダル背景 -->
<div
class="gradient-overlay-modal-window_overlay"
data-gradient-overlay-modal-window-overlay>
<!-- グラデーション背景のモーダル本体 -->
<div
class="gradient-overlay-modal-window_modal"
role="dialog"
aria-modal="true"
aria-labelledby="gradient-overlay-modal-window-title">
<!-- モーダル右上の閉じるボタン -->
<button
class="gradient-overlay-modal-window_close"
type="button"
data-gradient-overlay-modal-window-close
aria-label="閉じる">
×
</button>
<!-- モーダルタイトル -->
<div
class="gradient-overlay-modal-window_heading"
id="gradient-overlay-modal-window-title">
特別なお知らせ
</div>
<!-- モーダルの説明文 -->
<p class="gradient-overlay-modal-window_message">
グラデーション背景と半透明オーバーレイを使用したモーダルウインドウです。
</p>
<!-- モーダル下部の閉じるボタン -->
<button
class="gradient-overlay-modal-window_button"
type="button"
data-gradient-overlay-modal-window-button>
閉じる
</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と枠線を要素サイズに含める */
}
/* モーダルを開く操作エリア */
.gradient-overlay-modal-window_wrap{
max-width:700px; /* 操作エリアの最大横幅 */
margin:40px auto; /* 上下40pxの余白を付けて左右中央へ配置 */
padding:32px; /* 操作エリア内側の余白 */
border:1px solid #e5e7eb; /* 操作エリアの枠線 */
border-radius:18px; /* 操作エリアの角丸 */
background:#f8fafc; /* 操作エリアの背景色 */
text-align:center; /* 内容を中央揃え */
box-sizing:border-box; /* paddingと枠線を横幅に含める */
}
/* 操作エリアのタイトル */
.gradient-overlay-modal-window_title{
margin:0 0 12px; /* 下側12pxの余白 */
color:#111827; /* タイトルの文字色 */
font-size:22px; /* タイトルの文字サイズ */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
}
/* 操作エリアの説明文 */
.gradient-overlay-modal-window_text{
margin:0 0 24px; /* 下側24pxの余白 */
color:#4b5563; /* 説明文の文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間 */
}
/* モーダルを開くボタン */
.gradient-overlay-modal-window_open{
padding:12px 26px; /* ボタン内側の上下・左右余白 */
border:none; /* ボタンの枠線を非表示 */
border-radius:8px; /* ボタンの角丸 */
background:linear-gradient(135deg,#2563eb,#7c3aed); /* 左上から右下へ変化する背景色 */
color:#ffffff; /* ボタンの文字色 */
font-size:16px; /* ボタンの文字サイズ */
font-weight:700; /* ボタン文字を太字にする */
line-height:1.5; /* ボタン文字の行間 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
}
/* 半透明のモーダル背景 */
.gradient-overlay-modal-window_overlay{
display:none; /* 初期状態ではモーダルを非表示 */
position:fixed; /* 画面全体へ固定 */
inset:0; /* 上下左右を0にして画面全体へ広げる */
z-index:9999; /* 他の要素より前面へ表示 */
align-items:center; /* モーダル本体を縦中央へ配置 */
justify-content:center; /* モーダル本体を横中央へ配置 */
padding:20px; /* 画面端との余白 */
background:rgba(15,23,42,.65); /* 半透明背景。.65を大きくすると暗くなる */
box-sizing:border-box; /* paddingを画面幅に含める */
}
/* モーダル表示状態 */
.gradient-overlay-modal-window_overlay.is-active{
display:flex; /* 表示用クラスが付いた時にモーダルを表示 */
}
/* グラデーション背景のモーダル本体 */
.gradient-overlay-modal-window_modal{
position:relative; /* 右上の閉じるボタンの配置基準 */
width:100%; /* 画面幅に合わせて縮小 */
max-width:440px; /* モーダルの最大横幅 */
padding:48px 30px 30px; /* 上48px・左右30px・下30pxの内側余白 */
border:1px solid rgba(255,255,255,.35); /* 半透明の白い枠線 */
border-radius:22px; /* モーダル本体の角丸 */
background:linear-gradient(135deg,#2563eb 0%,#7c3aed 100%); /* 青から紫へ変化する背景 */
color:#ffffff; /* モーダル内の基本文字色 */
text-align:center; /* モーダル内の内容を中央揃え */
box-shadow:0 24px 60px rgba(15,23,42,.4); /* モーダル本体の影 */
box-sizing:border-box; /* paddingと枠線を横幅に含める */
}
/* モーダル右上の閉じるボタン */
.gradient-overlay-modal-window_close{
position:absolute; /* モーダル右上へ配置 */
top:12px; /* 上端からの位置 */
right:12px; /* 右端からの位置 */
width:38px; /* ボタンの横幅 */
height:38px; /* ボタンの高さ */
padding:0; /* ボタン内側の余白をなくす */
border:1px solid rgba(255,255,255,.45); /* 半透明の白い枠線 */
border-radius:50%; /* ボタンを円形にする */
background:rgba(255,255,255,.16); /* 半透明の白い背景 */
color:#ffffff; /* ×印の文字色 */
font-size:22px; /* ×印の文字サイズ */
line-height:1; /* ×印の行間を詰める */
cursor:pointer; /* マウスカーソルを指型へ変更 */
}
/* モーダルタイトル */
.gradient-overlay-modal-window_heading{
margin:0 0 16px; /* 下側16pxの余白 */
color:#ffffff; /* タイトルの文字色 */
font-size:28px; /* タイトルの文字サイズ */
font-weight:700; /* タイトルを太字にする */
line-height:1.5; /* タイトルの行間 */
}
/* モーダルの説明文 */
.gradient-overlay-modal-window_message{
margin:0; /* 外側余白をなくす */
color:rgba(255,255,255,.9); /* 少し透けた白い文字色 */
font-size:16px; /* 説明文の文字サイズ */
line-height:1.8; /* 説明文の行間 */
}
/* モーダル下部の閉じるボタン */
.gradient-overlay-modal-window_button{
width:100%; /* モーダル内の横幅いっぱいへ広げる */
margin-top:28px; /* 上側28pxの余白 */
padding:12px; /* ボタン内側の余白 */
border:none; /* ボタンの枠線を非表示 */
border-radius:8px; /* ボタンの角丸 */
background:rgba(255,255,255,.95); /* 少し透けた白い背景 */
color:#4338ca; /* ボタンの文字色 */
font-size:16px; /* ボタンの文字サイズ */
font-weight:700; /* ボタン文字を太字にする */
line-height:1.5; /* ボタン文字の行間 */
cursor:pointer; /* マウスカーソルを指型へ変更 */
}
/* 画面幅640px以下 */
@media (max-width:640px){
/* スマートフォン用の操作エリア */
.gradient-overlay-modal-window_wrap{
padding:24px 18px; /* 上下24px・左右18pxへ余白を縮小 */
}
/* スマートフォン用のモーダル本体 */
.gradient-overlay-modal-window_modal{
padding:48px 18px 20px; /* 上48px・左右18px・下20pxの内側余白 */
}
}
// モーダルを開くボタンを取得
const gradientOverlayModalWindowOpen=document.querySelector(
"[data-gradient-overlay-modal-window-open]"
);
// モーダル右上の閉じるボタンを取得
const gradientOverlayModalWindowClose=document.querySelector(
"[data-gradient-overlay-modal-window-close]"
);
// モーダル下部の閉じるボタンを取得
const gradientOverlayModalWindowButton=document.querySelector(
"[data-gradient-overlay-modal-window-button]"
);
// 半透明のモーダル背景を取得
const gradientOverlayModalWindowOverlay=document.querySelector(
"[data-gradient-overlay-modal-window-overlay]"
);
// モーダルを閉じる共通処理
function closeGradientOverlayModalWindow(){
// モーダル背景から表示用クラスを削除
gradientOverlayModalWindowOverlay.classList.remove("is-active");
}
// モーダルを開くボタンをクリックした時
gradientOverlayModalWindowOpen.addEventListener("click",function(){
// モーダル背景へ表示用クラスを追加
gradientOverlayModalWindowOverlay.classList.add("is-active");
});
// モーダル右上の閉じるボタンをクリックした時
gradientOverlayModalWindowClose.addEventListener("click",function(){
// モーダルを閉じる
closeGradientOverlayModalWindow();
});
// モーダル下部の閉じるボタンをクリックした時
gradientOverlayModalWindowButton.addEventListener("click",function(){
// モーダルを閉じる
closeGradientOverlayModalWindow();
});
// モーダル背景をクリックした時
gradientOverlayModalWindowOverlay.addEventListener("click",function(event){
// モーダル本体ではなく背景部分をクリックした場合だけ閉じる
if(event.target===gradientOverlayModalWindowOverlay){
// モーダルを閉じる
closeGradientOverlayModalWindow();
}
});
コードをコピーする場合
使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合
HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLにはグラデーション背景のモーダルウインドウと開閉ボタンの構造、CSSには半透明オーバーレイやグラデーション、角丸、影などのデザイン、JavaScriptにはモーダルの表示・非表示処理を記述しています。外部ライブラリを使用せず、3ファイルを同じフォルダへ配置するだけで動作します。
「モーダルを開く」をクリックすると、画面全体へ半透明のオーバーレイが表示され、その前面に青から紫へ変化するグラデーション背景のモーダルウインドウが表示されます。右上の「×」、下部の「閉じる」、またはモーダル外の背景部分をクリックすると閉じます。
キャンペーン案内、会員向けのお知らせ、ECサイトの特典紹介など、通常の白いモーダルより目立たせたい内容へ利用できます。表示する文章やボタン名だけでなく、グラデーションの色、オーバーレイの濃さ、モーダルの大きさなどもコード内で変更できます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.html
モーダルを開く操作エリア、半透明オーバーレイ、グラデーション背景のモーダル本体、右上と下部の閉じるボタンを管理します。タイトル、説明文、ボタン名を変更すると画面へ表示される内容が変わります。
style.css
操作エリア、オーバーレイ、モーダル本体、ボタン、文字、余白、角丸、影を管理します。モーダル本体と開くボタンのグラデーション、オーバーレイの透明度もこのファイルで設定しています。
script.js
モーダルを開く処理、右上と下部のボタンで閉じる処理、モーダル外の背景をクリックしたときに閉じる処理を管理します。
設置方法・使い方
sampleフォルダへindex.html・style.css・script.jsを配置し、sample/index.htmlをブラウザで開きます。「モーダルを開く」をクリックすると、半透明オーバーレイとグラデーション背景のモーダルが表示されます。
モーダルを閉じる場合は、右上の「×」、下部の「閉じる」、またはモーダル本体の外側にある半透明部分をクリックします。
カスタマイズできる内容
index.htmlでは操作エリアのタイトル、説明文、モーダルタイトル、本文、各ボタン名を変更できます。style.cssではグラデーションの色、方向、オーバーレイの濃さ、モーダルの横幅、余白、角丸、影、文字色、ボタン色を変更できます。script.jsでは開閉処理に使用する対象要素や、閉じる操作を編集できます。
数値調整
style.cssのbackground:linear-gradient(135deg,#2563eb 0%,#7c3aed 100%);では、135degを変更するとグラデーションの方向が変わります。0%と100%を変更すると、それぞれの色が切り替わる位置が変わります。
background:rgba(15,23,42,.65);の.65を大きくするとオーバーレイが暗くなり、小さくすると背面が見えやすくなります。max-width:440px;を変更するとモーダルの最大横幅が変わります。padding:48px 30px 30px;を変更するとモーダル内部の上・左右・下の余白が変わります。border-radius:22px;を変更するとモーダルの角丸が変わります。
レスポンシブ対応
style.cssではモーダル本体にwidth:100%とmax-width:440pxを指定し、画面幅に合わせて縮小できるようにしています。オーバーレイにはpadding:20pxを指定しているため、小さい画面でもモーダルが画面端へ密着しません。
@media(max-width:640px)では、操作エリアをpadding:24px 18px、モーダル本体をpadding:48px 18px 20pxへ変更しています。スマートフォンでは左右の余白が狭くなり、タブレット・PCでは最大横幅を保った状態で画面中央へ表示されます。
コメント