HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法
HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法を紹介します。このサンプルでは、ラジオボタンとlabel要素を利用し、JavaScriptを使用せずに1つのドロワーメニュー内の表示内容を切り替えられます。メニューAとメニューBのボタンをクリックすると、それぞれ異なるメニュー内容が表示され、閉じるボタンや背景部分をクリックするとドロワーメニューを閉じることができます。
管理画面や会員サイトでは、利用者の種類や機能ごとに表示するメニューを切り替えたい場面があります。また、ECサイトの商品カテゴリや企業サイトのサービス一覧など、複数のメニューを用途に応じて表示したい場合にも利用できます。1つのドロワーメニューを共通で使用しながら内容だけを切り替えるため、画面をすっきり見せやすく、HTML/CSSのみで実装できる点もメリットです。
タイトル、説明文、ボタン名、メニュー項目、リンク先はHTMLから変更できます。CSSではドロワーメニューの横幅、背景色、文字色、余白、角丸、影、アニメーション速度などを自由に調整できます。レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用しやすく、JavaScriptを使用せずに複数メニューを切り替えたい場合のサンプルとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ボタンをクリックすると、1つのドロワーメニュー内で表示内容を切り替えます。
「メニューA」「メニューB」をクリックすると、同じドロワーメニューが左側から表示され、内容だけが切り替わります。閉じるボタンまたは背景部分をクリックすると、ページ移動や再読み込みをせずに閉じます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン表示対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>HTML/CSSだけで複数ドロワーメニューを切り替えて表示</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ドロワーメニューを開く操作エリア -->
<main class="html-css-multi-drawer_wrap">
<!-- 操作エリアのタイトル -->
<div class="html-css-multi-drawer_title">
HTML/CSSだけで切り替える複数ドロワーメニュー
</div>
<!-- 操作エリアの説明文 -->
<p class="html-css-multi-drawer_text">
ボタンをクリックすると、1つのドロワーメニュー内で表示内容を切り替えます。
</p>
<!-- メニューを開くボタン -->
<div class="html-css-multi-drawer_buttons">
<!-- メニューAを開く -->
<label
class="html-css-multi-drawer_button"
for="html-css-multi-drawer-a">
メニューA
</label>
<!-- メニューBを開く -->
<label
class="html-css-multi-drawer_button"
for="html-css-multi-drawer-b">
メニューB
</label>
</div>
</main>
<!-- ドロワーメニューを閉じた状態 -->
<input
class="html-css-multi-drawer_radio"
type="radio"
name="html-css-multi-drawer"
id="html-css-multi-drawer-close"
checked>
<!-- メニューAを表示する状態 -->
<input
class="html-css-multi-drawer_radio"
type="radio"
name="html-css-multi-drawer"
id="html-css-multi-drawer-a">
<!-- メニューBを表示する状態 -->
<input
class="html-css-multi-drawer_radio"
type="radio"
name="html-css-multi-drawer"
id="html-css-multi-drawer-b">
<!-- ドロワーメニュー表示中の背景 -->
<label
class="html-css-multi-drawer_overlay"
for="html-css-multi-drawer-close"
aria-label="ドロワーメニューを閉じる">
</label>
<!-- 1つのドロワーメニュー本体 -->
<aside class="html-css-multi-drawer_drawer">
<!-- メニューAの内容 -->
<div class="html-css-multi-drawer_content html-css-multi-drawer_content-a">
<!-- メニューA上部 -->
<div class="html-css-multi-drawer_header">
<!-- メニューAのタイトル -->
<div class="html-css-multi-drawer_heading">
メニューA
</div>
<!-- メニューAを閉じるボタン -->
<label
class="html-css-multi-drawer_close"
for="html-css-multi-drawer-close"
aria-label="メニューAを閉じる">
</label>
</div>
<!-- メニューAのナビゲーション -->
<nav class="html-css-multi-drawer_nav" aria-label="メニューA">
<a class="html-css-multi-drawer_link" href="#home">
ホーム
</a>
<a class="html-css-multi-drawer_link" href="#service">
サービス
</a>
<a class="html-css-multi-drawer_link" href="#company">
会社概要
</a>
<a class="html-css-multi-drawer_link" href="#contact">
お問い合わせ
</a>
</nav>
</div>
<!-- メニューBの内容 -->
<div class="html-css-multi-drawer_content html-css-multi-drawer_content-b">
<!-- メニューB上部 -->
<div class="html-css-multi-drawer_header">
<!-- メニューBのタイトル -->
<div class="html-css-multi-drawer_heading">
メニューB
</div>
<!-- メニューBを閉じるボタン -->
<label
class="html-css-multi-drawer_close"
for="html-css-multi-drawer-close"
aria-label="メニューBを閉じる">
</label>
</div>
<!-- メニューBのナビゲーション -->
<nav class="html-css-multi-drawer_nav" aria-label="メニューB">
<a class="html-css-multi-drawer_link" href="#blog">
ブログ
</a>
<a class="html-css-multi-drawer_link" href="#price">
料金
</a>
<a class="html-css-multi-drawer_link" href="#case">
導入事例
</a>
<a class="html-css-multi-drawer_link" href="#support">
サポート
</a>
</nav>
</div>
</aside>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLではラジオボタンとlabel要素を利用して、ボタンごとに異なる内容を1つのドロワーメニューへ表示します。CSSではドロワーメニューの開閉、表示内容の切り替え、背景オーバーレイの表示、レイアウトやデザインを設定しており、JavaScriptを使用せずに動作します。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlはページ全体の構成を定義するファイルです。タイトル、説明文、メニューA・メニューBのボタン名、各ドロワーメニューの見出し、リンク名、リンク先を変更できます。ラジオボタンを利用して表示するメニュー内容を切り替えます。
style.cssは画面全体のデザインを設定するファイルです。ドロワーメニューの横幅、背景色、余白、文字色、角丸、影、オーバーレイ、アニメーション、レスポンシブ表示などを変更できます。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。「メニューA」「メニューB」をクリックすると左側からドロワーメニューが表示され、それぞれ異なる内容へ切り替わります。閉じるボタンまたは背景部分をクリックするとドロワーメニューを閉じられます。
カスタマイズできる内容
index.htmlではタイトル、説明文、ボタン名、ドロワーメニューの見出し、リンク名、リンク先を自由に変更できます。メニュー項目を追加・削除したり、用途に合わせて表示内容を変更できます。
style.cssではドロワーメニューの横幅、背景色、文字色、余白、角丸、影、ボタンデザイン、リンクデザイン、アニメーション速度、オーバーレイの色や透明度などを変更できます。
数値調整
style.css
max-width:700px;
コンテンツ全体の最大横幅です。値を大きくすると全体が横に広がり、小さくするとコンパクトになります。
width:320px;
ドロワーメニューの横幅です。値を大きくすると広くなり、小さくすると細く表示されます。
max-width:85%;
小さい画面での最大横幅です。値を変更すると画面に対するドロワーメニューの割合が変わります。
padding:32px;
コンテンツ全体の内側余白です。値を大きくすると余白が広がり、小さくすると詰まった表示になります。
padding:28px 22px;
ドロワーメニュー内側の余白です。値を変更するとメニュー内容の配置が変わります。
border-radius:10px;
ボタンやリンクの角丸です。値を大きくすると丸みが強くなります。
transition:transform .35s ease;
ドロワーメニューの開閉時間です。値を大きくするとゆっくり表示され、小さくすると速く表示されます。
transition:opacity .3s, visibility .3s;
背景オーバーレイの表示・非表示時間です。値を大きくすると切り替えがゆっくりになります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxにより画面幅に応じてコンテンツが縮小されます。また、ドロワーメニューはmax-width:85%で画面内へ収まり、640px以下では余白を調整するmedia queryを使用しているため、スマートフォン・タブレット・PCで利用できます。
コメント