YouTube動画をモーダルウインドウに表示する方法
YouTube動画をモーダルウインドウに表示する方法を紹介します。このサンプルでは、「動画を再生」ボタンをクリックすると画面中央にモーダルウインドウが開き、その中でYouTube動画を再生できます。動画をページ内へ常時表示せず、必要なタイミングだけ大きく表示できるため、ページ全体をすっきり見せながら動画コンテンツを案内できます。
商品やサービスの紹介動画、操作方法を説明する動画、会員サイトの案内動画、ECサイトの商品紹介、Webサイト内のプロモーション動画など、ページの内容を見ながら必要に応じて動画を開く構成に適しています。モーダルウインドウ内の動画は16:9の比率で表示され、画面幅に合わせて縮小されるため、スマートフォン・タブレット・PCでも利用できます。
HTMLではボタンやモーダルウインドウ、YouTube動画を表示するiframeを配置し、CSSではモーダルの横幅、余白、背景色、角丸、表示アニメーションなどを調整できます。JavaScriptではボタンをクリックしたときにYouTubeの埋め込みURLをiframeへ設定してモーダルを表示し、「閉じる」ボタンを押したときにURLを空へ戻して動画の再生を停止します。表示する動画を変更する場合は、YouTube動画の動画IDを用途に合わせて変更できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ボタンを押すと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>
<!-- YouTube動画モーダルを開く操作エリア -->
<div class="youtube-modal_wrap">
<!-- タイトル -->
<div class="youtube-modal_title">
YouTube動画モーダル
</div>
<!-- 説明文 -->
<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動画
表示する動画はscript.jsで設定する。
このiframeのsrc属性へ動画URLを直接入力する必要はありません。
script.js内の
YOUR_YOUTUBE_VIDEO_ID
を、表示したいYouTube動画の動画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>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではYouTube動画を開くボタン、モーダルウインドウ、動画を表示するiframeを配置します。CSSでは操作エリアやモーダルのサイズ、背景色、余白、角丸、動画の表示比率、表示時のアニメーションなどを設定し、JavaScriptではボタンをクリックしたときのモーダル表示とYouTube動画の読み込み、閉じたときの動画停止を行います。
YouTube動画そのものをサンプル一式へ含める必要はありません。表示したいYouTube動画の動画IDを利用者自身で確認し、script.js内のYOUR_YOUTUBE_VIDEO_IDへ設定して使用します。YouTubeページのURL全体ではなく、URLから取得した動画IDだけを設定します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはYouTube動画モーダルのHTML構造を作るファイルです。「YouTube動画モーダル」のタイトル、説明文、「動画を再生」ボタン、モーダル内のタイトル、「閉じる」ボタンなどの表示内容を変更できます。YouTube動画を表示するiframeもこのファイルにありますが、表示する動画のURLはJavaScriptから設定するため、iframeのsrc属性へ動画URLを直接入力する必要はありません。
style.cssは操作エリアとモーダルウインドウのデザインを設定するファイルです。操作エリアやモーダルの横幅、余白、背景色、文字色、ボタンの色、角丸、影、動画表示エリアの比率、モーダル表示時のアニメーションなどを変更できます。
script.jsはモーダルウインドウとYouTube動画の動作を設定するファイルです。表示するYouTube動画の動画IDを設定し、「動画を再生」をクリックすると動画IDからYouTubeの埋め込みURLを作成してiframeへ設定します。モーダルを開いた時点では動画は自動再生されないため、動画プレーヤーの再生ボタンを押すと再生できます。「閉じる」をクリックするとモーダルを非表示にし、iframeのURLを空にして動画の再生を停止します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルは同じ階層へ保存してください。次に、YouTubeでモーダルウインドウへ表示したい動画を開き、動画IDを確認します。
通常のYouTube URLがhttps://www.youtube.com/watch?v=YOUR_YOUTUBE_VIDEO_IDの形式の場合は、v=の後ろにある文字列が動画IDです。短縮URLがhttps://youtu.be/YOUR_YOUTUBE_VIDEO_IDの形式の場合は、youtu.be/の後ろにある文字列が動画IDです。
取得した動画IDをscript.js内のYOUR_YOUTUBE_VIDEO_IDと置き換えます。たとえば動画IDが取得できた場合は、const youtubeVideoId="取得した動画ID";のように設定します。YouTubeページのURL全体ではなく、動画IDだけを設定してください。
動画IDを設定したあと、sample/index.htmlをブラウザで開きます。「動画を再生」をクリックするとモーダルウインドウが表示され、設定したYouTube動画が読み込まれます。動画プレーヤーの再生ボタンを押すと動画を再生できます。「閉じる」をクリックするとモーダルが閉じ、再生中の場合は動画の再生も停止します。
カスタマイズできる内容
index.htmlでは「YouTube動画モーダル」のタイトル、説明文、「動画を再生」ボタン、モーダル内の「YouTube動画」というタイトル、「閉じる」ボタンなどの文章を変更できます。
style.cssでは操作エリアとモーダルの横幅、余白、背景色、文字色、ボタンの背景色、角丸、影、動画表示エリアの比率、モーダル表示時のアニメーションなどを変更できます。
script.jsではYOUR_YOUTUBE_VIDEO_IDを別のYouTube動画IDへ置き換えることで、モーダルウインドウに表示する動画を変更できます。JavaScriptでは動画IDを使ってhttps://www.youtube.com/embed/動画IDの形式の埋め込みURLを作成します。このサンプルではautoplay=1を付けていないため、モーダルを開いただけでは動画は自動再生されません。自動再生したい場合は、script.jsで作成している埋め込みURLの末尾に?autoplay=1を追加し、“https://www.youtube.com/embed/”+youtubeVideoId+”?autoplay=1”の形式に変更します。
数値調整
style.css
max-width:760px;
操作エリアの最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
操作エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
操作エリアの内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
操作エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
操作エリアのタイトルとモーダルタイトルに使用している文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
margin:0 0 24px;
操作エリアの説明文の下側余白です。24pxを大きくすると「動画を再生」ボタンとの間隔が広がり、小さくすると狭くなります。
padding:12px 28px;
「動画を再生」ボタンの内側余白です。上下の12pxを大きくするとボタンが高くなり、左右の28pxを大きくすると横に広がります。
padding:20px;
モーダル背景の画面端との余白と、モーダル本体の内側余白に使用しています。それぞれの値を変更すると、画面端との間隔や動画周囲の余白を調整できます。
max-width:900px;
モーダル本体の最大横幅です。値を大きくするとモーダルと動画の表示領域が広がり、小さくすると狭くなります。
margin:0 0 18px;
モーダルタイトルの下側余白です。18pxを大きくすると動画との間隔が広がり、小さくすると狭くなります。
aspect-ratio:16 / 9;
YouTube動画表示エリアの横幅と高さの比率です。このサンプルでは横16・縦9の比率で表示します。
border-radius:12px;
YouTube動画表示エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
margin:18px auto 0;
「閉じる」ボタンの上側余白です。18pxを大きくすると動画との間隔が広がり、小さくすると狭くなります。
animation:youtube-modal_show .3s ease forwards;
モーダルを表示するときのアニメーション時間です。.3sは0.3秒を表し、値を大きくするとゆっくり、小さくすると速く表示されます。
transform:scale(.9);
モーダル表示アニメーション開始時の大きさです。.9は通常サイズの90%を表します。値を小さくすると、表示時の拡大幅が大きくなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのモーダル本体にwidth:100%とmax-width:900pxを指定しているため、画面幅が狭くなるとモーダルも自動的に縮小します。YouTube動画表示エリアにはwidth:100%とaspect-ratio:16 / 9を使用しているため、横幅に合わせながら16:9の比率を維持して表示されます。
また、640px以下ではメディアクエリにより操作エリアの余白をpadding:24px 18px;、モーダル本体の余白をpadding:16px;へ変更しています。これにより、スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント