アコーディオンの中にiframeを埋め込むと、項目を開いたときにPDFやGoogleマップ、YouTube動画を表示できます。通常のテキストを表示するアコーディオンとは異なり、開いた領域内でPDFの閲覧や地図の操作、動画の再生まで行えるのが特徴です。
今回のサンプルでは、3つの項目をそれぞれ独立して開閉できます。項目をクリックすると、その下にiframeの表示領域が現れ、右側のプラスアイコンがマイナスに変わります。もう一度クリックすると表示領域が閉じ、アイコンも元に戻ります。複数の項目を同時に開くこともできます。
「PDFを表示」を開くと、PDFビューアーがアコーディオン内に表示されます。ブラウザのPDF表示機能を利用するため、対応する環境ではページの拡大・縮小やダウンロードなどの操作も行えます。
「Googleマップを表示」を開くと、東京駅周辺の地図が表示されます。アコーディオンを開いたまま地図を移動したり、拡大・縮小したりできます。
「YouTube動画を表示」を開くと、動画プレーヤーが表示されます。再生ボタンを押すと、別のページへ移動せずにアコーディオン内で動画を視聴できます。
デモ
「PDFを表示」「Googleマップを表示」「YouTube動画を表示」をクリックすると、それぞれのコンテンツがアコーディオン内に表示されます。もう一度クリックすると閉じます。各項目は独立して開閉できるため、複数のコンテンツを同時に表示することもできます。
Q 他のアイコンを使いたい場合はどうするの?
無料のSVGアイコン作成ツールを使って、用途に合ったアイコンを作成できます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>iframeアコーディオン</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- iframeアコーディオン本体 -->
<div class="iframe-accordion_wrap">
<!-- PDF -->
<div class="iframe-accordion_item">
<button
type="button"
class="iframe-accordion_button"
aria-expanded="false"
aria-controls="iframe-accordion-pdf"
>
PDFを表示
<span class="iframe-accordion_icon" aria-hidden="true"></span>
</button>
<div
id="iframe-accordion-pdf"
class="iframe-accordion_content"
hidden
>
<!-- PDFのURLをsrcに指定 -->
<iframe
class="iframe-accordion_frame"
src="https://maruhinoto.com/wp-content/uploads/2026/06/sample-blue.pdf"
title="PDFサンプル"
loading="lazy"
></iframe>
</div>
</div>
<!-- Googleマップ -->
<div class="iframe-accordion_item">
<button
type="button"
class="iframe-accordion_button"
aria-expanded="false"
aria-controls="iframe-accordion-map"
>
Googleマップを表示
<span class="iframe-accordion_icon" aria-hidden="true"></span>
</button>
<div
id="iframe-accordion-map"
class="iframe-accordion_content"
hidden
>
<!-- Googleマップの埋め込みURLをsrcに指定 -->
<iframe
class="iframe-accordion_frame"
src="https://www.google.com/maps?q=東京駅&output=embed"
title="東京駅のGoogleマップ"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
></iframe>
</div>
</div>
<!-- YouTube -->
<div class="iframe-accordion_item">
<button
type="button"
class="iframe-accordion_button"
aria-expanded="false"
aria-controls="iframe-accordion-youtube"
>
YouTube動画を表示
<span class="iframe-accordion_icon" aria-hidden="true"></span>
</button>
<div
id="iframe-accordion-youtube"
class="iframe-accordion_content"
hidden
>
<div class="iframe-accordion_video">
<!-- YouTubeの埋め込みURLをsrcに指定 -->
<iframe
class="iframe-accordion_frame"
src="https://www.youtube.com/embed/aqz-KE-bpKQ"
title="YouTubeサンプル動画"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen
></iframe>
</div>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
iframeのsrcを変更することで、表示するPDFやYouTube動画、Googleマップを変更できます。具体的な設定方法は「ファイル構成と設置方法」で紹介します。
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。 サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルは、HTML・CSS・JavaScriptの3ファイルで構成されています。HTMLにはPDF・Googleマップ・YouTube動画を表示する3つのiframeを配置し、CSSではアコーディオンのデザインや各コンテンツの表示サイズを設定しています。JavaScriptでは、クリックされた項目の開閉状態を切り替えます。表示するPDFや地図、動画は、それぞれのiframeに設定されたsrc属性を変更することで差し替えられます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlには、3つの開閉ボタンと、それぞれに対応するiframeを配置しています。ボタンの文章や表示するコンテンツのURLを変更できます。
style.cssでは、アコーディオン全体の横幅、背景色、枠線、角丸、開閉ボタン、プラス・マイナスアイコン、iframeの表示サイズなどを設定しています。YouTube動画は16:9の縦横比で表示します。
script.jsでは、クリックされたボタンのaria-expanded属性と、対応するコンテンツのhidden属性を切り替えています。各項目を独立して開閉できるため、複数のコンテンツを同時に表示できます。
設置方法・使い方
「サンプル一式をダウンロード」からZIPファイルを取得して展開すると、sampleフォルダ内にindex.html、style.css、script.jsが保存されています。3つのファイルを同じ階層に配置したまま、sample/index.htmlをブラウザで開いてください。
「PDFを表示」「Googleマップを表示」「YouTube動画を表示」の各ボタンをクリックすると、対応するコンテンツが表示されます。もう一度クリックすると閉じます。複数の項目を同時に開くこともできます。
PDF・Googleマップ・YouTube動画は外部URLから読み込むため、表示にはインターネット接続が必要です。自分のコンテンツを表示する場合は、index.html内のiframeに設定されたURLを変更してください。
アコーディオンの開閉処理
各開閉ボタンにはaria-controls属性が設定されており、対応するコンテンツのIDを指定しています。JavaScriptでは、クリックされたボタンからこのIDを取得し、表示・非表示を切り替える対象を特定します。
// 対応するコンテンツを取得
const contentId = button.getAttribute("aria-controls");
const content = document.getElementById(contentId);
if (!content) return;
// 現在の開閉状態を取得
const isOpen = button.getAttribute("aria-expanded") === "true";
// 開閉状態を切り替え
button.setAttribute("aria-expanded", String(!isOpen));
content.hidden = isOpen;
aria-expandedはボタンの開閉状態を表し、trueが開いている状態、falseが閉じている状態です。hidden属性は、コンテンツの表示・非表示を制御します。
この処理ではクリックされた項目だけを切り替えるため、ほかの項目が開いていても自動的には閉じません。また、CSSではaria-expanded="true"のときにアイコンの縦線を90度回転させ、プラスからマイナスへ変化させています。
PDFを表示する方法
PDFを表示する場合は、index.htmlにあるPDF用iframeのsrc属性へ、PDFファイルのURLを指定します。サンプルでは青色のPDFを使用しています。
<iframe
class="iframe-accordion_frame"
src="https://maruhinoto.com/wp-content/uploads/2026/06/sample-blue.pdf"
title="PDFサンプル"
loading="lazy"
></iframe>
自分で用意したPDFを表示する場合は、PDFファイルをWebサーバーへアップロードし、ブラウザからアクセスできるURLを取得してください。取得したURLをsrcへ設定すると、アコーディオン内にそのPDFが表示されます。
PDFの表示にはブラウザのPDF表示機能を使用します。そのため、拡大・縮小やダウンロードなどの操作方法は、使用するブラウザや環境によって異なる場合があります。
Googleマップの埋め込みURLを取得する方法
Googleマップを表示する場合は、index.htmlにあるGoogleマップ用iframeのsrc属性を変更します。
まず、Googleマップで表示したい場所を検索し、対象の場所を表示してください。「共有」を選択したあと「地図を埋め込む」を選び、「HTMLをコピー」をクリックします。
コピーしたHTMLには、次のようなiframeコードが含まれています。
<iframe
src="Googleマップの埋め込みURL"
></iframe>
この中のsrc属性に設定されているURLを使用します。取得したURLを、index.htmlにあるGoogleマップ用iframeのsrcへ設定してください。
サンプルでは東京駅の地図を表示するため、次のように設定しています。
<iframe
class="iframe-accordion_frame"
src="https://www.google.com/maps?q=東京駅&output=embed"
title="東京駅のGoogleマップ"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
></iframe>
サンプルのURLは場所を検索して地図を表示する形式ですが、Googleマップの「地図を埋め込む」から取得したURLも使用できます。通常のGoogleマップのページURLではなく、iframeで表示できる埋め込み用URLを指定してください。
今回の実装ではGoogle Maps JavaScript APIを使用していないため、APIキーやMap IDを取得する必要はありません。
YouTube動画の表示方法・動画IDの確認方法
YouTube動画を表示する場合は、index.htmlにあるYouTube用iframeのsrc属性を変更します。通常の動画ページURLをそのまま指定するのではなく、YouTubeの埋め込み用URLを使用します。
まず、表示したいYouTube動画をブラウザで開き、アドレスバーのURLを確認してください。通常の動画ページでは、次のような形式になっています。
https://www.youtube.com/watch?v=aqz-KE-bpKQ
このURLでは、v=より後ろにあるaqz-KE-bpKQが動画IDです。動画によってこの文字列は異なるため、表示したい動画のURLから確認してください。
確認した動画IDを、次の埋め込み用URLの「動画ID」の部分へ設定します。
https://www.youtube.com/embed/動画ID
サンプル動画の場合は、次のURLになります。
https://www.youtube.com/embed/aqz-KE-bpKQ
このURLをindex.htmlのYouTube用iframeへ設定します。サンプルでは次のように記述しています。
<iframe
class="iframe-accordion_frame"
src="https://www.youtube.com/embed/aqz-KE-bpKQ"
title="YouTubeサンプル動画"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
referrerpolicy="strict-origin-when-cross-origin"
allowfullscreen
></iframe>
動画IDを確認する代わりに、YouTubeの「共有」から「埋め込む」を選択し、表示されたiframeコードのsrc属性にあるURLをコピーする方法もあります。
設定後にsample/index.htmlをブラウザで開き、「YouTube動画を表示」をクリックしてください。指定した動画がアコーディオン内に表示されれば設定完了です。
このサンプルでは、アコーディオンを開いても動画は自動再生されません。動画を再生する場合は、表示されたYouTubeプレーヤーの再生ボタンをクリックしてください。また、アコーディオンを閉じてもiframe自体は削除されないため、再生中の動画がそのまま再生される場合があります。動画によっては、投稿者側の設定などにより外部サイトへの埋め込みが許可されていない場合があります。
カスタマイズできる内容
index.htmlでは、各開閉ボタンの文章とiframeの表示内容を変更できます。PDF・Googleマップ・YouTube動画は、それぞれのsrc属性へ表示したいコンテンツのURLを設定してください。iframeのtitle属性も、表示内容に合わせて変更できます。
style.cssでは、アコーディオン全体の横幅、背景色、枠線、角丸、開閉ボタンの文字色、プラス・マイナスアイコンの色、iframeの表示高さなどを変更できます。
script.jsでは各項目を独立して開閉する処理を設定しています。現在の実装では、ほかの項目を開いても、すでに開いている項目は閉じません。
数値調整
style.css
max-width: 760px;
アコーディオン全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
border-radius: 12px;
アコーディオン全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
min-height: 60px;
開閉ボタンの最小高さです。値を大きくするとボタンの高さを確保できます。
padding: 16px 20px;
開閉ボタンの内側余白です。16pxは上下、20pxは左右の余白を表します。値を大きくすると文字とボタンの端との間隔が広がります。
padding: 20px;
iframeを表示するコンテンツ領域の内側余白です。値を大きくするとiframeとアコーディオンの枠との間隔が広がります。
height: 380px;
PDFとGoogleマップの表示高さです。値を大きくすると表示領域が縦に広がり、小さくすると低くなります。
aspect-ratio: 16 / 9;
YouTube動画の表示領域の縦横比です。16:9の比率を維持しながら、横幅に合わせて高さが変化します。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth: 100%;とmax-width: 760px;によって、アコーディオン全体が画面幅に合わせて縮小します。iframeにもwidth: 100%;を指定しているため、コンテンツの表示領域も横幅に合わせて調整されます。
画面幅が640px以下になると、開閉ボタンの最小高さを56px、文字サイズを15px、内側余白を上下14px・左右16pxへ変更します。コンテンツ領域の余白は12pxになり、PDFとGoogleマップの表示高さは300pxへ切り替わります。
YouTube動画はaspect-ratio: 16 / 9;によって縦横比を維持するため、スマートフォンでも画面幅に合わせて表示できます。
コメント