SCSSのメリット
大きく分けて2つ
- ネスト記法
-
@mixin
によるCSS定義のコンポーネント化,@extend
によるCSS定義の流用
ネスト
クラス>クラス
.parent {
.child {
}
}
クラス>メディアクエリ
.grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
@media(min-width: 768px) {
grid-template-columns: repeat(4, 3fr);
}
}
クラス>:hoverなどの疑似クラス
.parent {
&:hover {
}
}
メモ:@extend
と@mixin
の違い
@extend
の特徴
- 継承対象に拒否権はない
- 継承なので、宣言箇所の基底の定義になる
@mixin
の特徴
- コンポーネント化対象は、必ず
@mixin
の宣言が必要で、利用側は、@include
での参照が必要。@extend
とは対照的。 - 記述の持ち込みなので、宣言箇所にそのままロードされる
- 上記の性質から、
@extend
よりミクロなコードの流用が可能に。
多用は
@extend
も@mixin
も多用するとヤバイ香りがする。
@extend
は継承対象に拒否権がないため、自由な変更ができなくなる可能性がある。
@mixin
は宣言が必要なものの、ミクロな流用が可能になるため、乱用されると可読性が下がる可能性もある。
実務では適切なルール化が必要と思われる。
CSSでも出来ること
変数宣言
:root {
--primary-color: #FF00FF;
}
div {
color: var(--primary-color);
}
個人的な結論
利用しようかと思います。
やはり、ネストによる可読性の向上は魅力的です。
@extend
や@mixin
はもう少し情報収集が必要かもしれません。
参考
なぜSassが必要なの?
SCSSでできること
Sass(SCSS)のmixin, extendなどまとめ
プログラマーから見た、SCSSの正しい(かもしれない)使いかた
sassのmixinとextend、ちゃんと考えて使わないとcssが地獄。
scssで@mixinを使うのと、htmlでclass指定する何が違う
CSS カスタムプロパティ (変数) の使用