Code Fan 49

中年で開発に目覚めたおじさんの技術ブログ。WordPress・Rails・Cloud9などなど。

【50歳からのRailsアプリ開発 vol.5】Bootstrap4でヘッダーを整える。variables.scssをパーシャルし、編集して初期設定を変更する。

はじめに

今回はせっかく導入したBootstrap4を活用してヘッダーを整えます。 Bootstrapを使って見るのは初めてなので、公式サイトを引用しつつ、それがどんなCSSとなっているかも見ていければいいかなと。

getbootstrap.com

工程

1. 作りたいデザイン。

以前にAdobe XDで作ったモックをそのままやってみようと思います。

f:id:koyacch:20180223111359p:plain

2. /app/app/views/layouts内のパーシャル、_header.html.erbの編集。

現状はこんなです。

<header>
    <h1>Name Surname</h1>
    <nav>
      <ul>
        <li>Your-menu</li>
      </ul>
    </nav>
</header>

シンプルですねー。 デザインを見ると足りないと思われるのがアイコン画像です。適当なダミーを用意しましょう。

f:id:koyacch:20180223112149p:plain

わが家のネコ一号です。 Bootstrapで円形にしますが、トリミングはスクエアになるようにRailsで仕掛けないといけないですね。

Rails上の置き場所はとりあえず

/app/assets/images/dammy-header-thumb.png

でよろしいですかね。 先々はRailsTutorialに倣ってAWSのS3サービスに置くことにします。

image_tagヘルパーを用いてパスを張ります。

<header>
    <h1>
      <%= image_tag("dammy-header-thumb.png", alt: "サムネイル") %>
      Name Surname
    </h1>
    <nav>
      <ul>
        <li>Your-menu</li>
      </ul>
    </nav>
</header>

3. Bootstrap4のヘッダーサンプルの確認

公式からNavibarのコードを参照しましょう。 最もシンプルなものを使います。

ビジュアルはこんなので。

f:id:koyacch:20180223115249p:plain

コードはこんな。

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-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 active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
  </div>
</nav>

さらにこれを`_header.html.erb'に当てはめてシンプルにしたのがこちら。

<header>
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
    <h1 class="navbar-brand">
      <%= image_tag("dammy-header-thumb.png", alt: "サムネイル", class: 'd-inline-block align-middle rounded-circle', size: '40x40') %>
      Name Surname
    </h1>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-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 active">
          <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Your-menu</a>
        </li>
      </ul>
    </div>
  </nav>
</header>

h1タグを差し込んでちょっぴりセマンティックにしました。 プレビューするとこんな。うまく適用されました。

f:id:koyacch:20180223143042p:plain

4. 微調整

sass記述で整えていきましょう。 ヘッダーに背景色をつけ、文字色などを白抜きにし、上左右の余白をつけて角丸にします。

1. レイアウトのためのブロック要素を追加。

bootstrap4の公式に従うのと、新しい要素を理解したいためなるべくhtmlにちょいちょいとクラスを加えるやり方で。

/app/app/views/layouts/_header.html.erbを編集

<div class="header-wrap container-fluid">
  <div class="header">
    <header>
      <nav class="navbar navbar-dark bg-primary navbar-expand-lg rounded">
        <h1 class="navbar-brand">
          <%= image_tag("dammy-header-thumb.png", alt: "サムネイル", class: 'd-inline-block align-middle rounded-circle', size: '40x40') %>
          Name Surname
        </h1>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse justify-content-end" id="navbarNav">
          <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="#">Your-menu</a>
            </li>
          </ul>
        </div>
      </nav>
    </header>
  </div>
</div>

bootstrap3ではお馴染みのpull-leftとかが消え去ってますね。 実はこの辺を公式を見て理解するのに一苦労。。。 色々あるので読み進めてこのプロジェクトでも使っていきます。

2. h1がつくる不必要なmarginを消し上の余白を作る。

/app/app/assets/stylesheets/application.scssを編集

.header-wrap{
  .header{
    margin-top: 10px;
    h1{
      margin: 0;
    }
  }
}

3. カラーリング

bootstrapならば$brand-primaryとか使いますが、これをapplication.scssで使うとエラーが出ます。あと変更したい場合に使う_variables.scssにあたる部分はどこになるの...?

早速ググるとapplication.scssでのimportをどうにかすると良さそうです。

github.com

1. /app/app/assets/stylesheets内に_bootstrap-custom.scssを作成

2. 下記のコードをコピぺ。

bootstrap-rubygem/_bootstrap.scss at master · twbs/bootstrap-rubygem · GitHub

3. /app/app/assets/stylesheets/application.scssのimportを修正。

@import "bootstrap" を @import 'bootstrap-custom'; と書き換える。

パーシャルで読み込みリストを読み込む感じですかね。

で、ここからです。 先ほどの_bootstrap-custom.scssの中に、

@import "bootstrap/variables";

があるので、これをコメントアウトし、代わりにローカルに_variables.scssのコードを貼り付けたパーシャルを作成、それを読み込ませます。

 @import "bootstrap-custom-variables"

_variables.scssの内容は公式をダウンロードして持ってきました。

/app/app/assets/stylesheetsの構成はこのとおり。

f:id:koyacch:20180223160611p:plain

あとは実際に色を修正します。 以下のファイルです。

/app/app/assets/stylesheets/_bootstrap-custom-variables.scss

$blue:    #2699FB !default; 

bootstrap4は、デフォルトでは$blueがprimaryとなっています。

$primary:       $blue !default;

こんなところですねーふー!

f:id:koyacch:20180223160857p:plain

終わり

いつものようにgitに保存してherokuへと。

GitHub - koyacch/myresume

Home | MyResume

みんな大好き?RailsTutorial

railstutorial.jp