HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法【HTML/CSS・サンプルコード付き】

ドロワーメニュー
無料ツール
ドロワーメニューを自由に作成

表示位置・メニュー項目・サイズ・色・余白・閉じ方などを設定して、HTML・CSS・JavaScriptを自動生成できます。

ドロワーメニュー作成ツールを使う
新しいタブで開きます

HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法

HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法を紹介します。このサンプルでは、ラジオボタンとlabel要素を利用し、JavaScriptを使用せずに1つのドロワーメニュー内の表示内容を切り替えられます。メニューAとメニューBのボタンをクリックすると、それぞれ異なるメニュー内容が表示され、閉じるボタンや背景部分をクリックするとドロワーメニューを閉じることができます。

管理画面や会員サイトでは、利用者の種類や機能ごとに表示するメニューを切り替えたい場面があります。また、ECサイトの商品カテゴリや企業サイトのサービス一覧など、複数のメニューを用途に応じて表示したい場合にも利用できます。1つのドロワーメニューを共通で使用しながら内容だけを切り替えるため、画面をすっきり見せやすく、HTML/CSSのみで実装できる点もメリットです。

タイトル、説明文、ボタン名、メニュー項目、リンク先はHTMLから変更できます。CSSではドロワーメニューの横幅、背景色、文字色、余白、角丸、影、アニメーション速度などを自由に調整できます。レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用しやすく、JavaScriptを使用せずに複数メニューを切り替えたい場合のサンプルとして活用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

HTML/CSSだけで切り替える複数ドロワーメニュー

ボタンをクリックすると、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 ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

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で利用できます。


こちらもおすすめ


コメント