Я не знаю, может ли Сасс это сделать, но это не помешает спросить.Sass Mixin: Обратный звонок или замена @content
Проблема
В принципе у меня есть три цвета шаблона, которые повторяются в нескольких разделах приложения, как blue
green
, и orange
. Иногда то, что изменения является background-color
или border-color
компонента ... Иногда текст color
из дочернего элемента и т.д.
То, что я думал?
1. Замените шаблон строки внутри содержимого.
.my-class {
@include colorize {
background-color: _COLOR_;
.button {
border-color: _COLOR_;
color: _COLOR_;
}
}
}
2. Предоставление переменной обратного вызова для @content
.
// This is just a concept, IT DOESN'T WORK.
@mixin colorize {
$colors: blue, green, orange;
@each $colors in $color {
// ...
@content($color); // <-- The Magic?!
// ...
}
}
// Usage
@include colorize {
background-color: $color;
}
Я пытался реализовать такие решения, но без успеха.
Вместо этого ...
см ниже моей обходного, чтобы получить его частично рабочий:
@mixin colorize($properties) {
$colors: blue, green, orange;
@for $index from 1 through length($colors) {
&:nth-child(#{length($colors)}n+#{$index}) {
@each $property in $properties {
#{$property}: #{nth($colors, $index)};
}
}
}
}
Вы можете использовать этот подмешать таким образом:
.some-class {
@include colorize(background-color);
}
Что придет вывод:
.some-class:nth-child(3n+1) {
background-color: blue;
}
.some-class:nth-child(3n+2) {
background-color: green;
}
.some-class:nth-child(3n+3) {
background-color: orange;
}
Проблема? Ну, я не могу использовать его с дочерними селекторами.
На основе приведенной выше информации, есть какая-то магия решение для этого случая?
похоже, что переписать без использования «@content», но возможно ли это с помощью «@content»? – llamerr
https://github.com/sass/sass/issues/871 – llamerr