是否有可能在 LESS 中将一个 mixin 嵌套在另一个 mixin 中,以便只有当元素是具有后者 mixin 的元素的子元素时才调用前者?
我知道,令人困惑,这是一个简单的例子(不是工作代码,只是概念):
较少的
.foo(@x) {
width: @x;
.foo(@y) {
width: @y/@x;
}
}
.a {
.foo(20px);
.b {
.foo(2);
}
}
输出 CSS
.a {
width: 20px;
}
.a .b {
width: 10px;
}
当我这样做时,调用.foo(2)
会.b
编译为width: 2
.
这应该是设计使然,还是我的语法有问题?另外,我是否从一个完全错误的角度来解决这个问题,并且可能有一个我没有考虑的更简单的解决方案?
编辑
好的,显然,最新版本的 LESS 已经解决了这个问题,不过,我想要实现的目标比我上面给出的最小示例稍微复杂一些。
基本上我想要发生的是,.foo
作为另一个元素的子元素的每一个都.foo
将使用它的父变量进行计算,所以,理想情况下
较少的
.foo(@x) {
width: @x;
.foo(@y) {
width: (@x/@y);
}
}
.a {
.foo(100px);
.b {
.foo(2px);
.c {
.foo(5px);
/* ...and so on */
}
}
}
输出 CSS
.a {
width: 100px;
}
.a .b {
width: 50px;
}
.a .b .c {
width: 10px;
}
我得到的是,相反:
.a .b .c {
width: 50px;
}
我试图修改LESS如下:
.foo(@x) {
width: @x;
.foo(@y) {
@x: (@x/@y)
width: (@x);
}
}
但是我得到递归变量定义的语法错误。显然 LESS 不允许定义如下:
@a: 1;
@a: (@a+1);