$shadow 变量只是一个值列表。如果模糊始终是列表中的第三项(例如在您的示例中),那么您正在查看的是这样的:
div {
box-shadow: nth($shadow, 1) nth($shadow, 2) nth($shadow, 3) - 15px nth($shadow, 4);
}
如果模糊位于列表中的另一个 有效 位置(可能是嵌入阴影),那么您需要开始检查列表的长度和/或检查第一个元素看是不是inset:
div {
@if nth($shadow, 1) == inset {
box-shadow: nth($shadow, 1) nth($shadow, 2) nth($shadow, 3) nth($shadow, 4) - 15px nth($shadow, 5);
} @else {
box-shadow: nth($shadow, 1) nth($shadow, 2) nth($shadow, 3) - 15px nth($shadow, 4);
}
}
或者,您可以通过编程方式进行:
$shadow: 0 0 25px rgb(46, 46, 46);
@function adjust-shadow($shadow, $position, $adjustment) {
$x: ();
$shift: if(nth($shadow, 1) == inset, -1, 0);
@for $i from 1 through length($shadow) {
$p: $i + $shift;
@if $position == color and $i == length($shadow) {
$x: append($x, $adjustment);
} @else if ($position == x-offset and $p == 1) or ($position == y-offset and $p == 2) or ($position == blur and $p == 3) {
$x: append($x, nth($shadow, $i) + $adjustment);
} @else {
$x: append($x, nth($shadow, $i));
}
}
@return $x;
}
.foo {
box-shadow: adjust-shadow($shadow, blur, -15px);
}
.bar {
box-shadow: adjust-shadow($shadow, color, blue);
}
.baz {
box-shadow: adjust-shadow(adjust-shadow($shadow, blur, -15px), y-offset, -2), adjust-shadow($shadow, blur, 10px);
}