Open In App

SASS @if and @else

Last Updated : 07 Oct, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

SASS provides flow control mechanisms similar to JavaScript, allowing you to conditionally compile CSS code based on logical expressions. Using @if, @else, and @else if, you can create dynamic styles that change based on the values passed to your mixins or variables.

@if Directive

The @if directive works similarly to conditional statements in programming languages. If the expression inside the @if block evaluates to true, the block is compiled; otherwise, it’s skipped.

Syntax:

@if <conditional_expression> {
// styles go here
}

Example 1: Using @if in a SASS Mixin

In this example, we create a mixin that formats a button, and we conditionally apply a border-radius if the button is meant to be round.

@mixin button-format( $round-button, $size ) {
    color: white;
    background-color: blue;
    width: $size;

    @if $round-button {
        height: $size;
        border-radius: $size / 2; 
    }
}

.mybutton{
    @include button-format(false, 100px);
}
Compiled CSS file
.mybutton {
  color: white;
  background-color: blue;
  width: 100px;
}

Here, the @if condition checks if $round-button is true. Since we passed false, the conditional block is not executed, resulting in a square button.

Example 2: Applying @if for Round Buttons

If we change the argument to true, the button becomes round.

SASS File:

@mixin button-format( $round-button, $size ) {
    color: white;
    background-color: blue;
    width: $size;

    @if $round-button {
        height: $size;
        border-radius: $size / 2; 
    }
}


.mybutton{
    @include button-format(true, 100px);
}
Compiled CSS file
.mybutton {
    color: white;
    background-color: blue;
    width: 100px;
    height: 100px;
    border-radius: 50px;
}

@else Directive

The @else block is executed when all the previous @if and @else if conditions evaluate to false. It’s a fallback option that runs when no other conditions are met.

Syntax:

@else {
// styles go here
}

Example: Using @else for Conditional Theme

Here’s a mixin that applies different background colors based on the value of the $theme-decide variable. The @else block will be executed if the condition in the @if block is false.

SASS File:

@mixin theme ($theme-decide, $r, $g, $b) {
    // light background
    @if $theme-decide {
        background-color: rgba($r, $g, $b, 0.5);
    }
    // dark background
    @else {
        background-color: rgba($r, $g, $b, 1); // red color
    }

}

.myblock {
    @include theme(false, 255, 0, 0);
}
Compiled CSS file:
.myblock {
    background-color: red;
    // if true value is passed then rgba(255, 0, 0, 0.5);
}

In this case, since $theme-decide is false, the @else block is executed, resulting in a dark background (fully opaque red).

@else if Directive

The @else if directive allows for multiple conditional branches. It’s used when you need to check for multiple conditions sequentially. The first @else if condition that evaluates to true is executed, and the remaining blocks are skipped.

Syntax:

@else if <conditional_expression> { ... }

Example: Multiple Themes with @else if

In this example, we create a mixin that supports three different themes: light, medium-dark, and dark. We use @if, @else if, and @else to handle each theme based on the value of $theme-decide.

SASS File:

@mixin theme ($theme-decide, $r, $g, $b) {
    // light background
    @if $theme-decide == 1 {
        background-color: rgba($r, $g, $b, 0.5);
    }
    // medium-dark background
    @else if $theme-decide == 2 {
        background-color: rgba($r, $g, $b, 0.7);
    }
    // dark background
    @else {
        background-color: rgba($r, $g, $b, 1);
    }

}

.myblock {
    @include theme(2, 0, 255, 0);
}
Compiled CSS file:
.myblock {
  background-color: rgba(0, 255, 0, 0.7);
}


Similar Reads