Можно ли перегрузить миксины в sass?
Скажем, у вас есть микширование для тени вроде:
@mixin box-shadow($offset, $blur, $color)
{
-moz-box-shadow: $offset $offset $blur $color;
-webkit-box-shadow: $offset $offset $blur $color;
box-shadow: $offset $offset $blur $color;
}
Можно ли перегрузить этот mixin чем-то вроде:
@mixin box-shadow($offset, $blur)
{
@include box-shadow($offset, $blur, #999);
}
Или мне нужно использовать разные имена для mixins?
Ответы
Ответ 1
Вы не можете перегружать, но типичной практикой будет установка значений по умолчанию.
/* this would take color as an arg, or fall back to #999 on a 2 arg call */
@mixin box-shadow($offset, $blur, $color: #999) {
-webkit-box-shadow: $offset $offset $blur $color;
-moz-box-shadow: $offset $offset $blur $color;
box-shadow: $offset $offset $blur $color;
}
Ответ 2
Если вам нужно немного настроить микшер поставщика, вы можете скопировать его в другой файл, включенный после оригинала, и отредактировать его там, а оригинал поставщика будет проигнорирован.
@import "_their-mixins";
@import "_our-mixins";
Предупреждение - это может зависеть от того, какой процессор вы используете. На момент написания он отлично работает с помощью grunt и grunt-contrib-compass
Ответ 3
@numbers1311407 решение верное, но вы можете использовать директиву @each для создания более короткого mixin:
@mixin box-shadow($offset, $blur, $color: #999) {
@each $prefix in -moz-, -webkit-, null {
#{$prefix}box-shadow: $offset $offset $blur $color;
}
}