在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。
Less 内层选择器前面的 & 符号就表示对父选择器的引用。在一个内层选择器的前面,如果没有 & 符号,则它被解析为父选择器的后代。如果有 & 符号,它就被解析为父元素自身或父元素的伪类。同时用在选择器中的 & 还可以反转嵌套的顺序并且可以应用到多个类名上。
用于当前选择器的伪类或者伪元素,如 :hover、:focus、:after、:before 等
.demo { color: #333; background: #F0F0F0; &:after { content: '.'; display: block; background-color: aquamarine; } }
编译 less,输出的 CSS 如下:
.demo { color: #333; background: #F0F0F0; } .demo:after { content: '.'; display: block; background-color: aquamarine; }
作为内层选择器表示对父选择器的引用,这里要注意在写 less 的嵌套的时候会有差异:
.demo2 { color: #333; background: #F0F0F0; &-title { text-align: center; } }
编译 less,输出的 CSS 如下:
.demo2 { color: #333; background: #F0F0F0; } .demo2-title { text-align: center; }
注意:上面的 & 引用了 .demo,这里虽然是嵌套的写法但仅代表选择器的引用而不是 css 的嵌套关系,和下面的代码有 css 层级的不同。例如:
.demo2 { .demo2-title { text-align: center; } }
编译 less,输出的 CSS 如下:
.demo2 .demo2-title { text-align: center; }
注意:在一个选择器中,& 可以重复出现多次,这样就可以多次引用父选择器而不必重复它的名字。例如:
&& 表示.demo.demo
& & 表示.demo .demo
&, & 表示.demo, .demo
将选择器添加到继承的(父)选择器之前可能很有用。这可以通过将 & 放在当前选择器之后来完成。例如,在使用 Modernizr 时,你可能希望根据支持的功能指定不同的规则:
.header { .menu { border-radius: 5px; .no-borderradius & { background-image: url('images/button-background.png'); } } }
选择器 .no-borderradius & 会将 .no-borderradius 添加到其父 .header .menu 的前面,以在输出中形成 .no-borderradius .header .menu:
.header .menu { border-radius: 5px; } .no-borderradius .header .menu { background-image: url('images/button-background.png'); }
& 也可用于在逗号分隔列表中生成选择器的所有可能排列组合:
p, a, ul, li { border-top: 2px dotted #366; & + & { border-top: 0; } }
这将扩展到指定元素的所有可能 (16) 组合:
p, a, ul, li { border-top: 2px dotted #366; } p + p, p + a, p + ul, p + li, a + p, a + a, a + ul, a + li, ul + p, ul + a, ul + ul, ul + li, li + p, li + a, li + ul, li + li { border-top: 0; }