横並びのドロップダウンメニューを1つずつ開く方法【HTML/CSS/JavaScript・サンプルコード付き】

ドロップダウンメニュー
無料ツール
ドロップダウンメニューを自由に作成

ボタン・メニュー項目・サイズ・色・余白・枠線などを設定して、HTML・CSS・JavaScriptを自動生成できます。

ドロップダウンメニュー作成ツールを使う
新しいタブで開きます

横並びのドロップダウンメニューを1つずつ開く方法

横並びに配置した複数のドロップダウンメニューを1つずつ開く方法を紹介します。このサンプルでは、「メニュー1」と「メニュー2」の2つのドロップダウンメニューを横並びに配置し、それぞれのボタンをクリックしてメニューを開閉できます。どちらか一方を開いた状態でもう一方のボタンをクリックすると、先に開いていたメニューが自動で閉じ、新しく選んだメニューだけが表示されます。

複数のドロップダウンメニューを同じ場所へ配置すると、複数のメニューが同時に開いて画面が見づらくなる場合があります。このサンプルでは、JavaScriptで現在開いているメニューを確認し、クリックされたメニュー以外からis-activeクラスを削除することで、常に1つだけ開くようにしています。ヘッダーのナビゲーション、管理画面の操作メニュー、会員サイトのメニューなど、複数の選択肢を横並びで整理したい場面に利用できます。

HTMLでは開閉ボタンの文字、メニュー項目、リンク先を変更でき、CSSではメニューの横幅、ボタンの色、余白、角丸、メニュー同士の間隔、ドロップダウンの表示位置などを調整できます。JavaScriptでは複数の開閉ボタンへ同じクリック処理を設定しているため、同じ構造のドロップダウンメニューを追加することもできます。画面幅が狭い場合は縦並びへ切り替わるため、スマートフォン・タブレット・PCで利用できます。

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

デモ

横並びのドロップダウンメニュー

別のメニューを開くと、先に開いていたメニューが自動で閉じます。

「メニュー1」または「メニュー2」をクリックしてください。別のメニューを開くと、先に開いていたメニューは自動で閉じます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コード -->
  <meta charset="UTF-8">

  <!-- スマートフォン対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル -->
  <title>横並びのドロップダウンメニューを1つずつ開く</title>

  <!-- CSSファイル -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- ドロップダウンメニュー全体 -->
  <div class="single-open-dropdown-menu_wrap">

    <!-- タイトル -->
    <div class="single-open-dropdown-menu_title">
      横並びのドロップダウンメニュー
    </div>

    <!-- 説明文 -->
    <p class="single-open-dropdown-menu_text">
      別のメニューを開くと、先に開いていたメニューが自動で閉じます。
    </p>

    <!-- 複数のドロップダウンメニューを並べるエリア -->
    <div class="single-open-dropdown-menu_row">

      <!-- 1つ目のドロップダウンメニュー -->
      <div class="single-open-dropdown-menu_box">

        <!-- 1つ目の開閉ボタン -->
        <button class="single-open-dropdown-menu_button" type="button">
          メニュー1
        </button>

        <!-- 1つ目のメニュー項目 -->
        <ul class="single-open-dropdown-menu_list">

          <li>
            <a href="#">ホーム</a>
          </li>

          <li>
            <a href="#">サービス</a>
          </li>

          <li>
            <a href="#">お問い合わせ</a>
          </li>

        </ul>

      </div>

      <!-- 2つ目のドロップダウンメニュー -->
      <div class="single-open-dropdown-menu_box">

        <!-- 2つ目の開閉ボタン -->
        <button class="single-open-dropdown-menu_button" type="button">
          メニュー2
        </button>

        <!-- 2つ目のメニュー項目 -->
        <ul class="single-open-dropdown-menu_list">

          <li>
            <a href="#">プロフィール</a>
          </li>

          <li>
            <a href="#">設定</a>
          </li>

          <li>
            <a href="#">ログアウト</a>
          </li>

        </ul>

      </div>

    </div>

  </div>

  <!-- JavaScriptファイル -->
  <script src="script.js"></script>

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「メニュー1」と「メニュー2」の2つのドロップダウンメニューを作成し、CSSでは2つのメニューを横並びに配置します。JavaScriptではクリックされたメニュー以外を一度閉じてから対象のメニューを開くことで、複数のドロップダウンメニューが同時に開かないようにしています。

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

各ファイルの役割
index.htmlはドロップダウンメニュー全体を構成するファイルです。開閉ボタンの文字、メニュー項目、各リンクの表示内容やリンク先を変更できます。サンプルでは「メニュー1」と「メニュー2」の2つを配置しています。

style.cssはドロップダウンメニューのデザインと配置を設定するファイルです。2つのメニューを横並びにし、ボタンの色、横幅、余白、角丸、リストの表示位置、枠線、影などを設定しています。画面幅640px以下では横並びから縦並びへ切り替えます。

script.jsは複数のドロップダウンメニューを1つずつ開く処理を記述したファイルです。クリックされたボタンに対応するリストを取得し、ほかのリストからis-activeクラスを削除してから対象のリストを表示します。同じボタンをもう一度クリックすると、そのメニューを閉じることもできます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsを読み込むため、追加のライブラリは必要ありません。

「メニュー1」をクリックすると1つ目のドロップダウンメニューが開きます。その状態で「メニュー2」をクリックするとメニュー1が自動で閉じ、メニュー2だけが開きます。開いているメニューと同じボタンをもう一度クリックすると閉じます。

カスタマイズできる内容
index.htmlでは開閉ボタンの文字、メニュー項目、リンク先を変更できます。同じsingle-open-dropdown-menu_boxの構造を追加すると、横並びに配置するドロップダウンメニューを増やせます。実際に使用する場合は、各href="#"を移動先のURLへ変更してください。

style.cssでは全体の最大横幅、メニュー同士の間隔、1つのメニューの横幅、ボタンの背景色、文字サイズ、角丸、リストの表示位置、余白、枠線、影などを変更できます。

数値調整
style.css
max-width:760px;
全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。

border-radius:18px;
全体の角丸です。値を大きくすると丸みが強くなります。

font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きくなります。

margin:0 0 28px;
説明文の下側余白です。28pxを大きくすると開閉ボタンとの間隔が広がります。

gap:24px;
横並びにしたドロップダウンメニュー同士の間隔です。値を大きくすると間隔が広がります。

width:220px;
1つのドロップダウンメニューの横幅です。値を大きくするとボタンとリストが横に広がります。

padding:14px;
開閉ボタンの内側余白です。値を大きくするとボタンが大きくなります。

border-radius:12px;
開閉ボタンとメニューリストの角丸です。値を大きくすると丸みが強くなります。

font-size:15px;
開閉ボタンの文字サイズです。値を大きくすると文字が大きくなります。

top:calc(100% + 10px);
ボタンとメニューリストの間隔です。10pxを大きくするとリストがボタンから離れ、小さくすると近づきます。

padding:8px 0;
メニューリストの上下余白です。8pxを大きくするとリスト上下の余白が広がります。

box-shadow:0 10px 25px ...
メニューリストの影です。10pxは下方向の位置、25pxはぼかしの大きさです。値を変更すると影の位置や広がりを調整できます。

padding:12px 18px;
メニュー項目の内側余白です。12pxが上下、18pxが左右の余白です。値を大きくすると項目が大きくなります。

レスポンシブ対応
このサンプルはレスポンシブ対応です。通常はdisplay:flexによって2つのドロップダウンメニューを横並びに表示します。画面幅640px以下ではflex-direction:columnへ変更し、メニューを縦並びに切り替えます。

スマートフォン表示では全体の内側余白をpadding:24px 18px;へ縮小し、各メニューにはwidth:100%とmax-width:280pxを設定しています。これにより、スマートフォン・タブレット・PCの画面幅に合わせて利用できます。


こちらもおすすめ


コメント