XY に問題があります。の色をオーバーライドする必要がありますがa
、それを行う最適な方法を求める代わりに、奇妙な構造を発明し、なぜそれが機能しないのかを尋ねます。
問題は、色をオーバーライドするためにa
内部に入れる必要がないということです。.foo
Anは直接ではなく、自身のプロパティからa
色を取得します。.foo
a
color
デフォルトcolor
では に設定されてinherit
おり、親から自然に継承されます。したがって、a
の色をオーバーライドするには、そのcolor
プロパティをinherit
必要なものに変更します。そのために、親をセレクターに入れる必要はありません!
UPD : cimmanonが以下で私を修正したように、の色はa
親から継承されず、代わりに独自のデフォルト値を使用します。
したがって、最適なソリューションは次のようになります。
.foo {
color: blue; }
a {
color: red;
.foo.bar & {
color: green; } }
また、正確にオーバーライドしたいという事実は、.foo.bar a
物事を複雑にしすぎていることを示しています。
、、およびの.foo.bar a
4 つの異なる状況を処理する必要がある場合にのみ必要です。リンクの色ってそんなに違うの?なんで?a
.foo a
.bar a
.foo.bar a
HTML 構造をリファクタリングして、よりセマンティックなものにし、次のようなコードに満足できることは間違いありません。
a {
color: red; }
#header {
color: blue; }
.cart-item
& a {
color: green; } }
このコードでは、リンクは 2 つの異なる色しか使用できません。カートの項目は緑、その他はすべて赤です。
多くの色を使用する正当な理由がある場合は、ミックスインの使用を検討してください。
@mixin link-with-color($color: red) {
a {
color: $color; } }
#header {
@include link-with-color(blue); }
.cart-item {
@include link-with-color(green); }