pontz_rwのブログ

プログラミング等の備忘録

Ruby on Rails Tutorial のナビゲーションバーを Bootstrap 4 で作る

Ruby on Rails Tutorialの 5.1.1 ナビゲーション では、Bootstrap 3 を用いてナビゲーションバーを作成しています。2018年12月現在、Bootstrap 4 が最新となります。

バージョンの違いにより、ナビゲーションバーがうまく表示されないため、以下では、Bootstrap 4 を用いて、それっぽいナビゲーションバーをhtmlで作成していきます。

作成準備

公式ホームページの Starter template を使い、雛型を作成します。

  • index.html
<!doctype html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Ruby on Rails Tutorial</title>
  </head>
  <body>
    <header>
      <nav>
        <a id="logo">sample app</a>
        <ul>
          <li><a href="#">Home</a></li>
          <li><a href="#">Help</a></li>
          <li><a href="#">Log in</a></li>
        </ul>
      </nav>
    </header>
    <h1>Hello, world!</h1>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
  </body>
</html>

作成開始

装飾していきます。

navタグにクラスを指定

まず、ナビゲーションバーには、.navbarnavbar-expand を設定します。

次に、明るい背景色 .navbar-light か、暗い背景色 .navbar-dark のどちらかを設定し、背景色として .bg-* を設定します。

そして、画面上部に固定するために、.fixed-top を設定します。

<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
  ...
</nav>

Hello, world! がナビゲーションバーで隠れてしまうので、やや強引ですが、余白を設定します。

<body class="mt-5 pt-5">
  ...
</body>

ロゴ

.navbar-brand を設定します。

大文字にするために .text-uppercase を、太字にするために .font-weight-bold を設定しています。

<a class="navbar-brand text-uppercase font-weight-bold" href="#">sample app</a>

ナビゲーションコンポーネント

ul.navbar-navli.nav-itema.nav-link をそれぞれ設定します。

<ul class="navbar-nav">
  <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
  <li class="nav-item"><a class="nav-link" href="#">Help</a></li>
  <li class="nav-item"><a class="nav-link" href="#">Log in</a></li>
</ul>

ロゴとナビゲーションコンポーネントとの間にスペースを空ける

フレックスユーティリティクラスを使用することで、ナビゲーションの右寄せ .justify-content-end や中央寄せ .justify-content-center などができます。

<nav class="navbar navbar-expand navbar-dark fixed-top bg-dark justify-content-between">
  ...
</nav>

完成

以上で完成となります。

  • index.html
<!doctype html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Ruby on Rails Tutorial</title>
  </head>
  <body class="mt-5 pt-5">
    <header>
      <nav class="navbar navbar-expand navbar-dark fixed-top bg-dark justify-content-between">
        <a class="navbar-brand text-uppercase font-weight-bold" href="#">sample app</a>
        <ul class="navbar-nav">
          <li class="nav-item"><a class="nav-link" href="#">Home</a></li>
          <li class="nav-item"><a class="nav-link" href="#">Help</a></li>
          <li class="nav-item"><a class="nav-link" href="#">Log in</a></li>
        </ul>
      </nav>
    </header>
    <h1>Hello, world!</h1>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
  </body>
</html>