SASS有一个称为@extend
的功能,它允许选择器继承另一个选择器的属性,但不复制属性(就像mixin一样)。
LESS也有这个功能吗?
是的,Less.js在v1.4.0中引入了extend
功能。
:extend()
LESS没有采用SASS和Stylus使用的at-rule(@extend
)语法,而是采用了伪类语法,这使得LESS的实现可以直接应用于选择器本身或语句内部。因此这两种写法都可以:
.sidenav:extend(.nav) {...}
或者.sidenav {
&:extend(.nav);
...
}
此外,您还可以使用all
指令来扩展“嵌套”的类:
.sidenav:extend(.nav all){};
你可以添加一个逗号分隔的类列表,以扩展它们:
.global-nav {
&:extend(.navbar, .nav all, .navbar-fixed-top all, .navbar-inverse);
height: 70px;
}
当扩展嵌套选择器时,您应该注意以下区别:
嵌套选择器 .selector1
和 selector2
:
.selector1 {
property1: a;
.selector2 {
property2: b;
}
}
现在.selector3:extend(.selector1 .selector2){};
的输出为:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector3 {
property2: b;
}
.selector3:extend(.selector1 all){};
输出:
.selector1,
.selector3 {
property1: a;
}
.selector1 .selector2,
.selector3 .selector2 {
property2: b;
}
.selector3:extend(.selector2){};
输出。
.selector1 {
property1: a;
}
.selector1 .selector2 {
property2: b;
}
最后是 .selector3:extend(.selector2 all){};
:
.selector1 {
property1: a;
}
.selector1 .selector2,
.selector1 .selector3 {
property2: b;
}
@extend
语法更符合传统CSS的特点,后者通常用于向浏览器中的CSS解析器提供指令或指导。 - cimmanon.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
.sibling-1();
}
输出
.sibling-1 {
color: red
}
.sibling-2 {
background-color: #fff;
color: red
}
Less 允许我们使用 :extend(.class) 或 :extend(#id)