私の CSS では、「髪の色」と「髪型」を参照するクラスを作成する必要があります。
CSS の記述をより効率的にするための mixin を作成しました。
@mixin hair($hair, $colour) {
.hair-#{$colour} .#{$hair} {
background:image-url("xsppsfhair#{$hair}#{$colour}.svg") center top no-repeat,
image-url("xsppsheadgrey.svg") center top no-repeat,
image-url("xsppsbhair#{$hair}#{$colour}.svg") center top no-repeat;
}
}
@include hair(spikyboy, blonde);
@include hair(curlyafroboy, blonde);
これにより、次の CSS が生成されます。
.hair-blonde .spikyboy {
background: url('../images/xsppsfhairspikyboyblonde.svg?1348681869') center top no-repeat, url('../images/xsppsheadgrey.svg?1348834673') center top no-repeat, url('../images/xsppsbhairspikyboyblonde.svg?1348682005') center top no-repeat;
}
.hair-blonde .curlyafro {
background: url('../images/xsppsfhaircurlyafroblonde.svg?1348681869') center top no-repeat, url('../images/xsppsheadgrey.svg?1348834673') center top no-repeat, url('../images/xsppsbhaircurlyafroblonde.svg?1348682005') center top no-repeat;
}
これは素晴らしいことですが、合計 35 の髪の色と髪のスタイルの組み合わせがあるため、@include が多すぎます。
このページでは、SASS にはリストをループするために使用できる @each があると書かれています。ここにさらに例があります。ただし、これらの例は両方とも、1 つのリストのループのみを示しています。2 つのリストをループすることは可能ですか?
コードのさまざまなバリエーションを試しましたが、どれもうまくいかないようです。以下は間違いなく機能すると思いましたが、 $colour が未定義であるというエラーメッセージが表示されます。
$hairstyle: (red, blonde, ltbrown);
$haircolour: (red, blonde, ltbrown);
@each $hair in $haircolour, $colour in $haircolour {
.hair-#{$colour} .#{$hair} {
background:image-url("xsppsfhair#{$hair}#{$colour}.svg") center top no-repeat,
image-url("xsppsheadgrey.svg") center top no-repeat,
image-url("xsppsbhair#{$hair}#{$colour}.svg") center top no-repeat;
}
.girl.hair-#{$colour} #eyelash {
background: image-url("xsppseyelash#{$colour}.svg") center top no-repeat;
}
}
誰かが私が間違っていることについていくつかの指針を教えてもらえますか?