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

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

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

<img width="957" alt="スクリーンショット 2019-10-24 11.24.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39782/e9c60716-58d3-a371-0875-c289f7539664.png">


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

<img width="463" alt="スクリーンショット 2019-10-24 12.56.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39782/40f76d9e-9368-ddff-cb1a-83ae737e2448.png">

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

こんな感じで↓
<img width="464" alt="スクリーンショット 2019-10-24 11.24.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39782/c67f040a-f2b4-765a-d935-49630911dab2.png">
拡げたとき↓
<img width="463" alt="スクリーンショット 2019-10-24 11.24.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39782/44dca362-d096-350c-1aab-d3a058a7cc97.png">


そのやり方の紹介。

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

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

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

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

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

```html
<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の場合、以下のように表示が崩れてしまいました。

<img width="463" alt="スクリーンショット 2019-10-24 12.23.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39782/b49ae1b8-d641-8a23-1c8e-3a8d594a2dff.png">


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

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

```html
<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>
```

#### 参考

- https://stackoverflow.com/questions/50099647/bootstrap-4-navbar-keep-section-on-right-even-when-toggled
- https://stackoverflow.com/questions/57411760/bootstrap-dropdown-menu-expands-fixed-top-navbar-height