YouTube動画をモーダルウインドウで表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
モーダルウインドウ
YouTube動画をモーダルウインドウで表示する方法
YouTube動画をモーダルウインドウで表示する方法を紹介します。ボタンをクリックするとモーダルウインドウが開き、その中でYouTube動画を再生できるサンプルです。HTML・CSS・JavaScriptのみで実装しているため、外部ライブラリを使用せずに簡単に導入できます。
動画はiframeを利用して埋め込んでおり、ページ遷移を行わずに動画を再生できます。商品紹介、サービス説明、チュートリアル、会社紹介、ポートフォリオなど、動画を目立たせたいページで活用できます。また、モーダルを閉じると動画も停止するため、再生したままになる心配がありません。
配布用コードではYouTube動画IDを変更するだけで別の動画へ差し替えられます。モーダルのサイズ、背景色、余白、角丸、影、表示アニメーションなども自由に変更でき、スマートフォン・タブレット・PCで利用できるレスポンシブ対応のサンプルです。
コードについて
本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項
本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
YouTube動画モーダル
ボタンを押すとYouTube動画をモーダルウインドウで表示します。
「動画を再生」をクリックするとモーダルウインドウ内でYouTube動画を再生できます。
※ デモではYouTubeのサンプル動画を利用しています。配布用コードでは動画IDを変更してご利用ください。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン表示対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>YouTube動画をモーダルウインドウで表示する方法</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 動画モーダルを開く操作エリア -->
<div class="youtube-modal_wrap">
<!-- タイトル -->
<h1 class="youtube-modal_title">
YouTube動画モーダル
</h1>
<!-- 説明文 -->
<p class="youtube-modal_text">
ボタンを押すとYouTube動画をモーダルウインドウで表示します。
</p>
<!-- YouTube動画を開くボタン -->
<button
class="youtube-modal_open"
type="button"
data-youtube-modal-open>
動画を再生
</button>
</div>
<!-- モーダル背景 -->
<div
class="youtube-modal_overlay"
data-youtube-modal-overlay>
<!-- モーダル本体 -->
<div
class="youtube-modal_modal"
role="dialog"
aria-modal="true"
aria-labelledby="youtube-modal-title">
<!-- モーダルタイトル -->
<div
class="youtube-modal_modal-title"
id="youtube-modal-title">
YouTube動画
</div>
<!-- YouTube動画表示エリア -->
<div class="youtube-modal_player-wrap">
<!--
YouTube動画
src属性はJavaScriptから設定する
script.js内の動画IDを変更すると別の動画を表示できる
-->
<iframe
class="youtube-modal_player"
src=""
title="YouTube動画"
data-youtube-modal-player
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen>
</iframe>
</div>
<!-- モーダルを閉じるボタン -->
<button
class="youtube-modal_close"
type="button"
data-youtube-modal-close>
閉じる
</button>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
/* ページ全体 */
body{
margin:0; /* ページ外側の余白をなくす */
padding:40px 20px; /* 上下40px・左右20pxの余白 */
background:#ffffff; /* ページ背景色 */
font-family:sans-serif; /* 文字フォント */
}
/* 動画モーダルを開く操作エリア */
.youtube-modal_wrap{
max-width:760px; /* 最大横幅:値を大きくすると表示エリアが広がる */
margin:40px auto; /* 上下余白・左右中央配置 */
padding:32px; /* 内側余白 */
border:1px solid #e5e7eb; /* 枠線 */
border-radius:18px; /* 角丸:値を大きくすると丸みが強くなる */
background:#f8fafc; /* 背景色 */
text-align:center; /* 文字とボタンを中央揃え */
box-sizing:border-box; /* paddingと枠線を横幅に含める */
}
/* タイトル */
.youtube-modal_title{
margin:0 0 12px; /* 下余白 */
font-size:22px; /* 文字サイズ */
font-weight:700; /* 文字の太さ */
}
/* 説明文 */
.youtube-modal_text{
margin:0 0 24px; /* 下余白 */
color:#4b5563; /* 文字色 */
line-height:1.8; /* 行間:値を大きくすると行間が広がる */
}
/* YouTube動画を開くボタン */
.youtube-modal_open{
padding:12px 28px; /* ボタン内側の余白 */
border:none; /* 枠線なし */
border-radius:10px; /* 角丸 */
background:#ff0000; /* YouTubeをイメージした赤色 */
color:#ffffff; /* 文字色 */
font-size:16px; /* 文字サイズ */
font-weight:700; /* 文字の太さ */
cursor:pointer; /* マウスカーソルを指型にする */
}
/* モーダル背景 */
.youtube-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,.75); /* 背景色:最後の値を大きくすると濃くなる */
box-sizing:border-box; /* paddingを横幅に含める */
}
/* モーダル表示状態 */
.youtube-modal_overlay.is-active{
display:flex; /* モーダル背景を表示 */
}
/* モーダル本体 */
.youtube-modal_modal{
width:100%; /* 画面幅に合わせて縮小 */
max-width:900px; /* 最大横幅:値を変更すると動画表示幅が変わる */
padding:20px; /* 内側余白 */
border-radius:18px; /* 角丸 */
background:#ffffff; /* 背景色 */
box-shadow:0 24px 60px rgba(0,0,0,.28); /* モーダルの影 */
box-sizing:border-box; /* paddingを横幅に含める */
animation:youtube-modal_show .3s ease forwards; /* 0.3秒で表示:値を大きくするとゆっくりになる */
}
/* モーダルタイトル */
.youtube-modal_modal-title{
margin:0 0 18px; /* 下余白 */
font-size:22px; /* 文字サイズ */
font-weight:700; /* 文字の太さ */
text-align:center; /* 中央揃え */
}
/* YouTube動画表示エリア */
.youtube-modal_player-wrap{
width:100%; /* モーダル幅いっぱいに表示 */
aspect-ratio:16 / 9; /* YouTube動画の標準的な横16:縦9の比率 */
overflow:hidden; /* 角丸の外側を隠す */
border-radius:12px; /* 動画の角丸 */
background:#000000; /* 動画読み込み前の背景色 */
}
/* YouTube動画 */
.youtube-modal_player{
display:block; /* iframe下の不要な余白をなくす */
width:100%; /* 表示エリアの横幅いっぱいに広げる */
height:100%; /* 表示エリアの高さいっぱいに広げる */
border:none; /* iframeの枠線をなくす */
}
/* モーダルを閉じるボタン */
.youtube-modal_close{
display:block; /* 中央配置できるようにする */
margin:18px auto 0; /* 上余白・左右中央配置 */
padding:12px 24px; /* ボタン内側の余白 */
border:none; /* 枠線なし */
border-radius:10px; /* 角丸 */
background:#111827; /* 背景色 */
color:#ffffff; /* 文字色 */
font-size:16px; /* 文字サイズ */
font-weight:700; /* 文字の太さ */
cursor:pointer; /* マウスカーソルを指型にする */
}
/* モーダル表示アニメーション */
@keyframes youtube-modal_show{
from{
opacity:0; /* 透明な状態から開始 */
transform:scale(.9); /* 90%のサイズから開始 */
}
to{
opacity:1; /* 完全に表示 */
transform:scale(1); /* 通常サイズへ拡大 */
}
}
/* 画面幅640px以下 */
@media (max-width:640px){
/* 動画モーダルを開く操作エリア */
.youtube-modal_wrap{
padding:24px 18px; /* スマートフォン用の内側余白 */
}
/* モーダル本体 */
.youtube-modal_modal{
padding:16px; /* スマートフォン用の内側余白 */
}
}
// YouTube動画を開くボタンを取得
const youtubeModalOpen=document.querySelector(
"[data-youtube-modal-open]"
);
// モーダル背景を取得
const youtubeModalOverlay=document.querySelector(
"[data-youtube-modal-overlay]"
);
// モーダルを閉じるボタンを取得
const youtubeModalClose=document.querySelector(
"[data-youtube-modal-close]"
);
// YouTube動画を表示するiframeを取得
const youtubeModalPlayer=document.querySelector(
"[data-youtube-modal-player]"
);
// 表示するYouTube動画ID
//
// YouTubeのURL例
// https://www.youtube.com/watch?v=Lz24PqZkF2s
//
// 「v=」の後ろが動画IDです。
// 上記URLの場合は「Lz24PqZkF2s」を指定します。
//
// 別の動画を表示したい場合は、この動画IDを書き換えてください。
const youtubeVideoId="dQw4w9WgXcQ";
// YouTube動画を開くボタンをクリックした時
youtubeModalOpen.addEventListener("click",function(){
// 動画IDからYouTube埋め込みURLを作成
// autoplay=1を付けるとモーダル表示と同時に動画が自動再生されます。
youtubeModalPlayer.src=
"https://www.youtube.com/embed/"
+youtubeVideoId
+"?autoplay=1";
// モーダルを表示
youtubeModalOverlay.classList.add("is-active");
});
// 閉じるボタンをクリックした時
youtubeModalClose.addEventListener("click",function(){
// モーダルを閉じる
youtubeModalOverlay.classList.remove("is-active");
// iframeのURLを空にして動画の再生を停止
youtubeModalPlayer.src="";
});
ファイル構成と設置方法
このサンプルでは、HTML・CSS・JavaScriptをそれぞれ別ファイルに分けて使用します。index.html、style.css、script.js を同じフォルダに配置してください。
sample/
├── index.html
├── style.css
└── script.js
index.html をブラウザで開くと、YouTube動画をモーダルウインドウで表示できます。表示する動画を変更したい場合は、HTML内の iframe の src 属性を変更してください。
YouTube動画のURLは、YouTubeで表示したい動画を開き、「共有」ボタンからコピーできます。コピーしたURLが https://youtu.be/FvFlVUeet0w の形式の場合は、末尾の動画IDを使って、次のように埋め込み用URLへ変更します。
https://www.youtube.com/embed/FvFlVUeet0w
YouTube動画をモーダルウインドウで表示する方法【HTML/CSS/JavaScript・サンプルコード付き】
コメント