萨斯递归混入
问题描述:
我想知道,如果在SASS被允许写一个递归混入这样的减例如:萨斯递归混入
.size($val) when ($val < 200) {
width: $val;
height: $val;
.size($val + 50px);
}
我想这样的事情,但我没有任何输出
@mixin test($val) {
width: $val;
height: $val;
@for $i from 1 through 5 {
@include test($val);
}
}
.block {
@include test(5);
}
答
在sass中,你可以创建递归函数,但你的例子是错误的。
看你的代码,我看到你在无限循环,因为是$ var变量没有在@for迭代器使用。你只能从1到5无限迭代。
此处的递归方法与其他语言相同,您必须使用该参数再次调用该函数,并且当此变量与0(例如)相同时,会返回一个值...其值为用于函数的最后一次调用来设置新的值......并且再次是第一步。
这里是萨斯递归函数的例子:
- https://gist.github.com/paramburu/9613303
- http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#section-3
希望它能帮助。
问候。
答
与您的LESS示例不同,您的Sass mixin无法摆脱循环。
@mixin test($val) {
width: $val;
height: $val;
@if $val > 0 {
@include test($val - 1);
}
}
嗯,我认为这个功能需要@return才能正常工作。你怎么看? – 2014-10-01 08:04:47
这不是一个函数,它是一个混合。 '@ return'是函数的构造。 – cimmanon 2014-10-01 12:08:03