Пропуск необязательного аргумента в миксине Sass

У меня есть этот миксин для обработки простого линейного градиента CSS3:

@mixin linear-gradient($from, $to, $dir: bottom, $dir-webkit: top, $ie-filters: false) {
    background-color: $to;
    background-image: -webkit-linear-gradient($dir-webkit, $from, $to);
    background-image: linear-gradient(to $dir, $from, $to);
    @if $ie-filters == true and $old-ie {
         filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($from)}', endColorstr='#{ie-hex-str($to)}');
    }
}

$dir - это сокращение от «направление».

Если мне нужно сделать $ie-filters 'истинным' и мне не нужно менять $dir / $dir-webkit значения по умолчанию, мне все равно нужно повторно объявить их, что, очевидно, не очень СУХОЕ и оптимально, поэтому мне придется сделать это:

@include linear-gradient(#7a7a7a, #1a1a1a, bottom, top, true);

Когда я просто хочу это сделать:

@include linear-gradient(#7a7a7a, #1a1a1a, true);

Как мне таким образом пропустить аргументы при вызове миксина?

PS, если вас интересует аргумент $dir-webkit, это для Webkit, поскольку он все еще не обрабатывает новый синтаксис градиента (см .: http://generatedcontent.org/post/37949105556/updateyourcss3 -› Новый синтаксис градиента), направление должно быть противоположным стандартному синтаксису.


person Chris Pearce    schedule 21.01.2013    source источник
comment
Вы пробовали передавать null?   -  person markus    schedule 21.01.2013
comment
Просто попробовал, но он не выводит никакого значения при использовании null: @include linear-gradient(#f60, #c00, null, null, true); компилируется в: background-image: -webkit-linear-gradient(, #ff6600, #cc0000); background-image: linear-gradient(to, #ff6600, #cc0000);   -  person Chris Pearce    schedule 21.01.2013
comment
попробуйте эти миксины bravedick.github.com/mooxins. нет фильтров, кстати.   -  person bravedick    schedule 24.01.2013


Ответы (1)


Начиная с SASS 3.1 для этого можно передавать именованные аргументы:

@include linear-gradient($from: #7a7a7a, $to: #1a1a1a, $ie-filters: true);

Остальное будет по умолчанию.

person markus    schedule 21.01.2013
comment
$from и $to никогда не будут иметь значений по умолчанию, но даже если они и сделали, это все равно не помогает, когда я хочу пропустить аргумент, как я описал выше. - person Chris Pearce; 21.01.2013
comment
Какие? Я только что показал вам, как это работает, именно это вы и просили. Вы хотите пропустить третий и четвертый аргументы, и вот как это делается. - person markus; 21.01.2013
comment
Может ты не понимаешь моего ответа. Вот как вы НАЗЫВАЕТЕ миксин своими ценностями. Вы можете опустить два других параметра, если передадите именованные аргументы. - person markus; 21.01.2013
comment
Извините, приятель, я по глупости неправильно прочитал @include вместо @mixin в вашем фрагменте кода, поэтому я подумал, что вы объявляете значения по умолчанию для $from и $to в самом миксине. Целый день работал с миксинами, так что мозг немного измотан. В любом случае все работает нормально. Ваше здоровье. - person Chris Pearce; 21.01.2013