Я пишу миксин так:
@mixin box-shadow($top, $left, $blur, $color, $inset:"") {
-webkit-box-shadow: $top $left $blur $color $inset;
-moz-box-shadow: $top $left $blur $color $inset;
box-shadow: $top $left $blur $color $inset;
}
Когда я вызываю, я действительно хочу, чтобы при отсутствии $inset
значения ничего не выводилось, а компилировалось в нечто вроде этого:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
Как мне переписать миксин, чтобы при отсутствии $inset
переданного значения ничего не выводилось?
blank
или не имеетnil
значения.null
, чтобы пропустить attr / prop.ie @include box-shadow($top, $left, $blur, $color, null)
Ответы:
СУХОЙ способ сделать это
И, вообще, аккуратный трюк для удаления цитат.
SASS версии 3+, вы можете использовать
unquote()
:Подобрал это здесь: передайте список в mixin как один аргумент с SASS
источник
null
вместо значения по умолчанию дополнительные параметры вместо""
, и они не будут отображаться при выводе!@mixin box-shadow($top, $left,... , $inset:null) {}
Намного лучше сухой способ
это перейти
$args...
к@mixin
. Таким образом, независимо от того, сколько$args
вы пройдете. В@input
вызове вы можете передать все необходимые аргументы. Вот так:И теперь вы можете повторно использовать box-shadow в каждом классе, который хотите, передав все необходимые аргументы:
источник
mixin
ожидает, как$top
,$left
,$blur
и т.д. Переменные аргументы, как вы показали, являются большими для максимальной гибкости, однако.Sass поддерживает
@if
заявления. (См. Документацию .)Вы можете написать свой миксин так:
источник
inset
часть должна быть исключена, когда она нулевая, а не все свойства box-shadowelse
и включите все не вставленные свойства внутри.Вы можете поместить свойство со значением null в качестве значения по умолчанию, и если вы не передадите параметр, оно не будет интерпретироваться.
Это означает, что вы можете написать оператор включения следующим образом.
Вместо того, чтобы писать это так.
Как показано в ответе здесь
источник
@include box-shadow($top, $left, $blur, $color);
вместо@include box-shadow($top, $left, $blur, $color, null);
. Поэтому этот ответ намного более благотворен.Старый вопрос, я знаю, но я думаю, что это все еще актуально. Возможно, более ясный способ сделать это - использовать функцию unquote () (которая была в SASS начиная с версии 3.0.0):
Это примерно эквивалентно ответу Джоша, но я думаю, что явно названная функция менее запутана, чем синтаксис строковой интерполяции.
источник
Я знаю, что это не совсем тот ответ, который вы искали, но вы можете передать его в
"null"
качестве последнего аргумента при@include box-shadow
миксине, например@include box-shadow(12px, 14px, 2px, green, null);
сейчас. Если этот аргумент только один в этом свойстве, то это свойство (и его значение (по умолчанию)) не будет скомпилировано , Если в этой «строке» есть два или более аргументов, только те, которые вы обнулили, не будут скомпилированы (ваш случай).Вывод CSS точно такой, как вы хотели, но вы должны написать свой
null
:)источник
Вот решение, которое я использую, с примечаниями ниже:
источник
С sass@3.4.9:
и использовать без значения, кнопка будет синей
и со значением кнопка будет красной
работает с гекса тоже
источник
Даже более сухой путь!
И теперь вы можете использовать вашу box-shadow еще умнее:
источник
источник
Супер простой способ
Просто добавьте значение по умолчанию
none
в $ inset - такТеперь, когда $ inset не передается, ничего не будет отображаться.
источник
Вы всегда можете присвоить null вашим необязательным аргументам. Вот простое исправление
источник
Я новичок в компиляторах CSS, надеюсь, это поможет,
источник