less - 有条件地根据另一个变量设置一个变量的值

标签 less less-mixins

我有一个名为 @side 的 Less 变量。我想要的是根据 @side 变量的值设置变量 @sideOpposite 。它只能取两个值:“左”或“右”。

换句话说,我需要一个等价于 JS 代码的 Less:

var side = "left",
    sideOpposite = (side === "left")? "right" : "left";

我尝试使用 when 函数来完成此操作,但据我了解,它不能那样工作,并且仅适用于 CSS 属性,不适用于变量:

when (@side = right){
  @sideOpposite: left;
}
when (@side = left){
  @sideOpposite: right;
}

最佳答案

参见 Mixin GuardsRuleset Guards (又名“CSS Guards”)用于 when 用法示例。由于您需要定义一个变量,因此您必须使用基于混合的条件(规则集不会将其变量暴露给外部范围)。例如:

.-();
.-() when (@side = right) {
    @sideOpposite: left;
}
.-() when (@side = left) {
    @sideOpposite: right;
}

(使用任何合适的混合名称代替 .-,例如 .define-opposite-side)。


还有Argument Pattern Matching它可以进一步简化为:

.-(@side); 
.-(left)  {@sideOpposite: right}
.-(right) {@sideOpposite: left}

关于less - 有条件地根据另一个变量设置一个变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48324036/

相关文章:

css - 在 LESS 中为基于基色的颜色变体创建变量列表

css - 结合 [attribute=value] 与 :nth-child()

css - 元素的 BEM 方法可能属于,并且根据 block 的不同看起来不同?

css - LESS/SASS 中的主题变量

css - Less mixin 和 CSS 选择器之间的名称冲突

css - 如何为子站点制作配色方案

css - LESS:如何将一个 mixin 作为参数传递给另一个 mixin?

css - 发送属性作为 mixin 的参数

css - LESS.js + @arguments + 跳过一个参数

css - Sublime 2 less2css 没有自动编译