我有一个页面模板,在body
元素上有一个品牌类:
<body class="brand-africa">
<h1>Africa</h1>
</body>
使用以下Less,我可以使用变量作为品牌颜色并将其应用于CSS选择器的color
:
@brand-default: #649d84;
@brand-africa: #df6f20;
@brand-nz: #444;
.brand-color {
.brand-default & {
color: @brand-default;
}
.brand-africa & {
color: @brand-africa;
}
.brand-nz & {
color: @brand-nz;
}
}
h1 {
.brand-color;
}
这很好用,但有时我想将颜色应用到另一个CSS声明 - 例如background-color
,并且要使用上面的代码执行此操作,我需要将.brand-color
mixin复制到改为申请background-color
。
理想情况下,我希望mixin返回一个变量 - 我知道这是可能的,但我无法弄清楚如何使用classname来确定返回的值。
答案 0 :(得分:2)
嗯,不,你不能使用类名来确定变量或返回值。所以它通常是反向完成的,例如:
@brand-default: #649d84;
@brand-africa: #df6f20;
@brand-nz: #444444;
h1 {
.brand-colors();
}
h2 {
.brand-colors(background-color);
}
.brand-colors(@property: color) {
.color(default);
.color(africa);
.color(nz);
.color(@name) {
.brand-@{name} & {
@value: 'brand-@{name}';
@{property}: @@value;
}
}
}
或者像这样:
@brand-default: #649d84;
@brand-africa: #df6f20;
@brand-nz: #444444;
h1 {
.brand-colors({
color: @color;
});
}
h2 {
.brand-colors({
background-color: @color;
});
}
.brand-colors(@style) {
.brand-color(default);
.brand-color(africa);
.brand-color(nz);
}
.brand-color(@name) {
.brand-@{name} & {
@value: ~'brand-@{name}';
@color: @@value;
@style();
}
}
或者甚至喜欢这样:
.brand(default) {@{color}: #649d84}
.brand(africa) {@{color}: #df6f20}
.brand(nz) {@{color}: #444444}
h1 {
.brand-colors();
}
h2 {
.brand-colors(background-color);
}
.brand-colors(@color: color) {
.-(default);
.-(africa);
.-(nz);
.-(@name) {
.brand-@{name} & {
.brand(@name);
}
}
}
或介于两者之间。或者......哦等等,这个东西有各种各样的方法(包括各种组合),例如参见:
通常基于列表/数组/循环的方法更紧凑,但我个人更喜欢像这样的哑巴:
.themed({
h1 {
color: @color;
}
h2 {
background-color: @color;
}
});
.themed(@styles) {
.-(default, #649d84);
.-(africa, #df6f20);
.-(nz, #444444);
.-(@name, @color) {
.brand-@{name} {
@styles();
}
}
}