iframeをドロップダウンメニューに表示する方法
iframeをドロップダウンメニューに表示する方法を紹介します。このサンプルでは、HTML・CSS・JavaScriptを使用し、「iframeメニュー」をクリックすると3つの項目を表示します。各項目をクリックすると、その項目に設定したURLをiframeへ読み込み、ドロップダウンメニューの中に表示できます。
通常のドロップダウンメニューはリンク先を選択する用途で使われますが、この実装ではメニューを閉じずに選択したコンテンツをその場で確認できます。マニュアルや案内ページ、外部コンテンツなど、iframeで表示できる複数のページを1つのメニューから切り替えて確認したい場合に利用できます。表示するURLは各項目へ設定できるため、用途に合わせて内容を変更できます。
HTMLではメニュー名、項目名、iframeへ表示するURLを変更でき、CSSではメニューの横幅、余白、背景色、角丸、iframeの高さなどを調整できます。JavaScriptではメニューの開閉と、選択した項目に対応するURLをiframeのsrc属性へ設定する処理を行います。画面幅640px以下では余白とiframeの高さを調整するため、スマートフォン・タブレット・PCで利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
「URLメニュー」をクリックしてメニューを開き、各項目をクリックするとWebページがiframe内に表示されます。もう一度クリックすると閉じます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>iframeをドロップダウンメニューに表示</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ドロップダウンメニュー全体 -->
<div class="iframe-dropdown-menu_wrap">
<!-- メインメニューボタン -->
<button
class="iframe-dropdown-menu_main-button"
type="button"
data-iframe-dropdown-main-button
aria-expanded="false">
<!-- メニュー名 -->
<span>URLメニュー</span>
<!-- 開閉状態を表す矢印 -->
<span class="iframe-dropdown-menu_main-arrow">▼</span>
</button>
<!-- メニュー一覧。初期状態では非表示 -->
<div
class="iframe-dropdown-menu_list"
data-iframe-dropdown-list
hidden>
<!-- 1つ目のメニュー項目 -->
<div class="iframe-dropdown-menu_item">
<!-- 1つ目のiframeを開閉するボタン -->
<button
class="iframe-dropdown-menu_item-button"
type="button"
data-iframe-dropdown-item-button
aria-expanded="false">
<!--
表示名です。
iframeへ設定するWebページに合わせて変更してください。
-->
<span>ページ1</span>
<!-- 開閉状態を表す矢印 -->
<span class="iframe-dropdown-menu_item-arrow">▼</span>
</button>
<!-- 1つ目のiframe表示エリア。初期状態では非表示 -->
<div
class="iframe-dropdown-menu_panel"
data-iframe-dropdown-panel
hidden>
<!--
【1つ目のURLを設定してください】
このサンプルには表示先のURLは含まれていません。
利用者自身でiframeへ表示したいWebページのURLを用意してください。
1. iframeへ表示したいWebページのURLを確認します。
2. 下の src 属性にある YOUR_IFRAME_URL_1 を探します。
3. YOUR_IFRAME_URL_1 を、用意したURLへ置き換えてください。
例:
src="YOUR_IFRAME_URL_1"
↓
src="利用者自身で用意したURL"
iframeによる表示を禁止しているWebサイトは表示できません。
表示先サイトがiframeでの埋め込みを許可していることを確認してください。
-->
<iframe
class="iframe-dropdown-menu_iframe"
src="YOUR_IFRAME_URL_1"
title="ページ1"
loading="lazy"></iframe>
</div>
</div>
<!-- 2つ目のメニュー項目 -->
<div class="iframe-dropdown-menu_item">
<!-- 2つ目のiframeを開閉するボタン -->
<button
class="iframe-dropdown-menu_item-button"
type="button"
data-iframe-dropdown-item-button
aria-expanded="false">
<!--
表示名です。
iframeへ設定するWebページに合わせて変更してください。
-->
<span>ページ2</span>
<!-- 開閉状態を表す矢印 -->
<span class="iframe-dropdown-menu_item-arrow">▼</span>
</button>
<!-- 2つ目のiframe表示エリア。初期状態では非表示 -->
<div
class="iframe-dropdown-menu_panel"
data-iframe-dropdown-panel
hidden>
<!--
【2つ目のURLを設定してください】
このサンプルには表示先のURLは含まれていません。
利用者自身で2つ目に表示したいWebページのURLを用意してください。
1. iframeへ表示したいWebページのURLを確認します。
2. 下の src 属性にある YOUR_IFRAME_URL_2 を探します。
3. YOUR_IFRAME_URL_2 を、用意したURLへ置き換えてください。
例:
src="YOUR_IFRAME_URL_2"
↓
src="利用者自身で用意したURL"
iframeによる表示を禁止しているWebサイトは表示できません。
表示先サイトがiframeでの埋め込みを許可していることを確認してください。
-->
<iframe
class="iframe-dropdown-menu_iframe"
src="YOUR_IFRAME_URL_2"
title="ページ2"
loading="lazy"></iframe>
</div>
</div>
<!-- 3つ目のメニュー項目 -->
<div class="iframe-dropdown-menu_item">
<!-- 3つ目のiframeを開閉するボタン -->
<button
class="iframe-dropdown-menu_item-button"
type="button"
data-iframe-dropdown-item-button
aria-expanded="false">
<!--
表示名です。
iframeへ設定するWebページに合わせて変更してください。
-->
<span>ページ3</span>
<!-- 開閉状態を表す矢印 -->
<span class="iframe-dropdown-menu_item-arrow">▼</span>
</button>
<!-- 3つ目のiframe表示エリア。初期状態では非表示 -->
<div
class="iframe-dropdown-menu_panel"
data-iframe-dropdown-panel
hidden>
<!--
【3つ目のURLを設定してください】
このサンプルには表示先のURLは含まれていません。
利用者自身で3つ目に表示したいWebページのURLを用意してください。
1. iframeへ表示したいWebページのURLを確認します。
2. 下の src 属性にある YOUR_IFRAME_URL_3 を探します。
3. YOUR_IFRAME_URL_3 を、用意したURLへ置き換えてください。
例:
src="YOUR_IFRAME_URL_3"
↓
src="利用者自身で用意したURL"
iframeによる表示を禁止しているWebサイトは表示できません。
表示先サイトがiframeでの埋め込みを許可していることを確認してください。
-->
<iframe
class="iframe-dropdown-menu_iframe"
src="YOUR_IFRAME_URL_3"
title="ページ3"
loading="lazy"></iframe>
</div>
</div>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではドロップダウンメニュー、各メニュー項目、iframeの表示エリアを作成し、CSSではメニューやiframeの横幅、余白、色、角丸などのデザインを設定します。JavaScriptでは「URLメニュー」と各項目のクリックを検知し、メニュー一覧やiframe表示エリアの開閉、矢印の切り替えを行います。
iframeへ表示するWebページのURLは配布ファイルには含まれていません。利用者自身でiframe表示を許可しているWebページのURLを用意し、index.html内のYOUR_IFRAME_URL_1、YOUR_IFRAME_URL_2、YOUR_IFRAME_URL_3をそれぞれ実際のURLへ置き換えて使用します。表示先のWebサイトがiframeによる埋め込みを禁止している場合、そのページはiframe内へ表示できません。
URLを設定したあとにsample/index.htmlをブラウザで開くと、「URLメニュー」ボタンが表示されます。ボタンをクリックすると3つのメニュー項目が表示され、それぞれの項目をクリックすると対応するiframe表示エリアを開閉できます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはドロップダウンメニューとiframeを構成するファイルです。「URLメニュー」「ページ1」「ページ2」「ページ3」の表示名を変更できます。また、iframeのsrc属性にあるYOUR_IFRAME_URL_1、YOUR_IFRAME_URL_2、YOUR_IFRAME_URL_3へ利用者自身で用意したURLを設定します。
style.cssはドロップダウンメニューとiframeのデザインを設定するファイルです。全体の最大横幅、ボタンの高さ、余白、背景色、文字色、角丸、影、iframeの高さなどを変更できます。画面幅640px以下で表示を調整するレスポンシブ設定もこのファイルに記述されています。
script.jsはドロップダウンメニューを開閉するファイルです。「URLメニュー」をクリックするとメニュー一覧の表示・非表示を切り替え、各「ページ」ボタンをクリックすると対応するiframe表示エリアを開閉します。同時にaria-expandedの値と「▼」「▲」の矢印表示を切り替えます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、ファイル名を変更せずに配置すれば追加の読み込み設定は必要ありません。
次に、iframeへ表示したいWebページのURLを利用者自身で用意します。index.htmlを開き、1つ目のiframeにあるYOUR_IFRAME_URL_1を1つ目に表示したいURL、YOUR_IFRAME_URL_2を2つ目に表示したいURL、YOUR_IFRAME_URL_3を3つ目に表示したいURLへ置き換えてください。URL全体をiframeのsrc属性へ設定します。
3つのURLを設定したらsample/index.htmlをブラウザで開きます。「URLメニュー」をクリックするとメニュー一覧が開き、「ページ1」「ページ2」「ページ3」をクリックすると、それぞれ設定したURLをiframeで表示します。もう一度同じ項目をクリックするとiframe表示エリアが閉じます。なお、iframe表示の可否は表示先Webサイトの設定にも依存します。表示先がiframeによる埋め込みを禁止している場合は、正しいURLを設定していても表示できません。
カスタマイズできる内容
index.htmlでは「URLメニュー」の文字と、「ページ1」「ページ2」「ページ3」の項目名を変更できます。表示する内容に合わせて項目名を書き換えてください。また、各iframeのtitle属性も表示内容に合わせて変更できます。
iframeへ表示するページは、index.htmlのYOUR_IFRAME_URL_1、YOUR_IFRAME_URL_2、YOUR_IFRAME_URL_3を変更して設定します。それぞれ別のURLを指定できるため、3つのメニュー項目から異なるWebページを表示できます。
style.cssでは、メインメニューボタンの背景色や文字色、各ボタンの文字サイズ、メニュー一覧の背景色、枠線、角丸、影、iframeの高さや角丸などを変更できます。JavaScriptではメインメニューと各iframe表示エリアの開閉、および「▼」「▲」の矢印切り替えを行っています。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。40pxは上下、20pxは左右の余白を表します。値を大きくすると画面端との間隔が広がります。
max-width:700px;
ドロップダウンメニュー全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
ドロップダウンメニュー全体の上下余白です。40pxを大きくすると上下の間隔が広がります。autoによって左右中央へ配置されます。
min-height:64px;
メインメニューボタンの最小高さです。値を大きくするとボタンが高くなります。
padding:16px 24px;
メインメニューボタンの内側余白です。16pxは上下、24pxは左右の余白を表します。
border-radius:12px;
メインメニューボタンとメニュー一覧の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:20px;
メインメニューボタンの文字サイズです。値を大きくすると文字が大きくなります。
margin-left:16px;
メニュー名と矢印の間隔です。値を大きくすると間隔が広がります。
margin-top:12px;
メインメニューボタンとメニュー一覧の間隔です。値を大きくすると上下の間隔が広がります。
padding:16px;
メニュー一覧の内側余白です。値を大きくすると各項目と外枠の間隔が広がります。
box-shadow:0 10px 24px rgba(15,23,42,.10);
メニュー一覧に表示する影です。10pxは縦方向の位置、24pxはぼかしの広がりに関係します。値を変更すると影の見え方が変わります。
min-height:58px;
各メニュー項目ボタンの最小高さです。値を大きくすると項目が高くなります。
padding:14px 16px;
各メニュー項目ボタンの内側余白です。14pxは上下、16pxは左右の余白を表します。
font-size:17px;
「ページ1」「ページ2」「ページ3」など各項目名の文字サイズです。値を大きくすると文字が大きくなります。
padding:0 16px 18px;
iframe表示エリアの余白です。左右16px、下側18pxの余白を設定しています。値を大きくするとiframe周囲の間隔が広がります。
height:360px;
iframeの通常時の高さです。値を大きくすると表示領域が高くなり、小さくすると低くなります。
border-radius:8px;
iframeの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
@media (max-width:640px)
画面幅640px以下でスマートフォン向けの表示へ切り替えるブレークポイントです。
height:300px;
画面幅640px以下で使用するiframeの高さです。値を変更するとスマートフォン表示時のiframeの高さが変わります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、ドロップダウンメニュー全体が画面幅に合わせて縮小されます。iframeにもwidth:100%を指定しているため、親要素の横幅に合わせて表示されます。
画面幅640px以下では@media (max-width:640px)を使用し、ページ全体の余白、メインメニューボタンの高さ・余白・文字サイズ、メニュー一覧とiframe周囲の余白を小さくしています。また、iframeの高さを360pxから300pxへ変更しています。これにより、スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント