当须要根据表达式,而不是参数的值或数量进行匹配时,条件表达式(Guards)就显得很是有用。若是你熟悉函数式编程的话,对条件表达式也不会陌生。html
为了尽量地接近CSS的语言结构,Less使用关键字 when 而不是 if/else来实现条件判断,由于 when 已经在CSS的 @media query 特性中被定义。编程
表达式中能够使用比较运算符、逻辑运算符、或检查函数来进行条件判断。less
一、比较运算符函数式编程
Less包含五个比较运算符:<、>、<=、>=、=,能够使用比较运算符(=)来比较数字,字符串、标识符等,而其他的运算符只能与数字一块儿使用。如,如下Less代码:函数
.mixin (@a) when (@a = 20px){
color:red;
}
.mixin (@a) when (@a < 20px){
color:blue;
}
.mixin (@a) {
font-size: @a;
}
h2 {
.mixin(20px)
}
编译后的CSS代码为:url
h2 {
color: red;
font-size: 20px;
}
此外,还能够使用关键字true,它表示布尔真,如下两个mixin是相同的:spa
.truth (@a) when (@a) { ... }
.truth (@a) when (@a = true) { ... }
在Less中,只有 true 表示布尔真,关键字true之外的任何值,都被视为布尔假。如:code
.class {
.truth(40); // 不会匹配以上任何定义
}
Less中,Guards能够是多个表达式,多个表达式之间,使用逗号‘,’分隔。若是其中任意一个表达式的结果为 true,则匹配成功,这就至关于“或”的关系。如:htm
.mixin (@a) when (@a < -10), (@a > 10) {
width: 100px;
}
上述Guards就表示: [-10,10] 之间的值将匹配失败,其他均匹配成功。好比如下调用,.class1 和 .class3 会匹配成功,.class2 将匹配失败:字符串
.class1 {
.mixin(-20);
}
.class2 {
.mixin(0);
}
.class3 {
.mixin(20);
}
编译后的CSS代码为:
.class1 {
width: 100px;
}
.class3 {
width: 100px;
}
二、逻辑运算符
Less中,Guards也能够使用 and 和 not 来进行逻辑运算。如,如下Less代码:
.mixin (@a) when (@a > 50%) and (@a > 5px){
font-size: 14px;
}
.mixin (@a) when not (@a < 50%) and not (@a < 5px){
font-size: 20px;
}
.mixin (@a) {
color: @a;
}
.class1 {
.mixin(#FF0000)
}
.class2 {
.mixin(#555)
}
编译后的CSS代码为:
.class1 {
color: #ff0000;
}
.class2 {
color: #555555;
}
三、检查函数
若是想基于值的类型、或特定的单位进行匹配,就能够使用 is* 函数。如:
.mixin (@a, @b: 0) when (isnumber(@a)) { ... }
.mixin (@a, @b: black) when (iscolor(@b) and (@a > 0)) { ... }
如下是常见的类型检查函数: