Próbuję użyć interpolacji ciągów w mojej zmiennej, aby odwołać się do innej zmiennej:
// Set up variable and mixin
$foo-baz: 20px;
@mixin do-this($bar) {
width: $foo-#{$bar};
}
// Use mixin by passing 'baz' string as a param for use $foo-baz variable in the mixin
@include do-this('baz');
Ale kiedy to robię, pojawia się następujący błąd:
Niezdefiniowana zmienna: „$ foo-”.
Czy Sass obsługuje zmienne w stylu PHP?
W rzeczywistości jest to możliwe przy użyciu map SASS zamiast zmiennych. Oto krótki przykład:
Dynamiczne tworzenie odniesień:
Wyniki jako:
Tworzymy dynamicznie:
Wyniki jako:
źródło
Zawsze, gdy potrzebuję wartości warunkowej, opieram się na funkcjach. Oto prosty przykład.
źródło
@include do-this($foo);
? ... jednak miałoby to sens, gdyby funkcja faktycznie coś zrobiła, ale tylko przechodzi ...Oto inna opcja, jeśli pracujesz z szynami i prawdopodobnie w innych okolicznościach.
Jeśli dodasz .erb na końcu rozszerzenia pliku, Railsy przetworzą plik erb przed wysłaniem go do interpretera SASS. Daje ci to szansę robienia tego, co chcesz w Rubim.
Na przykład: (File: foo.css.scss.erb)
Wyniki w następującym scss:
Co, ogólnie rzecz biorąc, daje następujący CSS:
źródło
Ostatnio natrafiłem na potrzebę dynamicznego odwoływania się do koloru.
Mam plik _colours.scss dla każdego projektu, w którym raz definiuję wszystkie kolory i odnoszę się do nich jako zmiennych w całym tekście.
W moim pliku _forms.scss chciałem ustawić style przycisków dla każdego dostępnego koloru. Zwykle żmudne zadanie. Pomogło mi to uniknąć konieczności pisania tego samego kodu dla każdego koloru.
Jedynym minusem jest to, że przed zapisaniem właściwego css musisz podać każdą nazwę koloru i wartość.
źródło
Utworzenie zmiennej dynamicznej nie jest obecnie możliwe w SASS, ponieważ będziesz dodawać / podłączać inny var, który musi zostać przeanalizowany raz po uruchomieniu polecenia sass.
Jak tylko polecenie zostanie uruchomione, zgłosi błąd dotyczący Nieprawidłowego CSS, ponieważ wszystkie zadeklarowane zmienne będą podążać za podnoszeniem.
Po uruchomieniu nie można ponownie deklarować zmiennych w locie
Aby wiedzieć, że to zrozumiałem, powiedz, czy poniższe stwierdzenia są poprawne:
chcesz zadeklarować zmienne, w których następna część (słowo) jest dynamiczna
coś jak
$list: 100 200 300; @each $n in $list { $font-$n: normal $n 12px/1 Arial; } // should result in something like $font-100: normal 100 12px/1 Arial; $font-200: normal 200 12px/1 Arial; $font-300: normal 300 12px/1 Arial; // So that we can use it as follows when needed .span { font: $font-200; p { font: $font-100 } }
Jeśli tego chcesz, obawiam się, że na razie nie jest to dozwolone
źródło