Less 有条件地设置一个变量';s值基于另一个

Less 有条件地设置一个变量';s值基于另一个,less,less-mixins,Less,Less Mixins,我有一个较小的变量,名为@side。我要做的是根据@side变量的值设置变量@side contract。它只能接受两个值:“left”或“right” 换句话说,我需要一个与JS代码相对应的代码: var side = "left", sideOpposite = (side === "left")? "right" : "left"; 我曾尝试使用when函数来实现这一点,但据我所知,它不是这样工作的,只适用于CSS属性,而不适用于变量: when (@side = right){

我有一个较小的变量,名为
@side
。我要做的是根据
@side
变量的值设置变量
@side contract
。它只能接受两个值:“left”或“right”

换句话说,我需要一个与JS代码相对应的代码:

var side = "left",
    sideOpposite = (side === "left")? "right" : "left";
我曾尝试使用
when
函数来实现这一点,但据我所知,它不是这样工作的,只适用于CSS属性,而不适用于变量:

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

我不知道我是否理解你想做什么,但从我对你的问题的了解来看,你可以通过混音来做到这一点。参见示例

//This is the mixin with default value
.side(@leftORoposite: left) { float: @leftORoposite ;} 
当您需要将此mixin与
.side(left)
一起使用时,或者当您需要将其与
.side(right)
一起使用时,请调用此mixin,有关
时的用法示例,请参见和(也称为“CSS卫士”)。因为您需要定义一个变量,所以必须使用基于mixin的条件(规则集不会将其变量公开给外部范围)。例如:

(使用任何合适的mixin名称,而不是
-
,例如
。定义相反的一面


使用它可以进一步简化为:

.-(@side); 
.-(left)  {@sideOpposite: right}
.-(right) {@sideOpposite: left}
您可以利用的帮助来允许条件混合

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

工作得很有魅力。非常感谢。这似乎与OP的需求不匹配。OP需要类似于三元运算符的行为。
.mixin (@side; @sideOpposite) when (@side = right) { @sideOpposite: left }
.mixin (@side; @sideOpposite) when (@side = left) { @sideOpposite: right }