Estou escrevendo um mixin assim:
@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;
}
Quando chamado, o que realmente quero é que, se nenhum $inset
valor for passado, nada será produzido, em vez de ser compilado para algo assim:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
Como reescrevo o mixin para que, se não houver valor $inset
passado, nada seja produzido?
blank
ounil
valor.null
para pular attr / prop.ie @include box-shadow($top, $left, $blur, $color, null)
Respostas:
Uma maneira mais seca de fazê-lo
E, geralmente, um truque interessante para remover as aspas.
SASS versão 3+, você pode usar
unquote()
:Peguei isso aqui: passe uma lista para um mixin como um único argumento com o SASS
fonte
null
o valor padrão dos parâmetros opcionais em vez de""
e eles não serão renderizados na saída!@mixin box-shadow($top, $left,... , $inset:null) {}
Uma maneira DRY muito melhor
é passar
$args...
para o@mixin
. Dessa forma, não importa quantos$args
você passará. Na@input
chamada, você pode passar todos os argumentos necessários. Igual a:E agora você pode reutilizar sua sombra de caixa em todas as classes que desejar, passando todos os argumentos necessários:
fonte
mixin
está esperando, como$top
,$left
,$blur
, etc argumentos variáveis, como você mostrou, são grandes para a máxima flexibilidade, no entanto.Sass suporta
@if
declarações. (Veja a documentação .)Você poderia escrever sua mixin assim:
fonte
inset
parte deve ser excluída quando for nula, nem todas as propriedades de sombra de caixaelse
e incluir todas as propriedades não inseridas dentro.Você pode colocar a propriedade null como valor padrão e, se não passar o parâmetro, ele não será interpretado.
Isso significa que você pode escrever a instrução include como esta.
Em vez de escrever assim.
Como mostrado na resposta aqui
fonte
@include box-shadow($top, $left, $blur, $color);
vez de@include box-shadow($top, $left, $blur, $color, null);
. Portanto, essa resposta é muito mais benéfica.Eu sei que é uma pergunta antiga, mas acho que isso ainda é relevante. Indiscutivelmente, uma maneira mais clara de fazer isso é usar a função unquote () (que o SASS possui desde a versão 3.0.0):
Isso é aproximadamente equivalente à resposta de Josh, mas acho que a função denominada explicitamente é menos ofuscada do que a sintaxe de interpolação de strings.
fonte
Eu sei que não é exatamente a resposta que você estava procurando, mas você pode passar
"null"
como último argumento ao@include box-shadow
misturar, assim:@include box-shadow(12px, 14px, 2px, green, null);
Agora, se esse argumento for apenas um nessa propriedade, essa propriedade (e seu valor (padrão)) não será compilado . Se houver dois ou mais argumentos nessa "linha", apenas aqueles que você anulou não serão compilados (seu caso).A saída CSS é exatamente como você queria, mas você precisa escrever seus
null
:)fonte
Aqui está a solução que eu uso, com as notas abaixo:
fonte
Com [email protected]:
e usar sem valor, o botão ficará azul
e com valor, o botão ficará vermelho
trabalha com hexa também
fonte
Ainda mais seca!
E agora você pode reutilizar sua sombra de caixa ainda mais inteligente:
fonte
fonte
Maneira super simples
Basta adicionar um valor padrão de
none
$ inset - paraAgora, quando nenhum $ inset for passado, nada será exibido.
fonte
Você sempre pode atribuir nulo aos seus argumentos opcionais. Aqui está uma correção simples
fonte
Eu sou novo nos compiladores css, espero que ajude,
fonte