跟我一起了解less(7):伪类、&连接符、属性连接

说到&符号,前几章的介绍中都已经遇到过了,比如说.box-part1&:before{}。

 

先说说伪类,由于伪类在css中使用“:”(冒号)来引用的,而“:”(冒号)在less是用来属性和变量赋值的特殊符号,所以less给出了一个新的策略“&”符号。

而伪类在css中是附属在某个实际存在的模块上的类,也可以说是和这个模块连接起来的类,所以用&连接符也是最恰当不过的了。

 

下面通过几个例子,来详细介绍一下&连接符的用处:

1、伪类的连接

.box-part1 {
    width:50px;
    height:50px;
    line-height: 50px;
    border-radius:1em;
    color:burlywood;
    background:blueviolet;
    transition: 1.5s ease transform;
}
.box-part1 { //作用域的方式进行连接
    @content:"before";
    &:before { //&和:之间不能有空格
        content:@content;
    }
}
.box-part1&:hover{ //同一级连接
    transform:rotate(360deg);
}

 

下面是演示结果:

 

2、when的连接
.changeColor(...) {
    @argumentsCnt : length(@arguments);
    & when (@argumentsCnt = 0) , (@argumentsCnt > 1) { 
        background:sandybrown;
    }
    & when (@argumentsCnt = 1) {//&和when之间可以有空格,也可以没有空格
        background:@arguments;
    }
}
.box-part2 {
    .box-part1; //这里我沿用上面例子的样式
    .changeColor(red); //通过when函数指定颜色
}
.box-part3 {
    .box-part1;
    .changeColor(); //通过when函数使用默认颜色
}

 

这是演示结果:

 

 

3、变量或单词来组合选择器名

@selector-header:box-part;
.@{selector-header} { //分组选择
    &:before { //你可以通过这个选择器连接伪类
        content:"box-part";
    }
    &1 { //你还可以以这个选择器名为前缀去组装新的选择器
        background:#F0F;
    }
    &2 { //如果选择器的名字很长,且很有规律,只需要写一遍就行了
        background:#E1E;
    }
}

.box-part6 { //并列选择
    #box6- { //逗号有并列和或者的含义,这样就可以并列连接多个有相同前缀或相同父级的选择器了
        &sub1 , &sub2 { //如果选择器的名字很长,这样会很方便
            width:10px;
            height:10px;
            background:red;
        }
    }
}

#box6-sub3 { //逆向选择
    .box-part6 & { //这样看似是#box6-sub3包含.box-part6,其实正相反,而是.box-part6包含#box6-sub3
        width:25px;
        height:25px;
        background:blue;
    }
}

#box7-sub1,#box7-sub2,#box7-sub3 { //自动组合所有选择
    &  &-animi {color:black;} //上面并列的三个选择器会有9种组合
}

所以从上个例子可以看出&符号所代表的是它之前所有的内容。

 

4、变量或单词来组合属性名

.prefixed(@property,@value) {
    -webkit-@{property}: @value; //通过连接属性名解决不同浏览器的兼容问题
    -moz-@{property}: @value; //但是属性的连接不需要&符号,这点要注意
    -ms-@{property}: @value;
    -o-@{property}: @value;
    @{property}: @value;
}
.box-part1 {
    width:50px;
    height:50px;
    background:blueviolet;
    .prefixed(border-radius, 1em);
    .prefixed(animation-duration, 1s);
    .prefixed(animation-name, _part_);
    .prefixed(animation-iteration-count, infinite);
    .prefixed(animation-timing-function, linear);
}
@keyframes _part_ {
    100%{.prefixed(transform,rotate(360deg));}
}

注意:要通过变量来连接属性名,不需要任何符号,包括&符号,但变量要加{}大括号包裹起来

 

5、属性值的合并

.box-part2 {
    width:50px;
    height:50px;
    border+_:1px solid; //通过“+_”或“+”符号开启连接
}
.box-part3 {
    .box-part2;
    border+_:red; //同样通过“+_”或“+”符号进行合并
}

这里说明一下:如果想要执行属性值的合并,第一个被合并的属性就需要加上“+_”合并符号。

 

to be continue ......

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