Sassで次のCSS出力を達成しようとしています:
.selector1 + .selector1, .selector2 + .selector2 {
margin-top: -80px;
}
@extend 機能がその仕事をするはずです:
%sibling-selector {
& + & {
margin-top: -80px;
}
}
.selector1 {
@extend %sibling-selector;
}
.selector2 {
@extend %sibling-selector;
}
しかし、extend 関数は、extend only クラス定義 (%sibling-selector) の 2 つの親参照 (&) に問題があるようです。これは出力です:
.selector1 + .selector1, .selector2 + .selector1,
.selector1 + .selector2, .selector2 + .selector2 {
margin-top: -80px;
}
したがって、@extend 関数は、@extend 定義を使用するセレクターの組み合わせごとに兄弟セレクターを作成しています。
@extend は現在のセレクターの「スコープ」にとどまると予想されるため、アンパサンドは現在のセレクターに置き換えられます。これはバグですか、それとも機能ですか? :-)
この仕事に mixin を使用できることはわかっていますが、
@mixin sibling-selector {
& + & {
margin-top: -80px;
}
}
.selector1 {
@include sibling-selector;
}
.selector2 {
@include sibling-selector;
}
しかし、それは重複した CSS 定義を作成します:
.selector1 + .selector1 {
margin-top: -80px;
}
.selector2 + .selector2 {
margin-top: -80px;
}
Sassでそれを正しくする方法はありますか?