Less Mixin 迭代无限(循环)
Less Mixin iteration infinite (circular loop)
如何不停地迭代混合循环?假设我有一个包含四种颜色的数组。当它迭代到最后一种颜色时,它从第一种颜色开始,依此类推和第四种。
我的代码:
@array: blue, red, green, yellow;
.color-mix(@i) when (@i > 0) {
ul {
li:nth-child(@{i}) {
.background-color(extract(@array, @i);
}
}
.color-mix(@i - 1);
}
.color-mix(4);
只会迭代四次,如果我添加更多迭代,它将中断,因为颜色数组只有四种颜色,我说得对吗?但是如何进行无限循环呢?
您可以对传递给 extract
函数的索引使用一些数学运算来完成此操作。在下面的代码片段中,我使用 mod
函数来确保索引始终介于 1 到 length(@array)
之间,而不管 @i
的值是多少。
即使没有,mixin 也会适应。 @array
变量中的值增加,因为我使用了数组长度而不是硬编码值。
@array: blue, red, green, yellow, orange;
.color-mix(@i) when (@i > 0) {
ul {
li:nth-child(@{i}) {
@temp: mod(@i - 1, length(@array)) + 1; /* for the cycle */
@color: extract(@array, @temp); /* usage of separate var is personal preference */
.background-color(@color); /* replace mixin with prop-value if mixin does only this */
&:hover{
.background-color(darken(@color, 5.5%));
}
}
}
.color-mix(@i - 1);
}
.color-mix(8); /* you can give any number here and it will iterate in a cyclic manner */
.background-color(@color){
background: @color;
}
正如 seven-phases-max 在他的评论中正确指出的那样,使用 nth-child(an + b)
是比 nth-child(n)
产生重复模式(循环)更好的选择。
@array: blue, red, green, yellow, orange;
.color-mix(@i) when (@i > 0) {
ul {
@index: unit(length(@array), n) ~"+" @i;
li:nth-child(@{index}) {
@color: extract(@array, @i);
.background-color(@color);
&:hover{
.background-color(darken(@color, 5.5%));
}
}
}
.color-mix(@i - 1);
}
.color-mix(length(@array));
.background-color(@color){
background: @color;
}
如何不停地迭代混合循环?假设我有一个包含四种颜色的数组。当它迭代到最后一种颜色时,它从第一种颜色开始,依此类推和第四种。
我的代码:
@array: blue, red, green, yellow;
.color-mix(@i) when (@i > 0) {
ul {
li:nth-child(@{i}) {
.background-color(extract(@array, @i);
}
}
.color-mix(@i - 1);
}
.color-mix(4);
只会迭代四次,如果我添加更多迭代,它将中断,因为颜色数组只有四种颜色,我说得对吗?但是如何进行无限循环呢?
您可以对传递给 extract
函数的索引使用一些数学运算来完成此操作。在下面的代码片段中,我使用 mod
函数来确保索引始终介于 1 到 length(@array)
之间,而不管 @i
的值是多少。
即使没有,mixin 也会适应。 @array
变量中的值增加,因为我使用了数组长度而不是硬编码值。
@array: blue, red, green, yellow, orange;
.color-mix(@i) when (@i > 0) {
ul {
li:nth-child(@{i}) {
@temp: mod(@i - 1, length(@array)) + 1; /* for the cycle */
@color: extract(@array, @temp); /* usage of separate var is personal preference */
.background-color(@color); /* replace mixin with prop-value if mixin does only this */
&:hover{
.background-color(darken(@color, 5.5%));
}
}
}
.color-mix(@i - 1);
}
.color-mix(8); /* you can give any number here and it will iterate in a cyclic manner */
.background-color(@color){
background: @color;
}
正如 seven-phases-max 在他的评论中正确指出的那样,使用 nth-child(an + b)
是比 nth-child(n)
产生重复模式(循环)更好的选择。
@array: blue, red, green, yellow, orange;
.color-mix(@i) when (@i > 0) {
ul {
@index: unit(length(@array), n) ~"+" @i;
li:nth-child(@{index}) {
@color: extract(@array, @i);
.background-color(@color);
&:hover{
.background-color(darken(@color, 5.5%));
}
}
}
.color-mix(@i - 1);
}
.color-mix(length(@array));
.background-color(@color){
background: @color;
}