Bootstrap4で画面幅が小さくなってもNavbarの一部を右寄せする


ここでは例として"Username"という要素を右寄せします。

右寄せにするだけならmr-autoクラスなどを使えばできます。
こちらの記事を参照。(https://qiita.com/hmmrjn/items/6f5fd65ab8c58cd7a6d6)

この場合、画面幅を小さくしてトグルボタンを拡げたとき"Username"要素もその中に入ります。

これはこれで良いですが、画面幅が小さい時でも要素を右寄せにしたままにしたい場合もあるかとおもいます。

こんな感じで↓

拡げたとき↓

そのやり方の紹介。

画面幅が小さくても右寄せ

ポイントは要素の順番で、navタグの中で

トグルボタン -> ロゴ -> 右寄せにしたい要素 -> collapse navbar-collapseクラスで囲まれた要素

の順で記述することです。

そして右寄せにしたい要素にorder-lg-lastクラスを追加すればOKです。

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container">
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <a class="navbar-brand" href="#">Navbar</a>

    <div class="navbar-nav order-lg-last">
      <a class="nav-link" href="#">Username</a>
    </div>

    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav">
        <li class="nav-item active">
          <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Link</a>
        </li>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Dropdown
          </a>
          <div class="dropdown-menu" aria-labelledby="navbarDropdown">
            <a class="dropdown-item" href="#">Action</a>
            <a class="dropdown-item" href="#">Another action</a>
            <div class="dropdown-divider"></div>
            <a class="dropdown-item" href="#">Something else here</a>
          </div>
        </li>
        <li class="nav-item">
          <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
        </li>
      </ul>
    </div>
  </div>
</nav>

要素が複数の場合

ちなみに右寄せにしたい要素が複数の場合、flex-rowクラスを追加します。(要素が多すぎると表示が崩れます)

navbar-navクラスのリストを使わない場合はd-flexも必要かも。

Dropdownの場合

また右寄せにしたい要素がDropdownの場合、以下のように表示が崩れてしまいました。

dropdown-menuクラスのある要素にposition-absoluteクラスを追加すると直ります。

右寄せしたい要素がDropdownを使っていて複数の場合のコード例(一部)

<ul class="navbar-nav order-lg-last flex-row">
  <li class="nav-item mr-2">
    <a class="nav-link" href="#">Settings</a>
  </li>
  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
      Username
    </a>
    <div class="dropdown-menu dropdown-menu-right position-absolute" aria-labelledby="navbarDropdown">
      <a class="dropdown-item" href="#">Action</a>
      <a class="dropdown-item" href="#">Another action</a>
      <div class="dropdown-divider"></div>
      <a class="dropdown-item" href="#">Something else here</a>
    </div>
  </li>
</ul>

参考