CSS

Bootstrap navbar + dropdown サンプル(実行可能サンプルあり)

Bootstrap navbar と dropdown を組み合わせたヘッダーナビゲーションメニューの実装例を示します。ポイントは、「navbar の基本的な使い方」と「dropdown の画面右端への配置」の2点です。実行可能なコードも示しますので、手元で実装コードと動作結果を比較を行っていただけます。

実行結果

実行結果を示します。よくある、ヘッダーに複数機能へのリンクが配置されているレイアウトです。

PC でのレイアウト

モバイルでのレイアウト

ポイント1:navbar の基本的な使い方

ul タグに navbar-nav クラスを加えることで、ナビゲーションバーを作ります。navbar-nav クラスの親要素として、navbar-collapse を付与し、画面サイズに応じて navbar-nav の子要素の表示・非表示を切り替えます。

<!-- メニューコンテナ -->
<div class="collapse navbar-collapse" id="navbarNav">
  <ul class="navbar-nav">
    <!-- ページリンク -->
    <li class="nav-item">
      <a class="nav-link active" aria-current="page" href="#">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="#">About</a>
    </li>
    <li class="nav-item">
      <a class="nav-link" href="#">Contact</a>
    </li>
  </ul>
  ...
</div>

ポイント2:dropdown の画面右端への配置

ドロップダウンメニューをナビゲーションバーの右端に配置するには、ms-auto クラスを付与します。マージンのスタート方向(ms)に自動的に(auto)空白を挿入するように振る舞います。

ドロップダウン本体は dropdown クラスを用います。ドロップダウン内のメニューをまとめる dropdown-menu クラスと、ドロップダウン内の各メニューは、dropdown-item を用います。また、ドロップダウンの展開メニューを、画面の右端を起点として、画面の左方向に表示するには、dropdown-menu-end クラスを適用します。dropdown-menu-end クラスを適用しないと、展開メニューが、画面右方向に伸びてしまい、ヘッダーの右端と展開メニューの右端のアラインメントがずれてしまいます。

<!-- メニューコンテナ -->
<div class="collapse navbar-collapse" id="navbarNav">
  ...
  <!-- ユーザードロップダウンメニュー -->
  <ul class="navbar-nav ms-auto">
    <li class="nav-item dropdown">
      <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
        User
      </a>
      <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
        <li><a class="dropdown-item" href="#">Login</a></li>
        <li><a class="dropdown-item" href="#">User Settings</a></li>
      </ul>
    </li>
  </ul>
</div>

全実装コード

全ての実装コードを示します。このままコピペで動作します。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
  <title>Bootstrap 5 Header Menu</title>
</head>
<body>

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Navbar</a>

    <!-- メニューアイコン -->
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <!-- メニューコンテナ -->
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav">
        <!-- ページリンク -->
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">About</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Contact</a>
        </li>
      </ul>

      <!-- ユーザードロップダウンメニュー -->
      <ul class="navbar-nav ms-auto">
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            User
          </a>
          <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="userDropdown">
            <li><a class="dropdown-item" href="#">Login</a></li>
            <li><a class="dropdown-item" href="#">User Settings</a></li>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>

</body>
</html>

-CSS