Piszę taki mixin:
@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;
}
Po wywołaniu tak naprawdę chcę, aby jeśli żadna $inset
wartość nie została przekazana, nic nie jest generowane, zamiast kompilacji do czegoś takiego:
-webkit-box-shadow: 2px 2px 5px #555555 "";
-moz-box-shadow: 2px 2px 5px #555555 "";
box-shadow: 2px 2px 5px #555555 "";
Jak przepisać mixin, aby jeśli nie $inset
przekazano żadnej wartości , nic nie zostanie wyświetlone?
blank
aninil
.null
, aby pominąć attr / prop.ie @include box-shadow($top, $left, $blur, $color, null)
Odpowiedzi:
DRY'R Way to zrobić
I, ogólnie rzecz biorąc, fajna sztuczka, aby usunąć cytaty.
SASS wersja 3+, możesz użyć
unquote()
:Podniosłem to tutaj: przekaż listę do miksu jako pojedynczy argument z SASS
źródło
null
domyślnej wartości parametrów opcjonalnych zamiast""
i nie będą one renderowane w wyniku!@mixin box-shadow($top, $left,... , $inset:null) {}
O wiele lepszy SUCHY sposób
ma przejść
$args...
do@mixin
. W ten sposób, bez względu na to, ile$args
zdasz. W@input
rozmowie możesz przekazać wszystkie potrzebne argumenty. Tak jak:A teraz możesz ponownie użyć swojego cienia w każdej klasie, przekazując wszystkie potrzebne argumenty:
źródło
mixin
spodziewa się, jak$top
,$left
,$blur
itp Variable argumenty, jakbyś pokazano, świetnie nadają się do ostatecznego elastyczność, choć.Sass obsługuje
@if
oświadczenia. (Zobacz dokumentację .)Możesz napisać swój mixin w ten sposób:
źródło
inset
część musi być wykluczona, gdy ma wartość NULL, nie wszystkie właściwości cieniaelse
i dołączyć wszystkie nie wstawiane właściwości w środku.Możesz ustawić właściwość z null jako wartość domyślną, a jeśli nie podasz parametru, nie zostanie on zinterpretowany.
Oznacza to, że możesz napisać instrukcję include w ten sposób.
Zamiast pisać w ten sposób.
Jak pokazano w odpowiedzi tutaj
źródło
@include box-shadow($top, $left, $blur, $color);
zamiast@include box-shadow($top, $left, $blur, $color, null);
. Dlatego ta odpowiedź jest o wiele bardziej korzystna.Stare pytanie, wiem, ale myślę, że to jest nadal aktualne. Prawdopodobnie wyraźniejszym sposobem na to jest użycie funkcji unquote () (którą SASS ma od wersji 3.0.0):
Jest to w przybliżeniu odpowiednik odpowiedzi Josha, ale myślę, że wyraźnie nazwana funkcja jest mniej zaciemniona niż składnia interpolacji łańcucha.
źródło
Wiem, że nie jest to dokładnie odpowiedź,
"null"
której@include box-shadow
szukałeś, ale możesz podać jako ostatni argument podczas miksowania, tak jak@include box-shadow(12px, 14px, 2px, green, null);
teraz Teraz, jeśli ten argument jest tylko jeden w tej właściwości niż ta właściwość (a jej (domyślna) wartość) nie zostanie skompilowana . Jeśli w tej „linii” znajdują się dwa lub więcej argumentów, tylko te, które zostały zerowane, nie zostaną skompilowane (twój przypadek).Wyjście CSS jest dokładnie takie, jak chcesz, ale musisz napisać swoje
null
:)źródło
oto rozwiązanie, którego używam, z notatkami poniżej:
źródło
Z [email protected]:
i użyj bez wartości, przycisk będzie niebieski
i wartości, przycisk będzie czerwony
działa również z hexa
źródło
Nawet OSUSZANIE!
A teraz możesz ponownie wykorzystać swój cień-pudełko jeszcze mądrzej:
źródło
źródło
Super prosty sposób
Wystarczy dodać wartość domyślną
none
do $ inset - więcTeraz, gdy nie zostanie przekazana żadna wstawka $, nic nie będzie wyświetlane.
źródło
Zawsze możesz przypisać null swoim opcjonalnym argumentom. Oto prosta poprawka
źródło
Jestem nowy w kompilatorach css, mam nadzieję, że to pomoże,
źródło