跟我一起了解less(3):判断和循环

官网的api中,判断和循环是page的后面才被说明的,可能官方认为它们两个也属于“混合”。

但为了更好的学习less,我把它拿到了这章先来了解一下。

注:例子截图是转换成css的语句

 

1、判断:官网称作Mixin Guards

(1)语法规则:when ( 布尔值 ) { 内容 }

//用法一:when放在函数后面
.change(@color) when (lightness(@color) >= 50%) { //lightness()是less的一个内部函数,根据颜色返回亮度百分比
   
}
.change(@color) when (lightness(@color) < 50%) {
    background-color: @color + #333;
}
.change(@color) { //.change()是自定义的函数
    border-color: @color;
}
.box-part1 {
    width:50px;
    height:50px;
    border:1px solid;
    .change(#ddd); //调用.change()函数
}
.box-part2 {
    width:50px;
    height:50px;
    border:1px solid;
    .change(#555);
}

//用法二:when放在选择器后面
@style: 1;
.box-part3 when (@style = 1) {
    width:50px;
    height:50px;
    border:1px solid #33FF66;    
}
.box-part3 when (@style = 2) {
    width:50px;
    height:50px;
    border:1px solid #FF5500;    
}

//用法三:单独使用when进行判断,此时需要在when前加上“&”符号
.box-part4 {
    width:50px;
    height:50px;
   
}
@style: 1;
&when (@style = 1) { // “& when”中间留有空格,这样也是可以的
    .box-part4 {
        background-color:#FF5500;
    }
}

 

(2)判断

布尔值:less中任何非true的值都是false,如 @aaa:"1"、#012 等等

条件:>、>=、<=、<、= (注意:判断等于是一个等号并非js中的双等号)

逻辑:and、,、not 来表示与或非

//用法四:判断条件例子
@s1:11%;
@c1:#444; //非数值类型的只能用“=”来判断,包括颜色,如果用其他的判断都返回false
& when (@s1 > 10%) and (@c1 > #444 ) { //与
    .box-part5&:before{content:"and";}
}
& when (@s1 > 10%) , (@c1 > #444 ) { //或,注意less用逗号代替
    .box-part5&:before{content:"or";}
}
& when not (@c1 > #444 ) { //非
    .box-part5&:before{content:"not";}
}
.box-part5&:before{
    width:50px;
    height:50px;
}

 

(3)判断函数

判断函数只返回true和false,相对比较简单,看上图中的函数名就能知道含义。

 

(4)模拟else分支

按照官网截图的意思,是需要用到default()函数来模拟else的情况

//用法五:这里我做了个实验,发现default()函数只能在类似于.aaa()的函数式中使用,单独或者在选择器的后面接when使用都会报错
@s2:9%;
.aaa() when (@s2 > 10%) {.box-part6&:before {content:"s2>10%";}}
.aaa() when (default()) {.box-part6&:before {content:"others";}}
.aaa() when (@s2 < 6%) {.box-part6&:before {content:"s2<6%";}}
.aaa();

 


 

2、循环:less本身没有循环的语法,但是函数可以递归来调用,这样就可以模拟循环

//用法六:模拟for循环
.for(@i,@cor) when(@i <= 6) { //@i、@cor循环的初值
    .for(@i + 1,@cor + #222); //@i + 1 相当于"++i"
    .box-part@{i} {
        width:50px;
        height:50px;
       
    }
}
.for(1,#F51);

 

 

to be continue ......

posted @ 2017-05-10 14:52  冉夜  阅读(1739)  评论(0编辑  收藏  举报