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

 48
Author: locrizak, 2011-12-15

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;
  }
}
 96
Author: RobW,
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