Ich schreibe einen Mixin wie diesen:
@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;
}
Wenn ich aufgerufen werde, möchte ich wirklich, dass $inset
nichts ausgegeben wird, wenn kein Wert übergeben wird, anstatt zu etwas wie diesem kompiliert zu werden:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
Wie schreibe ich das Mixin so um, dass $inset
nichts ausgegeben wird , wenn es keinen Wert für übergeben gibt?
blank
odernil
Wert.null
, um attr / prop zu überspringen.ie @include box-shadow($top, $left, $blur, $color, null)
Antworten:
Eine trockene Art, es zu tun
Und im Allgemeinen ein guter Trick, um die Anführungszeichen zu entfernen.
SASS Version 3+ können Sie verwenden
unquote()
:Habe das hier aufgegriffen: Übergebe eine Liste als einzelnes Argument mit SASS an ein Mixin
quelle
null
anstelle von optionalen Parametern den Standardwert zu verwenden""
, und diese werden in der Ausgabe nicht gerendert!@mixin box-shadow($top, $left,... , $inset:null) {}
Ein viel besserer trockener Weg
ist an die
$args...
zu übergeben@mixin
. Auf diese Weise, egal wie viele$args
Sie passieren werden. Im@input
Aufruf können Sie alle benötigten Argumente übergeben. Wie so:Und jetzt können Sie Ihren Box-Shadow in jeder gewünschten Klasse wiederverwenden, indem Sie alle erforderlichen Argumente übergeben:
quelle
mixin
erwartet, wie$top
,$left
,$blur
usw. Variable Argumente, wie Sie gezeigt haben, für ein Höchstmaß an Flexibilität groß sind, though.Sass unterstützt
@if
Aussagen. (Siehe Dokumentation .)Sie könnten Ihr Mixin so schreiben:
quelle
inset
Teil muss ausgeschlossen werden, wenn es null ist, nicht alle Box-Shadow-Eigenschaftenelse
und fügen Sie alle nicht eingefügten Eigenschaften hinzu.Sie können die Eigenschaft mit null als Standardwert festlegen. Wenn Sie den Parameter nicht übergeben, wird er nicht interpretiert.
Dies bedeutet, dass Sie die include-Anweisung wie folgt schreiben können.
Anstatt es so zu schreiben.
Wie in der Antwort hier gezeigt
quelle
@include box-shadow($top, $left, $blur, $color);
statt schreiben können@include box-shadow($top, $left, $blur, $color, null);
. Daher ist diese Antwort viel nützlicher.Alte Frage, ich weiß, aber ich denke, das ist immer noch relevant. Ein klarerer Weg, dies zu tun, ist wohl die Verwendung der Funktion unquote () (die SASS seit Version 3.0.0 hat):
Dies entspricht in etwa Joshs Antwort, aber ich denke, die explizit benannte Funktion ist weniger verschleiert als die Syntax der String-Interpolation.
quelle
Ich weiß, dass es nicht genau die Antwort ist, nach der Sie gesucht haben, aber Sie könnten
"null"
beim@include box-shadow
Mischen wie dieses als letztes Argument übergeben.@include box-shadow(12px, 14px, 2px, green, null);
Wenn dieses Argument nur eines in dieser Eigenschaft ist, wird diese Eigenschaft (und ihr (Standard-) Wert) nicht kompiliert . Wenn sich in dieser "Zeile" zwei oder mehr Argumente befinden, werden nur diejenigen, die Sie auf Null gesetzt haben, nicht kompiliert (Ihr Fall).Die CSS-Ausgabe ist genau so, wie Sie es wollten, aber Sie müssen Ihre
null
s schreiben :)quelle
Hier ist die Lösung, die ich benutze, mit Anmerkungen unten:
quelle
Mit [email protected]:
Bei Verwendung ohne Wert ist die Schaltfläche blau
und mit Wert wird die Schaltfläche rot angezeigt
funktioniert auch mit hexa
quelle
Noch trockener!
Und jetzt können Sie Ihren Box-Shadow noch intelligenter wiederverwenden:
quelle
quelle
Super einfacher Weg
Fügen Sie einfach einen Standardwert von
none
$ inset hinzu - alsoWenn jetzt kein $ inset übergeben wird, wird nichts angezeigt.
quelle
Sie können Ihren optionalen Argumenten jederzeit null zuweisen. Hier ist eine einfache Lösung
quelle
Ich bin neu in CSS-Compilern, hoffe das hilft,
quelle