J'écris un mixin comme celui-ci:
@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;
}
Quand on appelle ce que je veux vraiment, c'est que si aucune $inset
valeur n'est transmise, rien n'est généré, plutôt que de compiler quelque chose comme ceci:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
Comment réécrire le mixage pour que s'il n'y a pas de valeur $inset
passée, rien ne soit sorti?
blank
ounil
.null
pour ignorer attr / prop.ie @include box-shadow($top, $left, $blur, $color, null)
Réponses:
Une façon DRY'r de le faire
Et, généralement, une astuce intéressante pour supprimer les guillemets.
SASS version 3+, vous pouvez utiliser
unquote()
:Je l'ai récupéré ici: passez une liste à un mixin comme argument unique avec SASS
la source
null
pour la valeur par défaut des paramètres optionnels au lieu de""
, et ils ne seront pas rendus en sortie!@mixin box-shadow($top, $left,... , $inset:null) {}
Une bien meilleure façon SEC
est de passer
$args...
au@mixin
. De cette façon, peu importe combien$args
vous passerez. Dans l'@input
appel, vous pouvez passer tous les arguments nécessaires. Ainsi:Et maintenant, vous pouvez réutiliser votre shadow dans toutes les classes de votre choix en passant tous les arguments nécessaires:
la source
mixin
ATTEND, comme$top
,$left
,$blur
, etc. arguments variables, comme vous avez montré, sont parfaits pour une flexibilité maximale, cependant.Sass soutient les
@if
déclarations. (Voir la documentation .)Vous pouvez écrire votre mixin comme ceci:
la source
inset
partie doit être exclue quand elle est nulle, pas toutes les propriétés d'ombre de boîteelse
et d'inclure toutes les propriétés non insérées à l'intérieur.Vous pouvez mettre la propriété avec null comme valeur par défaut et si vous ne passez pas le paramètre, il ne sera pas interprété.
Cela signifie que vous pouvez écrire l'instruction include comme ceci.
Au lieu de l'écrire comme ça.
Comme indiqué dans la réponse ici
la source
@include box-shadow($top, $left, $blur, $color);
lieu de@include box-shadow($top, $left, $blur, $color, null);
. Par conséquent, cette réponse est beaucoup plus bénéfique.Vieille question, je sais, mais je pense que c'est toujours d'actualité. Sans doute, une façon plus claire de le faire est d'utiliser la fonction unquote () (que SASS possède depuis la version 3.0.0):
C'est à peu près équivalent à la réponse de Josh, mais je pense que la fonction explicitement nommée est moins obscurcie que la syntaxe d'interpolation de chaîne.
la source
Je sais que ce n'est pas exactement la réponse que vous cherchiez mais vous pouvez passer
"null"
comme dernier argument lors du@include box-shadow
mixage, comme ceci@include box-shadow(12px, 14px, 2px, green, null);
maintenant, si cet argument n'est qu'un dans cette propriété que cette propriété (et sa valeur (par défaut)) ne sera pas compilée . S'il y a deux arguments ou plus sur cette "ligne", seuls ceux que vous avez annulés ne seront pas compilés (votre cas).La sortie CSS est exactement comme vous le vouliez, mais vous devez écrire votre
null
s :)la source
voici la solution que j'utilise, avec les notes ci-dessous:
la source
Avec [email protected]:
et utiliser sans valeur, le bouton sera bleu
et avec la valeur, le bouton sera rouge
fonctionne aussi avec hexa
la source
Encore plus sec!
Et maintenant, vous pouvez réutiliser votre box-shadow encore plus intelligemment:
la source
la source
Manière super simple
Ajoutez simplement une valeur par défaut
none
à $ inset - doncMaintenant, quand aucun $ inset n'est passé, rien ne sera affiché.
la source
Vous pouvez toujours attribuer null à vos arguments facultatifs. Voici une solution simple
la source
Je suis nouveau sur les compilateurs CSS, j'espère que cela aide,
la source