你不能用 CSS 做到这一点。
最简单的方法是使用变量。以下是您在 LESS 中的做法
@color: red;
.demo {
background-color: @color;
color: @color;
}
在 Sass 中也是一样的
$color: red;
.demo {
background-color: $color;
color: $color;
}
但你也可以实现你想要的力量。这是您可以在 LESS 中完成的一种方法:
.properties(@properties, @value, @i: 0) when (@i < length(@properties)) {
@property: extract(@properties, @i + 1); // get the property
@{property}: @value; // write the style
.properties(@properties, @value, (@i + 1)) // loop
}
.demo {
@props: background-color, color;
.properties(@props, red)
}
会编译成你想要的
.demo {
background-color: red;
color: red;
}
它是如何工作的?
-
.demo 调用 .properties parametric LESS mixin,传递属性(.properties 的 @properties 参数的列表(在其他关于 CSS/etc 的 SO 问题中有时称为数组);在此示例为@props)以及分配给所有这些参数的值(.properties 的@value 参数;在此示例中为red)。
- 注意
.properties 有一个计数器参数@i,默认值为0。
-
.properties 有一个 LESS CSS guard,用于检查 @i 是否小于它通过的属性数量(保存在 @properties 中)。它是! (@i 是 0,属性列表肯定至少是 1)好的,所以我们可以通过警卫。
- 获取属性名称:在列表的第一项上使用LESS's
extract()(我们需要说@i + 1,因为我们在0 开始了@i 计数器。我们也可以开始@i在1,并用when (@i < (length(@properties) + 1)) 保护,但这更难阅读)
-
最后:写样式。 interpolate the variable 将属性名称 (
@property) 保存为字符串 (@{property}),并将我们最初在 @987654357 中传递给 .properties 的值赋予它@(@value)
-
LESS loop! 再次运行
.properties,但推进计数器@i 一:.properties(staysTheSame, staysTheSame, (@i + 1))
-
.properties 将一直运行,直到遍历其 @properties 列表中的所有项目。之后,@i 将等于 length(@properties),所以我们不会通过 when (@i < length(@properties)) 守卫。
请注意,@props 可以在.test 中定义,如上所述,或者.test 可以访问它的任何地方,值也是如此。你最终可能会得到
@props: background-color, color;
@val: red;
@val2: green;
.properties {...}
.demo {
border-color: @val2;
.properties(@props, @val)
}
.demo2 {
.properties(@props, @val2)
}