通过SCSS从box-shadow属性中减去blur值

时间:2014-07-23 00:13:22

标签: css3 sass

我一直在考虑这个问题。在我的SCSS中,我有以下内容:

$shadow: 0 0 25px rgb(46, 46, 46);

div {
   box-shadow: $shadow;  
}

如何减去25px的模糊,让我们说10,这样我可以使用15像素的模糊?此外,如何选择模糊值?考虑到我想在div元素上应用box-shadow:

<div>Lorem Ipsum</div>

2 个答案:

答案 0 :(得分:3)

$shadow变量只是一个值列表。如果模糊始终是列表中的第3项(例如在您的示例中),那么您正在查看的内容是这样的:

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);
}

答案 1 :(得分:2)

为模糊值创建一个新变量:

$blur: 25px - 10;
$shadow: 0 0 $blur rgb(46, 46, 46);

div {
   box-shadow: $shadow;  
}

根据您的整体需求,撰写mixin可能会更好。