我正在使用 LESS CSS 1.3.3。对不起,如果这个问题已经被问过,我在网上没有找到任何相关的东西。
我有几个看起来像这样的类生成器(示例非常简化,足以触发错误):
#genMarginTop (@name, @size) {
.@{name} { margin-top: @size; }
}
然后我用它们来生成一些实际的类:
#genMarginTop(mtStandard, 40px);
#genMarginTop(mtHalf, 20px);
到目前为止,一切都很好,LESS 正确地生成了这些类,我可以在 HTML 中使用它们。但是,当我想在其他地方重用这样一个生成的类作为 mixin 时,我得到一个错误:
.someClass {
.mtStandard; // won't work, see error below
// more stuff
}
我得到的错误是:
NameError: .mtStandard is undefined in /.../example.less:161:4
160 .someClass {
161 .mtStandard;
162 // more stuff
当然,我会在生成类之后尝试使用 mixin 。看起来LESS在生成它们之后不会在内部注册这些生成的类,但我很可能是错的。
有没有办法在其他类中重用这些生成的类作为 mixins?作为 LESS 的新手,他们的文档对生成的类相当稀疏,我完全不知所措(特别是因为这是 mixins 似乎接受的唯一语法)。
谢谢你读我。
注意:我使用此类生成器的原因是因为它们比上面的示例复杂得多(认为嵌套类都依赖于一组公共参数),并且我将生成的类嵌入到各种@media
查询中以支持任何设备类型以“禅”的方式。最后我得到类似的东西:
@media (max-width: 1024px) {
#genSomething(something, somethingParam1, ...);
#genSomething(somethingElse, somethingElseParam1, ...);
#genStuff(stuff, stuffParam1, ...);
}
@media (max-width: 240px) {
#genSomething(something, somethingParam2, ...);
#genSomething(somethingElse, somethingElseParam2, ...);
#genStuff(stuff, stuffParam2, ...);
}
// etc
解决方案/测试用例
这是@MartinTurjak 解决方案的测试用例,我可以确认它按预期工作,嵌套类和所有内容:
.explicit {
margin-top: 1;
input { margin-top: 1; }
}
.reuseExplicit {
.explicit;
margin-bottom: 1;
}
#generator (@arg) {
margin-top: @arg;
input {
margin-top: @arg;
}
}
.generated { #generator(1); }
.reuseGenerated {
.generated;
margin-bottom: 1;
}
哪个正确生成:(注意显式/生成如何产生完全相同的结果)
.explicit {
margin-top: 1;
}
.explicit input {
margin-top: 1;
}
.reuseExplicit {
margin-top: 1;
margin-bottom: 1;
}
.reuseExplicit input {
margin-top: 1;
}
.generated {
margin-top: 1;
}
.generated input {
margin-top: 1;
}
.reuseGenerated {
margin-top: 1;
margin-bottom: 1;
}
.reuseGenerated input {
margin-top: 1;
}