Bird
Raised Fist0
SASSmarkup~8 mins

CSS custom properties vs SASS variables - Performance Comparison

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Performance: CSS custom properties vs SASS variables
MEDIUM IMPACT
This concept affects how CSS values are processed and updated in the browser, impacting rendering speed and dynamic style changes.
Using variables for theming colors in styles
SASS
:root {
  --primary-color: #3498db;
}
.button {
  background-color: var(--primary-color);
}

// Can change --primary-color dynamically with JavaScript without reload
CSS custom properties are handled by the browser at runtime, allowing dynamic updates without recompiling or reloading.
📈 Performance GainNo reflow on variable change if used in paint-only properties; enables smooth theme switching
Using variables for theming colors in styles
SASS
$primary-color: #3498db;
.button {
  background-color: $primary-color;
}

// To change color dynamically, need to recompile CSS
SASS variables are replaced during build, so changing them requires recompiling CSS and reloading the page.
📉 Performance CostBlocks rendering until CSS is loaded; no runtime flexibility
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
SASS variables (static)None at runtime0Minimal[OK] Good for static styles
CSS custom properties (dynamic)None unless JS changes styles0-1 per changeLow if used for paint-only properties[!] OK with dynamic updates
Rendering Pipeline
SASS variables are replaced during CSS preprocessing, so the browser only sees static CSS. CSS custom properties are parsed and stored by the browser, allowing runtime updates that can trigger style recalculation and repaint.
Style Calculation
Paint
Composite
⚠️ BottleneckStyle Calculation when custom properties change dynamically
Core Web Vital Affected
CLS
This concept affects how CSS values are processed and updated in the browser, impacting rendering speed and dynamic style changes.
Optimization Tips
1Use SASS variables for static values to avoid runtime overhead.
2Use CSS custom properties for values that need to change dynamically in the browser.
3Avoid changing custom properties that affect layout to minimize reflows.
Performance Quiz - 3 Questions
Test your performance knowledge
Which variable type allows changing styles dynamically in the browser without recompiling CSS?
ABoth require recompiling
BCSS custom properties
CSASS variables
DNeither can change dynamically
DevTools: Performance
How to check: Record a performance profile while toggling CSS custom properties via JavaScript; observe style recalculation and paint events.
What to look for: Look for style recalculation and paint times; minimal layout thrashing indicates good use of custom properties.

Practice

(1/5)
1. Which of the following is true about CSS custom properties compared to SASS variables?
easy
A. SASS variables start with -- and are dynamic in the browser.
B. SASS variables start with -- and work in the browser at runtime.
C. CSS custom properties start with $ and are replaced before the browser sees CSS.
D. CSS custom properties start with -- and work in the browser at runtime.

Solution

  1. Step 1: Identify CSS custom properties syntax

    CSS custom properties always start with -- and are live in the browser, meaning they can be changed dynamically.
  2. Step 2: Identify SASS variables syntax and behavior

    SASS variables start with $ and are replaced during the build process, so they don't exist in the browser.
  3. Final Answer:

    CSS custom properties start with -- and work in the browser at runtime. -> Option D
  4. Quick Check:

    CSS variables = -- prefix and runtime [OK]
Hint: CSS vars use -- and work live; SASS vars use $ and compile away [OK]
Common Mistakes:
  • Confusing $ and -- prefixes
  • Thinking SASS variables work in the browser
  • Assuming CSS variables are replaced before runtime
2. Which is the correct way to declare a SASS variable for a color?
easy
A. primary-color: #3498db;
B. --primary-color: #3498db;
C. $primary-color: #3498db;
D. $primary-color == #3498db;

Solution

  1. Step 1: Recall SASS variable syntax

    SASS variables start with $ and use a colon : to assign values.
  2. Step 2: Check each option

    $primary-color: #3498db; uses correct syntax. --primary-color: #3498db; uses the CSS custom property prefix. primary-color: #3498db; omits the $ prefix. $primary-color == #3498db; uses double equals which is invalid.
  3. Final Answer:

    $primary-color: #3498db; -> Option C
  4. Quick Check:

    SASS variable = $name: value; [OK]
Hint: SASS vars start with $ and use colon for assignment [OK]
Common Mistakes:
  • Using -- instead of $ for SASS variables
  • Using == instead of : for assignment
  • Omitting $ prefix
3. Given the following code, what color will the text be in the browser?
:root { --main-color: red; }
.box { color: var(--main-color); }
$main-color: blue;
.box2 { color: $main-color; }
medium
A. Both .box and .box2 text will be red
B. .box text will be red; .box2 text will be blue
C. .box text will be blue; .box2 text will be red
D. Both .box and .box2 text will be blue

Solution

  1. Step 1: Understand CSS custom property usage

    The --main-color is set to red in :root. The class .box uses var(--main-color), so it will be red at runtime.
  2. Step 2: Understand SASS variable usage

    The SASS variable $main-color is blue and used in .box2. This is replaced during compilation, so .box2 color will be blue in the final CSS.
  3. Final Answer:

    .box text will be red; .box2 text will be blue -> Option B
  4. Quick Check:

    CSS var = red; SASS var = blue [OK]
Hint: CSS vars live in browser; SASS vars replaced before browser sees CSS [OK]
Common Mistakes:
  • Thinking SASS variables work at runtime
  • Confusing which variable affects which class
  • Assuming CSS variables are replaced before runtime
4. What is wrong with this SASS code snippet?
$color: green;
.text { color: var($color); }
medium
A. The var() function is only for CSS custom properties, not SASS variables.
B. The variable name should start with -- instead of $.
C. SASS variables cannot be used inside var() function.
D. The color value green is invalid.

Solution

  1. Step 1: Understand var() function usage

    The var() function is a CSS function used only for CSS custom properties (those starting with --).
  2. Step 2: Understand SASS variable usage

    SASS variables start with $ and are used directly without var(). Using var($color) is invalid because var() expects a CSS custom property name.
  3. Final Answer:

    The var() function is only for CSS custom properties, not SASS variables. -> Option A
  4. Quick Check:

    var() = CSS vars only, not SASS [OK]
Hint: Use $var directly in SASS; var() only for CSS custom properties [OK]
Common Mistakes:
  • Using var() with SASS variables
  • Confusing $ and -- prefixes
  • Thinking var() works for SASS variables
5. You want to create a theme where users can switch colors dynamically in the browser. Which approach is best and why?
$primary-color: #0055ff;
:root { --primary-color: #0055ff; }
hard
A. Use CSS custom property --primary-color because it can change dynamically in the browser.
B. Use SASS variable $primary-color because it compiles faster.
C. Use both SASS and CSS variables together for better performance.
D. Use inline styles instead of variables for dynamic changes.

Solution

  1. Step 1: Understand dynamic changes in the browser

    CSS custom properties (starting with --) live in the browser and can be changed with JavaScript or media queries without recompiling CSS.
  2. Step 2: Understand SASS variable limitations

    SASS variables are replaced during build time and cannot change after the CSS is loaded, so they are not suitable for dynamic theming.
  3. Final Answer:

    Use CSS custom property --primary-color because it can change dynamically in the browser. -> Option A
  4. Quick Check:

    Dynamic theme = CSS vars [OK]
Hint: Dynamic changes need CSS vars; SASS vars are static [OK]
Common Mistakes:
  • Choosing SASS variables for runtime changes
  • Thinking both together improve dynamic behavior
  • Ignoring CSS custom properties' runtime flexibility