Css 在条件内设置变量
我需要根据条件设置较少的变量Css 在条件内设置变量,css,less,Css,Less,我需要根据条件设置较少的变量 @body-background-color: black; @post-background-color: white; @post-stacked-effect: true; .content-padding() when ( @body-background-color = @post-background-color ) and not (@post-stacked-effect = true){ @content-padding: 0px; }
@body-background-color: black;
@post-background-color: white;
@post-stacked-effect: true;
.content-padding() when ( @body-background-color = @post-background-color ) and not (@post-stacked-effect = true){
@content-padding: 0px;
}
.content-padding() when not (@body-background-color = @post-background-color), (@post-stacked-effect = true) {
@content-padding: 20px;
}
body {
.content-padding();
content: "@{post-stacked-effect}";
padding: @content-padding;
background-color: @body-background-color;
.post {
background-color: @post-background-color;
}
.some-math {
margin: -@content-padding -@content-padding @content-padding;
}
}
@内容填充始终为0px。你能帮我解决这个问题吗?这是无PHP编译器中的一个错误。我必须做PHP的变通方法 当我为编译准备变量时,我添加了一个函数,该函数在php中计算填充,并将其注入更少的内存中 它在PHP中只有一行
$lessvars["content-padding"] =
( $lessvars["body-background-color"] == $lessvars["post-background-color"] &&
!filter_var($lessvars["post-stacked-effect"], FILTER_VALIDATE_BOOLEAN) )
? "0px" : "20px";
您正在使用
'when'
保护的mixin创建一个新的作用域,它在外部不可见
所以这甚至不应该起作用,当然也不是一个bug
您可以改为创建一个函数并从“when”调用该函数
@body-background-color: black;
@post-background-color: white;
@post-stacked-effect: true;
body {
.padding(@padding)
{
padding: @padding;
.some-math
{
margin: @padding + 2em;
}
}
& when ( @body-background-color = @post-background-color ) and not (@post-stacked-effect = true){
.padding(0px);
}
& when not (@body-background-color = @post-background-color), (@post-stacked-effect = true) {
.padding(20px);
}
}
我删除了不相关的css,并将其重命名,因为stackoverflow将函数名的连字符格式设置得很奇怪。当我将代码粘贴到中时,我得到了20px。卫兵们似乎在按预期工作。也许你应该详细说明你试图设置的条件。我发现它在JS版本中工作,但在php中不工作。我使用的是PHP编译器,有这个问题。可以看出,您似乎发现了您的问题。您使用的编译器与无基编译器的设计不同。据我所知,LESS允许mixin将声明块中的变量设置回1.1版。然而,PHP编译器似乎不允许这样做。但是,您可以利用PHP接口在PHP中执行检查,并在PHP中设置变量,然后再从PHP组合LESS代码。如前所述。答案和评论只是LESSHPP的混合变量实现范围不正确。