なんと言えば良いのかわからなかったので、取り急ぎのタイトルですが伝わって。
Sassで記述する時、親クラスに子クラスを並列指定して、もしくは特定の要素タグの時だけ挙動を少しだけ変えたい時、ありませんか。私はよくあります。
が、すぐに記述方法を忘れてコンパイラ様に怒られます。
- 求める結果
-
.root-class { font-size: 1rem; color: #666; } h1.root-class { font-size: 2rem; }
- コンパイラ様に怒られる記述方法
-
.root-class { font-size: 1rem; color: #666; h1& { //error font-size: 2rem; } }
h1と&を離して書けばコンパイラ様には怒られませんが、結果はh1 .root-class
という別物に……。
この場合の正解の記述方法のひとつは
-
.root-class { font-size: 1rem; color: #666; @at-root { h1#{&} { font-size: 2rem; } } }
です。
1. #{}
(インターポレーション)を使う
変数($foo)をクラス名とかにつかう時につかうアレです。これに&を入れればコンパイラ様に怒られません。
しかしこれだけだと、結果は
.root-class h1.root-class { font-size: 2rem; }
という、求めているものではないものになってしまいます。当たり前ですが。
2. @at-root{}
のネスト内に書く
@at-rootは記述したところより上のネストをrootまですっ飛ばして(消して)くれるらしいです。詳細はまだ調べていません。
これにより、ようやく求めていたものが出力されます。やったね!
「正解の記述方法のひとつは」と書きましたが、不勉強により他の記述方法はわかりません。もっとスマートな方法をご存知の方、お待ちしております。