Я добавил немного логики для обработки описанных вами случаев. Вот миксин:
@mixin boxShadow($xOffSet, $yOffSet, $blur, $red, $green, $blue, $opacity, $inset : false, $two : false, $xOffSet2 : 0, $yOffSet2 : 0, $blur2 : 0, $red2 : 0, $green2 : 0, $blue2 : 0, $opacity2 : 0, $inset2 : false) {
@if $inset {
@if $two {
@if $inset2 {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity) inset, #{$xOffSet2}px #{$yOffSet2}px #{$blur2}px rgba($red2,$green2,$blue2, $opacity2) inset;
} @else {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity) inset, #{$xOffSet2}px #{$yOffSet2}px #{$blur2}px rgba($red2,$green2,$blue2, $opacity2);
}
} @else {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity) inset;
}
} @else {
@if $two {
@if $inset2 {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity), #{$xOffSet2}px #{$yOffSet2}px #{$blur2}px rgba($red2,$green2,$blue2, $opacity2) inset;
} @else {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity), #{$xOffSet2}px #{$yOffSet2}px #{$blur2}px rgba($red2,$green2,$blue2, $opacity2);
}
} @else {
-moz-box-shadow: #{$xOffSet}px #{$yOffSet}px #{$blur}px rgba($red,$green,$blue, $opacity);
}
}
}
Миксин принимает 17 параметров. Извините за то, что их так много, но SASS не обрабатывает массивы или объекты. В любом случае, 10 являются необязательными. Это:
- $ xOffSet - смещение x первой тени
- $ yOffSet - смещение по y второй тени
- $ blur - размытие первой тени
- $ red - значение красной первой тени
- $ blue - значение синей первой тени
- $ green - значение зеленого цвета первой тени
- $ opacity - непрозрачность первой тени
- $ inset (необязательно) - верно или неверно. Указывает, должна ли быть вставлена первая тень (по умолчанию false)
- $ two (Необязательно) - True или False - True, если вы хотите задать две границы (по умолчанию false)
- $ xOffSet2 (необязательно) - смещение x второй тени
- $ yOffSet2 (Необязательно) - смещение по y второй тени
- $ blur2 (необязательно) - размытие второй тени
- $ red2 (необязательно) - значение красного для второй тени
- $ blue2 (необязательно) - значение синего для второй тени
- $ green2 (необязательно) - значение зеленого цвета второй тени
- $ opacity2 (необязательно) - непрозрачность второй тени
- $ inset2 (необязательно) - верно или неверно. Указывает, должна ли быть вставлена вторая тень (по умолчанию false)
Вы можете установить свои стили так:
#someDiv {
@include boxShadow(0, 0, 5, 0, 0, 0, .25);
}
#someOtherDiv {
@include boxShadow(0, 0, 5, 0, 0, 0, .25, true);
}
#theLastDiv {
@include boxShadow(0, 0, 5, 0, 0, 0, .25, false, true, 0, 1, 0, 255, 255, 255, .2, true);
}
, который генерирует следующий CSS:
/* line 9, ../src/screen.scss */
#someDiv {
-moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.25);
}
/* line 12, ../src/screen.scss */
#someOtherDiv {
-moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.25) inset;
}
/* line 16, ../src/screen.scss */
#theLastDiv {
-moz-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.25), 0px 1px 0px rgba(255, 255, 255, 0.2) inset;
}