Sassの@extend
を駆使すると出力されるCSSを効率化することができます。ただ@extend
は様々な場所に書かれている複数のセレクタをなんとなくまとめるものなので、CSSのカスケーディング順位も入れ替わってしまう。あまりハマることは無さそう……なんですけど、僕はばっちりハマりました……。
簡略化したハマるコードがうまく思いつかなかったので、実際にハマったコードをちょっと略して書きます。具体的にはMobile firstでMedia Queriesを使ったケース。
.column {
@media screen and (min-width: 768px) {
padding: 0;
display: block;
float: left;
width: 50%;
}
}
.news {
padding-left: 40px;
display: list-item;
@extend .column;
}
更新情報が含まれる.news
の表示をブラウザの幅が狭い時はリスト、広い時はカラム分けに切り替えようという意図で、定義済みのカラムを@extend
で利用して以上のように書いた。ベースとして単純なカラム(やグリッド)を定義しておいて、特定のパーツで少し追加でスタイルを書くというような使い方で、あんまり変でもないと思います。
@media screen and (min-width: 768px) {
.column,
.news {
padding: 0;
display: block;
float: left;
width: 50% }
}
.news {
padding-left: 40px;
display: list-item }
出力CSSはこうなるので、@media
ブロックのルールよりも後に書かれた普通のルールが優先される。つまり、ブラウザ幅が広い時にも左のマージンとリスト表示のままで、それに加えてfloat
されるということになってしまう。
サンプルが悪くてエッジケースにしか見えないんだけど、@extend
を使うとSassのコードを書いた順序の通りにカスケーディング順位が決まるわけではなくなってしまうことには注意が必要なんじゃないかと。CSSに慣れ親しんでいる人程ハマりそう。
ゆるい文体書けなくなってる。とか意識するのが悪そうなのでもっと適当な感じで書く。あ、あと年男です、祝え。