Sprawdzanie, czy zmienna jest zdefiniowana w SASS
Jak mówi tytuł, próbuję sprawdzić, czy zmienna jest zdefiniowana w SASS. (Używam kompasu, jeśli to robi jakąś różnicę)
Znalazłem odpowiednik Ruby, który jest:
defined? foo
Dał strzał w ciemności, ale po prostu dał mi błąd:
defined": expected "{", was "?
Znalazłem pracę wokół (co jest oczywiście po prostu zdefiniować zmienną we wszystkich przypadkach, co w tym przypadku faktycznie ma większy sens), ale chciałbym wiedzieć, czy jest to możliwe dla future
1 answers
Dla Sass 3.3 i nowszych
Od Sass 3.3 istnieje funkcja variable-exists()
. Z changelog :
- możliwe jest teraz określenie istnienia różnych konstrukcji Sass przy użyciu tych nowych funkcji:
variable-exists($name)
sprawdza, czy zmienna rozwiązuje się w bieżącym zakresie.global-variable-exists($name)
sprawdza, czy zmienna globalna o danej nazwie istnieje. ...
Przykładowe użycie:
$some_variable: 5;
@if variable-exists(some_variable) {
/* I get output to the CSS file */
}
@if variable-exists(nonexistent_variable) {
/* But I don't */
}
Dla Sass 3.2.x i wcześniej (moja oryginalna odpowiedź)
Natknąłem się dziś na ten sam problem: próbuję sprawdzić, czy zmienna jest ustawiona, a jeśli tak, dodanie stylu, użycie mixin, itp.
Po przeczytaniu, że funkcja isset()
nie zostanie dodana do sass, znalazłem proste obejście za pomocą !default
słowo kluczowe:
@mixin my_mixin() {
// Set the variable to false only if it's not already set.
$base-color: false !default;
// Check the guaranteed-existing variable. If it didn't exist
// before calling this mixin/function/whatever, this will
// return false.
@if $base-color {
color: $base-color;
}
}
Jeśli false
jest poprawną wartością dla zmiennej, możesz użyć:
@mixin my_mixin() {
$base-color: null !default;
@if $base-color != null {
color: $base-color;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-19 18:51:41