Checking if a variable is defined in SASS
For Sass 3.3 and later
As of Sass 3.3 there is a variable-exists()
function. From the changelog:
- It is now possible to determine the existence of different Sass constructs using these new functions:
variable-exists($name)
checks if a variable resolves in the current scope.global-variable-exists($name)
checks if a global variable of the given name exists. ...
Example usage:
$some_variable: 5;
@if variable-exists(some_variable) {
/* I get output to the CSS file */
}
@if variable-exists(nonexistent_variable) {
/* But I don't */
}
For Sass 3.2.x and earlier (my original answer)
I ran into the same problem today: trying to check if a variable is set, and if so adding a style, using a mixin, etc.
After reading that an isset()
function isn't going to be added to sass, I found a simple workaround using the !default
keyword:
@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;
}
}
If false
is a valid value for your variable, you can use:
@mixin my_mixin() {
$base-color: null !default;
@if $base-color != null {
color: $base-color;
}
}
Just as a complementary answer - you should have a look on the default
keyword for certain use cases. It gives you the possibility to assign a default value to variables in case they are not defined yet.
You can assign to variables if they aren’t already assigned by adding the !default flag to the end of the value. This means that if the variable has already been assigned to, it won’t be re-assigned, but if it doesn’t have a value yet, it will be given one.
Example:
In specific-variables.scss you have:
$brand: "My Awesome Brand";
In default-variables.scss you have:
$brand: company-name !default;
$brand-color: #0074BE !default;
Your project is built like this:
@import "specific-variables.scss"; @import "default-variables.scss"; @import "style.scss";
The value of brand will be My Awesome Brand and the value of brand color will be #0074BE.