我真的建议像下面这样写,因为它使代码简单易读。
.favourite-action-link {
&:after, &.is-favourite:hover:after {
color: @grey;
content: '\e836';
}
&:hover:after, &.is-favourite:after {
color: @red;
content: '\e811';
}
}
但是如果你真的想使用一个mixin来避免重复选择器,那么你可以这样写。这个mixin将两个规则集作为输入,并将它们应用于所需的选择器。
.favourite-action-link {
.rules-gen(
{
color: @grey;
content: '\e836';
};
{
color: @red;
content: '\e811';
}
);
}
.rules-gen(@rule1; @rule2){
&:after, &.is-favourite:hover:after {
@rule1();
}
&:hover:after, &.is-favourite:after {
@rule2();
}
}
在这两种方法中,选择器也被分组,这也意味着减少了代码行。
Demo
或者,如果额外的课程并不总是
is-favourite
它也可以是其他东西,然后您可以将其作为参数传递给mixin,如下所示:
.favourite-action-link {
.rules-gen(
{
color: grey;
content: '\e836';
};
{
color: red;
content: '\e811';
};
~"is-favourite"
);
}
.share-action-link {
.rules-gen(
{
color: yellow;
content: '\e836';
};
{
color: gold;
content: '\e811';
};
~"active"
);
}
.rules-gen(@rule1; @rule2; @addedClass){
&:after, &.@{addedClass}:hover:after {
@rule1();
}
&:hover:after, &.@{addedClass}:after {
@rule2();
}
}
Demo