我想遍历一个数组,修改每个项目,然后用修改后的项目吐出一个新数组。
我对foobar示例非常厌恶,因为它们如此抽象......但它似乎很奇怪适用于此:
注意:这是半伪代码,因为我显然不知道这是如何工作的。
.loop (@var)
@array: (@var + 1), (@var + 2), (@var + 3);
// outputs @array: var1, var2 var3; (when @var = var)
.-(@i: length(@array)) when (@i > 0) {
@item: e(extract(@array, @i));
@newItem: @item + bar;
.-((@i - 1));
@newArray:@newItem,@newItem,@newItem;// ????
).-;
.test {
.loop ('foo');
}
在上面的示例中,使用foo调用循环应输出foo1bar, foo2bar, foo3bar
或者其他......最后一点是棘手/混乱的部分。这可能不是我访问数组的方式,而是类似的......
总结一下:我想通过循环传递单个变量。在循环中,根据该变量定义一个数组(想象一下将单个颜色分成单独的值)。然后使用这个新数组,我想遍历其中的每个项目,修改它(想象使每个值变暗),然后获得一个包含这些新修改值的新数组。
另一个例子:
.loop (@color: red) {
@separations: red(@color), green(@color), blue(@color);
// outputs 255, 0, 0
.-(@i: length (@array)) when (@i > 0) {
@sep: e(extract(@array, @i));
@newSep: floor(@sep / 2);
.-((@i - 1));
} .-;
@newArray: @item{i};
//outputs @newArray: 127, 0, 0;
}
不,我不只是试图改变颜色的色调。我试图获得给定颜色的相对亮度,这需要定义一个颜色,将其分成一个单独的rgb值数组,对每个颜色进行一些条件数学运算,然后得到一个新颜色这些修改后的值的数组 - 然后需要插入公式中。
希望这个模糊/详细。
感谢您的任何意见/建议!
以下是在SCSS中实现这一目标的一个例子
@function color_luminance($color) {
// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js
// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
$rgba: red($color), green($color), blue($color);
$rgba2: ();
@for $i from 1 through 3 {
$rgb: nth($rgba, $i);
$rgb: $rgb / 255;
$rgb: if($rgb < .03928, $rgb / 12.92, pow(($rgb + .055) / 1.055, 2.4));
$rgba2: append($rgba2, $rgb);
}
@return .2126 * nth($rgba2, 1) + .7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3);
}