我想要创建一个适用于box-shadow属性的Sass混合器,但是遇到些问题。现有的一些代码看起来像这样。
#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;
}
尝试将所有内容整合成一个mixin变得困难。在mixin中使用逻辑的文档相当稀少。
我想创建一个类似以下的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变量而导致出现错误。
前面的例子只是展示了当box-shadow是否嵌入时我遇到的问题。另一个问题是在单个元素上声明多个box-shadow时会出现问题。请参考上面描述的#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缺乏解读这种逻辑的能力,实现这一点需要单独的Mixin(一个用于具有一个内阴影的元素,另一个用于具有两个内阴影的mixin)。
而且,上述透明度问题如何影响这个问题?很想听听大家的反馈。如果我错了或者我对这个问题的思考方式是错误的,请让我知道。谢谢!