我想为box-shadow属性创建一个Sass mixin,但是遇到了一些麻烦。现有的一些代码如下所示。
#someDiv {
-moz-box-shadow:0 0 5px rgba(0,0,0,.25);
}
#someOtherDiv {
-moz-box-shadow:0 0 5px rgba(0,0,0,.25) inset;
}
#theLastDiv {
-moz-box-shadow: 0 0 5px rgba(0,0,0,.25), 0 1px 0 rgba(255,255,255,.2) inset;
}
试图将所有这些都分解为1个mixin成为问题。在mixins中使用逻辑的文档很少。
我想按照以下方式创建一些mixin:
@mixin boxShadow($xOffSet, $yOffSet, $blur, $red, $green, $blue, $opacity, $inset : false) {
@if $inset == true {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue) inset;
} @else {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue);
}
}
这引发了错误,因为我猜Sass无法评估$ inset变量。
前面的示例仅演示了关于框阴影是否插入的问题。我遇到的另一个问题是,在单个元素上声明了多个框阴影。如果需要参考,请参考上述#theLastDiv。
@mixin boxShadow($declarations : 2, $xOffSet1, $yOffSet1, $blur1, $red1, $green1, $blue1, $opacity1 $xOffSet2, $yOffSet2, $blur2, $red2, $green2, $blue2, $opacity2) {
@if $declarations == 1 {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue);
} @else if $declarations == 2 {
-moz-box-shadow: #{$xOffSet1}px #{$yOffSet1}px #{$blur1}px rgba($red1,$green1,$blue1), #{$xOffSet2}px #{$yOffSet2}px #{$blur2}px rgba($red2,$green2,$blue2);
}
有时,一个元素具有一个框形阴影,而另一些时候则必须分开框形阴影。我是否误解为Sass缺乏解读这种逻辑的能力,而要做到这一点将需要单独的Mixins(一个用于具有一个框阴影的元素,另一个用于具有两个框阴影的mixins)。
并使问题复杂化的是,上述不透明度问题是如何造成的呢?希望得到一些反馈。一般情况下,请让我知道我是否记错或思考问题的方式。谢谢!
我添加了一些逻辑来处理您描述的情况。这是mixin:
The mixin takes 17 parameters. Sorry for having so many, but SASS does not handle arrays or objects. In any event, 10 are optional. They are:
您可以这样设置样式:
生成以下CSS: