LESS:使用变量继承

Mat*_*att 1 css less font-awesome web-essentials

我正在学习第一次使用CSS预处理器(LESS),并且在该父类是变量名时尝试定义继承类的类时遇到问题.

这基本上就是我想做的事情:

@import "font-awesome/font-awesome.less"

.icon-application-home{
    .fa .fa-home;
}
Run Code Online (Sandbox Code Playgroud)

但是因为fa在Font Awesome中被定义为:

@fa-css-prefix:       fa;
Run Code Online (Sandbox Code Playgroud)

那么少就不会编译,因为它不能识别.fa.所以我尝试了这个:

@import "font-awesome/font-awesome.less"

.icon-application-home{
    .@{fa-css-prefix} .@{fa-css-prefix}-home;
}
Run Code Online (Sandbox Code Playgroud)

然而,这也不起作用.有没有解决方法?我能在这做什么?

编辑

我在这里找到了半个答案:

导入后,我的.less文件中缺少Font-Awesome.less变量

如果我执行以下操作,则(部分)有效:

@import (less) "../font-awesome.css";

.icon-home {
    .fa;
}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到它.fa-home不存在......只是.fa-home:before......所以我试过这个:

@import (less) "../font-awesome.css";

.icon-home {
    .fa;
    .fa-home:before;
}
Run Code Online (Sandbox Code Playgroud)

@import (less) "../font-awesome.css";

    .icon-home {
        .fa;
    }
    .icon-home:before {
        .fa-home:before;
    }
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.有任何想法吗?

sev*_*max 6

假设您使用包含Less 1.4.2的WE2012,最简单的解决方案是:

@import (less) "../font-awesome.css";

.icon-application-home {
    &:extend(.fa, .fa-home all);
}
Run Code Online (Sandbox Code Playgroud)

要么:

@import (less) "../font-awesome.css";

.icon-application-home
    :extend(.fa, .fa-home all) {

}   
Run Code Online (Sandbox Code Playgroud)

阅读extend文档,了解这些东西的工作原理.


如果您升级到包含Less 1.6.x的IDE /编译器,您将能够:

@import ".../font-awesome.less"

.icon-application-home {
    .fa;
    &:before {content: @fa-var-home}
}
Run Code Online (Sandbox Code Playgroud)

在那里你仍然不能使用.fa-home.fa-home:before作为mixins,因为第一个没有定义,第二个不是有效的mixin选择器,幸运的&:before {content: @fa-var-home}是它是什么.fa-home.但总的来说,extend基于解决方案更加优化,因为它可以生成更紧凑的CSS.