9

Problem

I have two scss variables places in colors.scss file, I want to update the variable colors only from javascript based on a logic,

if(day){
  // update $backgroundColor to white
}else{
  // update $backgroundColor to black
}

More info:

I have tried :export{} which is not working and also document.documentElement.style.setProperty using global css variables. I am using reactjs for frontend development.

Shujath
  • 846
  • 1
  • 8
  • 22

2 Answers2

12

You can assign css variable to $backgroundColor as

:root {
  --background-color: white;
}
$backgroundColor: var(--background-color);

and update variable in js as

 const day = true;
 const root = document.documentElement;
 root.style.setProperty('--background-color', day ? 'white' : 'black');
Shujath
  • 846
  • 1
  • 8
  • 22
Shyam
  • 1,364
  • 7
  • 13
2

You can't update scss variables since they are not exist in runtime (when JS is runs).

You can make 2 classes, one with each style, and apply one of the classes at runtime.

felixmosh
  • 32,615
  • 9
  • 69
  • 88
  • 2
    You are right in a way, we cannot update **scss** variables directly, thus having a css variable placeholder helps in dynamic updation. – Shujath Nov 07 '20 at 17:27