「CSSの書き方」でCSSの書き方を覚えました。最初のうちは快適です。ところがページが増えてくると、「同じことを何度も書いている」「直したい場所が見つからない」と、だんだんつらくなってきます。
そのつらさを解消するために生まれたのが Sass です。いきなり書き方から入るとただの暗記になってしまうので、まず「なぜ必要になるのか」から始めます。
1. ピュアなCSSの限界
CSSを書き続けると、だいたい次の3つの壁にぶつかります。
同じ値をあちこちに書く
.button { background: #3b82f6; }
.link { color: #3b82f6; }
.badge { border: 1px solid #3b82f6; }
ブランドカラーを少し変えたい、と言われた瞬間に、ファイル中の #3b82f6 を探し回ることになります。1つ見落とせば、そこだけ古い色のまま残ります。
セレクタが長く深くなる
.card .card-header .title { font-size: 20px; }
.card .card-header .subtitle { color: #666; }
.card .card-body p { line-height: 1.8; }
同じ .card .card-header を何度も書くことになり、書くのも読むのも大変です。
1つのファイルが巨大になる
数百行のCSSから目的の場所を探すのは、それだけで一仕事です。
2. Sassで何が楽になるか
Sassは、CSSを書きやすく拡張した言語です。ピュアなCSSにできることは全部でき、そのうえで次のことができます。
変数 ― 値に名前を付けて使い回します。1か所直せば全部変わります。
$primary: #3b82f6;
.button { background: $primary; }
.link { color: $primary; }
ネスト ― 入れ子で書けるので、セレクタの重複が消えます。
.card {
.card-header {
.title { font-size: 20px; }
.subtitle { color: #666; }
}
}
@mixin ― よく使うスタイルのまとまりを部品にして、呼び出せます。
@mixin center {
display: flex;
justify-content: center;
align-items: center;
}
.hero { @include center; }
@use によるファイル分割 ― 巨大な1ファイルを役割ごとに分け、必要なものだけ読み込みます。
@use "variables";
@use "header";
@use "card";
どれも「同じことを二度書かない」「探せるようにする」ための道具だと分かると思います。
3. いちばん大事な一歩 ― ブラウザーはSassを読めない
ここがこの記事でいちばん大事なところです。ブラウザーはSassをそのまま理解できません。
ブラウザーが読めるのは、あくまで普通のCSSだけです。そのため、書いたSassを変換して普通のCSSにしてから配ります。この変換のことをコンパイルと呼びます。
style.scss (書く用のファイル)
↓ コンパイル
style.css (配る用のファイル。サーバーに置くのはこちら)
つまり、書くファイルと配るファイルが別物になるということです。これは「実際にデプロイしてみる」で触れた「ビルドしたファイルを置く」という話と同じことを指しています。
慣れないうちは、Sassを直したのに画面が変わらない、ということが必ず起きます。たいていはコンパイルを忘れているだけです。変換していないのだから、配られているCSSは古いままなのが道理です。
なお、この「書いたものを変換してから配る」という形は、次の記事のTypeScriptでもまったく同じ形で出てきます。2つを並べて読むと、変換という考え方が一気に腑に落ちます。
4. 名前だけ知っておきたい道具
Sassのほかにも、CSSを支える道具があります。名前を知っておくと、人の話についていけます。
| 名前 | 何をするもの |
|---|---|
| PostCSS | CSSを変換・補完するツール。古いブラウザー向けの書き足しなどを自動でやってくれる |
| Tailwind CSS | あらかじめ用意された小さなクラスを組み合わせて書くアプローチ。CSSファイルをほとんど書かずに済ませる |
考え方は違いますが、「素のCSSをそのまま書き続けるのはつらい」という出発点は同じです。
まとめ
- ピュアなCSSは、規模が増えると繰り返しと巨大化でつらくなる。
- Sassは変数・ネスト・@mixin・ファイル分割でそれを解決する。
- ブラウザーはSassを読めないので、コンパイルしてCSSにしてから配る。
- この「変換してから配る」形は、次のTypeScriptとまったく同じ。
- 前提となる記事:「CSSの書き方」
- 次の記事:「JavaScriptに型をつける(TypeScript)」
- 配る話:「実際にデプロイしてみる」