2013-04-16 21 views
11

Po raz pierwszy zapytałem o numer similar question i otrzymałem wspaniałą odpowiedź. Niestety, tym razem odpowiedź nie jest wystarczająca, a pytanie jest nieco bardziej złożone.Wiele funkcji wewnątrz łańcucha za pomocą LESS

Używam LESS z miksami LESSHat do budowy motywu w tej chwili. Jako zmienne zdefiniowałem wiele kolorów i obecnie próbuję zdefiniować gradient za pomocą mixina LESSHata. Problemem jest to, że mixin akceptuje ciąg jako jeden argument, a nie szereg argumentów dla każdego parametru gradientu, na przykład:

#element { 
    .gradient(~"linear-gradient(90deg, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%)"); 
} 

wszystko jest dobrze i dobre z powyższym, i mogę wykorzystać moje zmienne wewnątrz łańcucha za pomocą interpolacji ciągów (np. @{color-var}). Jednak chciałbym również, aby uruchomić niektóre funkcje na zmiennych, coś takiego:

.gradient(~"linear-gradient(top, @{green} 0%, @{green} 50%, darken(@green, 10%) 50%, darken(@green, 10%) 100%)"); 

Problemem jest to, że nigdy nie jest kompilowany darken(@green, 10%), a niektóre przeglądarki po prostu zinterpretować ten kolor jako green. Czy ktoś zna poprawny sposób, aby zawrzeć powrót funkcji darken() wewnątrz powyższego ciągu, bez tworzenia oddzielnej zmiennej dla tego?

Dla porównania, próbowałem następujące bezskutecznie:

.gradient(~"linear-gradient(top, @{green} 0%, @{green} 50%, "darken(@green, 10%)" 50%, "darken(@green, 10%)" 100%)"); 
.gradient(~"linear-gradient(top, @{green} 0%, @{green} 50%, {darken(@{green}, 10%)} 50%, {darken(@{green}, 10%)} 100%)"); 
+0

wierzę „poprawny sposób włączenia zwrotu' przyciemnić() ' funkcja wewnątrz łańcucha "jest _nie to_ (to znaczy, nie wierzę, że funkcje LESS mogą _currently_ być zawarte w łańcuchu i pracy, nie ma" interpolacji funkcji "). – ScottS

Odpowiedz

11

To powinno działać, jak to jest pierwszym podejściem, ale powinny również zawierać ~:

.gradient(~"linear-gradient(top, @{green} 0%, @{green} 50%, " darken(@green, 10%) ~" 50%, " darken(@green, 10%) ~" 100%)"); 
+0

Hmm, to wydaje się nie działać. Na przykład: '.gradient (~" gradient liniowy (u góry, @ {zielony} 0%, "przyciemnienie (@green, 10%) ~" 100%) ");' kompiluje do 'gradientu liniowego (u góry, # 77cc33 0%,, # 5fa329, 100%); 'zauważ błędne przecinki ... – BenM

+0

@BenM: Tylko FYI, to musi być problem z samym mixinem LESSHat (coś, co robi z wartością ciągu), jak tylko z perspektywy tworzenia sznurka, dodatkowe przecinki się nie pojawiają. Myślę, że jest to właściwie poprawny sposób na uzyskanie tego, co chcesz (nawet jeśli nie używa on technicznie funkcji w ciągu znaków). – ScottS

+2

@ScottS dzięki za komentarze. Zbadałem problem i wygląda na to, że masz całkowitą rację. Problem polega raczej na mixin od LESSHata, niż na rozwiązaniu dostarczonym przez Lipisa. – BenM

3

Czy próbowali zapisaniem przyciemniony kolor do zmiennej w pierwszej kolejności? Tak:

@darkened-green: darken(@green, 10%); 
.gradient(~"linear-gradient(top, @{green} 0%, @{green} 50%, @{darkened-green} 50%, @{darkened-green} 100%)"); 
+0

Tak, to działa oczywiście. Proszę zobaczyć moją oddzielną notatkę w pytaniu, chociaż: * Czy ktoś zna poprawny sposób dołączyć powrót funkcji darken() wewnątrz powyższego ciągu, ** bez tworzenia oddzielnej zmiennej ** dla tego? * – BenM

Powiązane problemy