本記事の目的
- bootstrapを導入したRailsのアプリケーションでCSSが適用されない現象を解決する
背景
RailsでのBootstrapの使い方を学んでいたが、Bootstrapのテンプレではない部分にCSSが反応しなくなった。
以下がコードとブラウザ上での見た目。
(Bootstrapの使い方を試しているだけなので、アクションやファイルの意図は特にない。)
<%= render 'shared/header' %>
<p class="bg-primary"><button type="button" class="close" aria-label="Close"><span aria-hidden="true">×</span></button>
</p>
<p class="bg-success">...</p>
<p class="bg-info">...</p>
<p class="bg-warning">...</p>
<p class="bg-danger">...</p>
<header id="header-wrapper"></header>
#header-wrapper {
height: 50vh;
background-color: blue;
}
@import "bootstrap";
@import "tweets.scss";
// tweet.scssは何も記述がない
@import "header.scss";
緑・青・黄・赤の線はBootstrapのテンプレで、一番上の太い赤の線は自分で用意したヘッダー。
(上に黒い線が見えるが、Google chromeのバーの部分)
1点おかしな箇所がある。
ヘッダー部分を、背景色blue、高さ50vh
で指定したのに、背景色red、高さ5vh
になってしまっている。
たしかに、最初は背景色red、高さ5vh
で設定したが、背景色blue、高さ50vh
に変更できるか試したところ、変わらなくなってしまった。
原因
SCSSファイルの読み込みの順番
上記コードの記述の通り、application.scssで、Bootstrapを一番初めに読み込んでいる。
Bootstrapでは、予めクラスやIDが用意されているので、競合したものがある場合、そちらが優先されるらしい。
よって、Bootstrapを読み込む前に、自分で用意したSCSSファイルを先に読み込んでみる。
@import "tweets.scss";
// tweet.scssは何も記述がない
@import "header.scss";
@import "bootstrap";
以上の様に読み込む順番を修正し、Google chromeで表示してみると、、、↓
ヘッダー部分がしっかり指定した様に表示された。
結論
読み込む順番を変えれば、SCSSがしっかりと適用される。
(Bootstrapについては学習し始めたばかりの為、原因は他にもあるかもしれない。)