Bird
Raised Fist0
SASSmarkup~5 mins

Variable scope (global vs local) in SASS

Choose your learning style10 modes available
Introduction

Variable scope tells us where a variable can be used in our styles. It helps keep styles organized and avoid mistakes.

When you want to reuse a color or size in many places.
When you want a variable to only affect styles inside a specific block.
When you want to change a variable temporarily inside a function or mixin.
When you want to avoid accidentally changing a variable used elsewhere.
When you want to keep your code clean and easy to understand.
Syntax
SASS
$variable-name: value; // global

@mixin example {
  $variable-name: new-value !global; // change global variable inside mixin
}

.selector {
  $variable-name: local-value; // local variable inside selector
}

Variables declared outside any block are global by default.

Use !global to change a global variable inside a nested block.

Examples
This uses a global variable $color inside a selector.
SASS
$color: blue;

.button {
  color: $color; // uses global blue
}
Inside .button, $color is local and red. Outside, it stays blue.
SASS
$color: blue;

.button {
  $color: red;
  color: $color; // uses local red
}

.alert {
  color: $color; // uses global blue
}
The mixin changes the global $color to green using !global.
SASS
$color: blue;

@mixin change-color {
  $color: green !global;
}

@include change-color;

.alert {
  color: $color; // now green
}
Sample Program

This code shows two boxes. The .button uses a local $main-color of red. The .alert uses the global $main-color which is blue.

SASS
$main-color: blue;

.button {
  $main-color: red;
  background-color: $main-color;
  color: white;
  padding: 1rem;
  border-radius: 0.5rem;
}

.alert {
  background-color: $main-color;
  color: white;
  padding: 1rem;
  border-radius: 0.5rem;
}
OutputSuccess
Important Notes

Local variables only exist inside the block where they are declared.

Global variables can be read anywhere but to change them inside a block, use !global.

Using scopes helps avoid accidentally changing variables used in other parts of your styles.

Summary

Global variables are set outside blocks and can be used anywhere.

Local variables are set inside blocks and only work there.

Use !global to update a global variable inside a nested block.

Practice

(1/5)
1. Which statement about Sass variable scope is true?
$color: red; declared outside any block means:
easy
A. The variable cannot be used unless declared inside a selector.
B. The variable is local and only works inside the block it is declared in.
C. The variable is global and can be used anywhere in the stylesheet.
D. The variable must be declared with !local to be used globally.

Solution

  1. Step 1: Understand where the variable is declared

    The variable $color: red; is declared outside any selector or block, making it global.
  2. Step 2: Recall Sass variable scope rules

    Global variables can be accessed anywhere in the stylesheet, inside or outside blocks.
  3. Final Answer:

    The variable is global and can be used anywhere in the stylesheet. -> Option C
  4. Quick Check:

    Global variable outside blocks = accessible everywhere [OK]
Hint: Variables outside blocks are global by default [OK]
Common Mistakes:
  • Thinking variables outside blocks are local
  • Confusing !global with !local
  • Assuming variables need special flags to be global
2. Which Sass syntax correctly updates a global variable $font-size inside a nested block?
easy
A. Inside block: $font-size: 2rem;
B. Outside block: $font-size: 2rem !local;
C. Inside block: !global $font-size: 2rem;
D. Inside block: $font-size: 2rem !global;

Solution

  1. Step 1: Identify how to update global variables inside blocks

    To update a global variable inside a nested block, you must add !global after the value.
  2. Step 2: Check each option's syntax

    Inside block: $font-size: 2rem !global; uses $font-size: 2rem !global; which is correct Sass syntax for updating global variables inside blocks.
  3. Final Answer:

    Inside block: $font-size: 2rem !global; -> Option D
  4. Quick Check:

    Use !global to update global variables inside blocks [OK]
Hint: Add !global after value to update global inside blocks [OK]
Common Mistakes:
  • Forgetting !global and only assigning value locally
  • Using !local which is invalid
  • Placing !global before variable name
3. What color will the p text be in this Sass code?
$color: blue;

p {
  $color: red;
  color: $color;
}
medium
A. Blue
B. Red
C. Undefined (error)
D. Inherits from body

Solution

  1. Step 1: Identify variable scopes

    $color is set globally to blue, but inside p block, a local $color is set to red.
  2. Step 2: Determine which $color is used in color: $color;

    Inside the block, the local $color (red) overrides the global one.
  3. Final Answer:

    Red -> Option B
  4. Quick Check:

    Local variable overrides global inside blocks [OK]
Hint: Local variables override global inside blocks [OK]
Common Mistakes:
  • Assuming global variable is used inside block
  • Thinking Sass throws error for local variable
  • Confusing inheritance with variable scope
4. Find the error in this Sass code that tries to update a global variable inside a nested block:
$padding: 10px;

.container {
  $padding: 20px;
  padding: $padding;
}
medium
A. Missing !global to update the global variable inside the block.
B. Variable $padding cannot be used inside blocks.
C. Global variables cannot be declared outside blocks.
D. The syntax for variable declaration is incorrect.

Solution

  1. Step 1: Analyze variable update inside block

    The code declares $padding: 20px; inside .container block without !global, so it creates a local variable instead of updating the global one.
  2. Step 2: Identify correct way to update global variable

    To update the global $padding inside the block, !global must be added: $padding: 20px !global;.
  3. Final Answer:

    Missing !global to update the global variable inside the block. -> Option A
  4. Quick Check:

    Use !global to update global variables inside blocks [OK]
Hint: Add !global to update global variables inside blocks [OK]
Common Mistakes:
  • Assuming local assignment updates global variable
  • Thinking variables can't be used inside blocks
  • Confusing variable declaration syntax
5. Given this Sass code, what will be the final value of $margin after compilation?
$margin: 5px;

.wrapper {
  $margin: 10px !global;
  .content {
    $margin: 15px;
  }
}

body {
  margin: $margin;
}
hard
A. 10px
B. 5px
C. 15px
D. Compilation error

Solution

  1. Step 1: Track global variable changes

    Initially, $margin is 5px globally. Inside .wrapper, $margin: 10px !global; updates the global variable to 10px.
  2. Step 2: Check nested block .content

    Inside .content, $margin: 15px; is local to that block and does not affect the global variable.
  3. Step 3: Determine value used in body

    The body selector uses the global $margin, which was updated to 10px.
  4. Final Answer:

    10px -> Option A
  5. Quick Check:

    !global updates global variable; local inside nested blocks doesn't [OK]
Hint: !global updates global; nested local variables don't affect global [OK]
Common Mistakes:
  • Assuming nested local variable changes global
  • Confusing variable values inside nested blocks
  • Expecting compilation error due to variable shadowing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard