Вариант использования довольно близок к различным "тематическим" вопросам, таким как:
То есть существует множество возможных решений, каждое из которых имеет свои плюсы и минусы в зависимости от других деталей и целей вашего реального проекта.
---
Принимая ваш "ожидаемый результат" какесть хорошее начало - написать миксин, который обрабатывает повторяющийся код, например:
# 1
.a .b {
.d .e {
font-size: 2em;
color: black;
}
.-(@color) {
.@{color} .d .e {color: @color}
}
.-(red);
.-(yellow);
.-(green);
// etc.
}
---
С помощью некоторого обмана и хакерства мы можем избавиться от .d .e
повторений, но я сомневаюсь, что повышенная сложность и потенциальные проблемы того стоят:
# 2
.a .b {
.themed(~'.d .e', {
font-size: 2em;
color: black;
}, {
color: @color;
});
}
// .....................
// generic "theme" impl.
.themed(@selector, @default, @colored) {
.-(default);
.-(red);
.-(yellow);
.-(green);
.-(@color) {
.@{color} @{selector}
when (iscolor(@color)) {@colored();}
@{selector}
when not (iscolor(@color)) {@default();}
}
}
---
Чтобы проиллюстрировать, что варианты возможной реализации, чтобы добраться до примера "ожидаемого результата", почти бесконечны и mОстальное зависит от того, какие функции Less вы знакомы, и какие функции вы можете / хотите / хотели бы использовать, вот немного более современный пример "Less Less" с использованием более "обычной" / "основной" логики (многие люди предпочтут использовать;REQ.Менее 3.x или выше):
# 3
.a .b {
.d .e {
font-size: 2em;
color: black;
}
each(red yellow green, {
.@{value} .d .e {color: @value}
});
}
(хотя то же самое уже было предложено в другом ответе).
---
Говоря о .color
элементах в середине селектора, подумайте, действительно ли ваш HTML действительно этого требует.Т.е. вам действительно понадобятся такие сверхспецифичные селекторы, как:
.a .b .yellow .d .e
,
.x .y .yellow .d .e
,
.p .q .yellow .d .e
,
.a .b .yellow .foo .e
,
, имеющие другой цветзначения?
Разве не достаточно набора вроде .yellow .e {color: yellow}
или чего-то еще?