Less 嵌套

Less 中的嵌套规则允许在一个选择器中嵌套另一个选择器,这样可以使得代码看起来一目了然,后期维护也方便。

嵌套的使用

例如上面的 CSS 代码使用 Less 语言来写:

.title-box{
font-size: 14px;
p{
line-height: 25px;
span{
color: #ccc;
}
}
}

这样整体看起来是不是更直观一些,一层套一层。但是注意哟,一般我们不会嵌套太多层,嵌套的层数越多,性能就越差,建议一般嵌套三层左右。

&符号的使用

在我们使用嵌套规则时,要特别注意 & 符号的使用,& 符号可以表示对父选择器的引用。

在一个内层选择器的前面,如果没有 & 符号,则这个内层选择器会被解析为父选择器的后代。如果内层选择器前面有一个 & 符号,则内层选择器会被解析为父选择器自身或父选择器的伪类。

示例:

例如我们看下面这段代码:

.task-item {
margin-bottom: 10px;
.task-item__container {
overflow: auto;
height: 500px;
padding: 10px 10px;
}
}

编译成 CSS 代码:

.task-item{
margin-bottom: 10px;
}

.task-item task-item__container {
overflow: auto;
height: 500px;
padding: 10px 10px;
}

可以看到,标签选择器 a 前面没有加 & 符号,所以这个标签选择器 a 被解析为 .xkd 选择器的后代。

示例:

再来看一下内层选择器前面加 & 符号:

.task-item {
margin-bottom: 10px;
&__container {
overflow: auto;
height: 500px;
padding: 10px 10px;
}
&:hover {
height: 800px;
}
}

编译成 CSS 代码:

.task-item {
margin-bottom: 10px;
}
.task-item__container {
overflow: auto;
height: 500px;
padding: 10px 10px;
}
task-item:hover {
height: 800px;
}

上面代码中,__container 前面添加了一个 & 符号,这个符号就表示父选择器本身,所以解析后为.task-item__container。当然 :hover 伪类前面的 & 符号也是同理。

重复引用父选择器

通过使用 & 符号,可以重复引用父类选择器。

示例:

例如下面这段 Less 代码,如果我们希望每个选择器名的前缀都为 task-item,可以像下面这样简写:

.task-item{
&-one{
font-size: 14px;
}
&-two{
font-size: 16px;
}
&-three{
font-size: 18px;
}
}

编译为 CSS 代码:

.task-item-one {
font-size: 14px;
}
.task-item-two {
font-size: 16px;
}
.task-item-three {
font-size: 18px;
}

除此之外,还可以同时使用多个 & 符号,并使用其他运算符连接起来:

.item{
&&-one{
font-size: 14px;
}
&, &-two{
font-size: 16px;
}
&, &er{
font-size: 18px;
}
}
1234567891011

编译为 CSS 代码:

.item.item-one {
font-size: 14px;
}
.item,
.item-two {
font-size: 16px;
}
.item,
.itemer {
font-size: 18px;
}

更改选择器顺序

什么是更改选择器顺序呢,就是有些时候可能需要将内层选择器放在父选择器之前,此时我们可以将 & 放在当前选择器后面来完成。

示例:

例如下面这段代码,我们希望 .item 选择器位于 .nav 选择器之前,可以在 .item 选择器的后面加一个 & 符号:

.nav{
font-size: 14px;
.item &{
color: #fff;
}
}

编译为 CSS 代码:

.nav {
font-size: 14px;
}
.item .nav {
color: #fff;
}

可以看到,编译之后的 CSS 代码中 .item 选择器位于 .nav 选择器前面。