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

ドロワーメニュー

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

HTML/CSSだけで複数ドロワーメニューを切り替えて表示する方法を紹介します。このサンプルでは「メニューA」と「メニューB」のボタンを用意し、選択したボタンに対応する内容を画面左側から表示します。JavaScriptを使わず、HTMLのラジオボタンとCSSのセレクタだけで開閉状態を切り替えます。

画面上へ表示されるドロワーメニューは常に1つだけです。メニューAを選ぶとホーム・サービス・会社概要が表示され、メニューBを選ぶとブログ・料金・お問い合わせへ内容が切り替わります。別のボタンを選択した場合も、複数のドロワーメニューが重なって表示されることはありません。

JavaScriptを使用できないページや、簡潔な構成で複数のナビゲーションを切り替えたい場合に利用できます。メニュー項目、リンク先、横幅、背景色、余白、角丸、影、スライド速度などはHTMLとCSS内で変更できます。

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

デモ

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などすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。

ファイル構成と設置方法

このサンプルは、HTMLとCSSの2ファイルだけで動作する複数ドロワーメニューです。JavaScriptを使用せず、radioボタンとlabelを利用して、1つのドロワーメニュー内の表示内容を切り替えています。HTMLでは画面構成とメニュー内容を定義し、CSSではレイアウト、開閉アニメーション、表示切り替えを行っています。

sample/
├── index.html
└── style.css

各ファイルの役割
index.html
ページ全体の構成、開閉ボタン、radioボタン、ドロワーメニュー、メニューA・メニューBの内容を定義しています。タイトルや説明文、ボタン名、メニュー項目などを自由に変更できます。

style.css
ドロワーメニューのデザイン、ボタンの装飾、背景、影、開閉アニメーション、radioボタンによる表示切り替え、レスポンシブ表示を設定しています。

設置方法・使い方
sampleフォルダ内のファイルをそのまま配置します。
sample/index.htmlをブラウザで開くと利用できます。メニューAまたはメニューBをクリックすると、同じドロワーメニュー内で内容だけを切り替えて表示します。閉じるボタンまたは背景部分をクリックするとドロワーメニューを閉じます。

カスタマイズできる内容
index.htmlではページタイトル、説明文、ボタン名、ドロワーメニューのタイトル、各メニュー項目を変更できます。
style.cssではボタンの色、文字色、背景色、ドロワーメニューの横幅、余白、角丸、影、アニメーション速度などを変更できます。radioボタンの切り替え対象を変更すれば表示する内容を追加・変更することもできます。

数値調整
style.css
width:320px;
ドロワーメニューの横幅です。値を変更するとメニューの幅が変わります。

max-width:85%;
小さい画面での最大幅です。値を変更するとスマートフォン表示時の横幅が変わります。

transition:transform .35s ease;
0.35秒でドロワーメニューが開閉します。値を大きくするとゆっくり、小さくすると速くなります。

transition:opacity .3s;
背景を0.3秒でフェード表示します。値を変更すると背景の表示速度が変わります。

レスポンシブ対応
style.cssでレスポンシブ対応しています。max-width:85%により画面幅に合わせてドロワーメニューが縮小され、@media(max-width:640px)では余白を調整しています。スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント