您尝试执行的操作至少存在 2 个问题(对于 LESS >=1.6,请参阅下面的更新):
1) 不幸的是,无法使用选择器调用 mixin
插值。
使用选择器插值,LESS 期望构造为
以下格式:
.@{selector-string} { property:value; }
(插值选择器也可以有一些静态字符串 pre 或
发布插值)
所以
.@{selector-string};
被LESS 编译器识别。在这里查看更多:
How can I call a mixin by reference in LESS?
2) 带有插值选择器的规则集被直接打印到 CSS 输出中,并且不作为可以在 LESS 运行中重用的 mixin 存在
例如:
@foo: test;
.@{foo} {
length: 20px;
}
.bar {
.test;
}
将返回:
Name error: .test is undefined
.bar { .test;}
在此处查看更多信息:LESS CSS: Reuse generated .@{name} class as a mixin
您的问题的可能解决方案是将字体真棒规则重新定义为某种可重用的混合(不使用插值)。像这样的:
@fa-var-github: "\f09b";
.fa-mixin() {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.fa-mixin-lg() {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -15%;
}
.fa-mixin-icon(@icon){
@var: "fa-var-@{icon}";
&:before { content: @@var; }
}
i {
.fa-mixin;
.fa-mixin-lg;
.fa-mixin-icon(github);
}
如果您真的不需要变量并且只想包含规则,最好的方法就是导入已编译的 CSS 版本的 FontAwesome(请参阅答案 here):
@import (less) 'font-awesome.css';
然后你就可以使用 CSS 规则,比如 LESS 混合,或者在你认为合适的时候扩展它们的选择器,它应该可以完美地工作。
更新:
从 LESS >= 1.6 开始,带有插值选择器的规则可以作为 mixins 访问...所以上面的 #2 限制形式不再适用(但您仍然不能使用动态调用 mixin插值)。因此,您可以简单地从导入的 font-awesome.less 文件中调用 LESS 混合和变量,如下所示:
i {
.fa;
.fa-lg;
&:before{
content: @fa-var-github;
}
}