Can I add a classname to a CSS variable?Add table row in jQuerySet cellpadding and cellspacing in CSS?Is there a CSS parent selector?When to use margin vs padding in CSSChange an HTML5 input's placeholder color with CSSHow can I transition height: 0; to height: auto; using CSS?How do CSS triangles work?How do I vertically center text with CSS?Sass Variable in CSS calc() functionIs it possible to apply CSS to half of a character?

Why is it a bad idea to hire a hitman to eliminate most corrupt politicians?

What do you call someone who asks many questions?

Is it possible to create a QR code using text?

Why was Sir Cadogan fired?

Does int main() need a declaration on C++?

Pact of Blade Warlock with Dancing Blade

how do we prove that a sum of two periods is still a period?

How can saying a song's name be a copyright violation?

What is the most common color to indicate the input-field is disabled?

Is it possible to map the firing of neurons in the human brain so as to stimulate artificial memories in someone else?

Why are UK visa biometrics appointments suspended at USCIS Application Support Centers?

Are British MPs missing the point, with these 'Indicative Votes'?

Did 'Cinema Songs' exist during Hiranyakshipu's time?

How badly should I try to prevent a user from XSSing themselves?

files created then deleted at every second in tmp directory

Avoiding the "not like other girls" trope?

Can I hook these wires up to find the connection to a dead outlet?

How to stretch the corners of this image so that it looks like a perfect rectangle?

GFCI outlets - can they be repaired? Are they really needed at the end of a circuit?

How exploitable/balanced is this homebrew spell: Spell Permanency?

Can a virus destroy the BIOS of a modern computer?

OP Amp not amplifying audio signal

What's the meaning of "Sollensaussagen"?

How do I exit BASH while loop using modulus operator?



Can I add a classname to a CSS variable?


Add table row in jQuerySet cellpadding and cellspacing in CSS?Is there a CSS parent selector?When to use margin vs padding in CSSChange an HTML5 input's placeholder color with CSSHow can I transition height: 0; to height: auto; using CSS?How do CSS triangles work?How do I vertically center text with CSS?Sass Variable in CSS calc() functionIs it possible to apply CSS to half of a character?













11















Is it possible to add a classname to a CSS variable or is there some other way to set it up so that I don't have to manipulate each individual variable directly via javascript? I'd like to keep all my styles in CSS and simply turn on relevant classes with JS. For example, If something like this was possible in CSS:



:root.white --bgcol:#FFF; --col:#000; 
:root.black --bgcol:#000; --col:#FFF;


Then I could then just toggle the .black or .white class from javascript to trigger all vars to change. What's the best approach for this type of setup?










share|improve this question



















  • 1





    apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

    – Temani Afif
    2 days ago












  • appy to body or some wrappping div instead of :root...

    – kukkuz
    2 days ago












  • The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

    – BoltClock
    2 days ago












  • @BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

    – Temani Afif
    2 days ago






  • 3





    @Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

    – BoltClock
    2 days ago















11















Is it possible to add a classname to a CSS variable or is there some other way to set it up so that I don't have to manipulate each individual variable directly via javascript? I'd like to keep all my styles in CSS and simply turn on relevant classes with JS. For example, If something like this was possible in CSS:



:root.white --bgcol:#FFF; --col:#000; 
:root.black --bgcol:#000; --col:#FFF;


Then I could then just toggle the .black or .white class from javascript to trigger all vars to change. What's the best approach for this type of setup?










share|improve this question



















  • 1





    apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

    – Temani Afif
    2 days ago












  • appy to body or some wrappping div instead of :root...

    – kukkuz
    2 days ago












  • The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

    – BoltClock
    2 days ago












  • @BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

    – Temani Afif
    2 days ago






  • 3





    @Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

    – BoltClock
    2 days ago













11












11








11


2






Is it possible to add a classname to a CSS variable or is there some other way to set it up so that I don't have to manipulate each individual variable directly via javascript? I'd like to keep all my styles in CSS and simply turn on relevant classes with JS. For example, If something like this was possible in CSS:



:root.white --bgcol:#FFF; --col:#000; 
:root.black --bgcol:#000; --col:#FFF;


Then I could then just toggle the .black or .white class from javascript to trigger all vars to change. What's the best approach for this type of setup?










share|improve this question
















Is it possible to add a classname to a CSS variable or is there some other way to set it up so that I don't have to manipulate each individual variable directly via javascript? I'd like to keep all my styles in CSS and simply turn on relevant classes with JS. For example, If something like this was possible in CSS:



:root.white --bgcol:#FFF; --col:#000; 
:root.black --bgcol:#000; --col:#FFF;


Then I could then just toggle the .black or .white class from javascript to trigger all vars to change. What's the best approach for this type of setup?







javascript css css3 css-variables






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 2 days ago







cronoklee

















asked 2 days ago









cronokleecronoklee

3,32953666




3,32953666







  • 1





    apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

    – Temani Afif
    2 days ago












  • appy to body or some wrappping div instead of :root...

    – kukkuz
    2 days ago












  • The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

    – BoltClock
    2 days ago












  • @BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

    – Temani Afif
    2 days ago






  • 3





    @Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

    – BoltClock
    2 days ago












  • 1





    apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

    – Temani Afif
    2 days ago












  • appy to body or some wrappping div instead of :root...

    – kukkuz
    2 days ago












  • The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

    – BoltClock
    2 days ago












  • @BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

    – Temani Afif
    2 days ago






  • 3





    @Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

    – BoltClock
    2 days ago







1




1





apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

– Temani Afif
2 days ago






apply this to the body instead of the root element and your done. CSS variable doesn't need to be defined in root

– Temani Afif
2 days ago














appy to body or some wrappping div instead of :root...

– kukkuz
2 days ago






appy to body or some wrappping div instead of :root...

– kukkuz
2 days ago














The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

– BoltClock
2 days ago






The convention has always been to define global custom properties in :root, even if nobody knows or has ever questioned why. Deviating from convention presents no benefits whatsoever.

– BoltClock
2 days ago














@BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

– Temani Afif
2 days ago





@BoltClock true, but in this case where we need to consider class switching better target body or html where it's easy to manipulate with JS.

– Temani Afif
2 days ago




3




3





@Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

– BoltClock
2 days ago





@Temani Afif: Not understanding :root is not a reason to avoid using it or to break convention in ways that could potentially break stylesheets (specificity, inheritance, etc). It is a reason to learn about it so you can make the most out of it.

– BoltClock
2 days ago












2 Answers
2






active

oldest

votes


















8














That's frankly the best (as in most idiomatic) approach — the use of class names, if not altogether separate stylesheets (as has been tradition for many, many years), to theme entire layouts via custom properties. It's the most "fundamentally CSS" approach with JavaScript merely being the glue that makes the theme switching work. You really can't do much better than that.



For those unaware what :root means and wondering where exactly the class names are being applied, it's the html element (the parent of body). So there is nothing special going on here — you're simply switching class names on the html element. It just happens that global custom properties are conventionally defined for the document root element since it's at the top level of the inheritance chain.



If you have any theme-agnostic custom properties, as well as style properties (i.e. not custom properties) that apply to the root element, keep them in their own unqualified :root rule, separate from your themed custom properties, so they won't be affected by theme switching. Here's an example:






const root = document.documentElement;

// Default theme - should assign declaratively in markup, not JS
// For a classless default theme, move its custom properties to unqualified :root
// Again, keep it separate from the other :root rule that contains non-theme props
// Remember, the cascade is your friend, not the enemy
root.classList.add('white');

document.querySelector('button').addEventListener('click', function()
root.classList.toggle('white');
root.classList.toggle('black');
);

:root 
--spacing: 1rem;
color: var(--col);
background-color: var(--bgcol);


:root.white
--bgcol: #FFF;
--col: #000;


:root.black
--bgcol: #000;
--col: #FFF;


p
margin: var(--spacing);
border: thin dashed;
padding: var(--spacing);

<button>Switch themes</button>
<p>Hello world!








share|improve this answer

























  • Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

    – cronoklee
    2 days ago












  • I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

    – BoltClock
    2 days ago











  • Did you design the unicorn for today

    – Sombrero Chicken
    2 days ago











  • I damn right knew it.

    – Sombrero Chicken
    2 days ago











  • @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

    – wizzwizz4
    2 days ago


















2














Using :root selector is identical to using html, except its specifity is higher, thus there is no issues in using this approach.



For example:



:root 
--bg: red;

:root.blue
--bg: blue;

// ...
div
background: var(--bg);



Later, you should just change html's class and variables will change.



You can see an example in this fiddle.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55439391%2fcan-i-add-a-classname-to-a-css-variable%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    8














    That's frankly the best (as in most idiomatic) approach — the use of class names, if not altogether separate stylesheets (as has been tradition for many, many years), to theme entire layouts via custom properties. It's the most "fundamentally CSS" approach with JavaScript merely being the glue that makes the theme switching work. You really can't do much better than that.



    For those unaware what :root means and wondering where exactly the class names are being applied, it's the html element (the parent of body). So there is nothing special going on here — you're simply switching class names on the html element. It just happens that global custom properties are conventionally defined for the document root element since it's at the top level of the inheritance chain.



    If you have any theme-agnostic custom properties, as well as style properties (i.e. not custom properties) that apply to the root element, keep them in their own unqualified :root rule, separate from your themed custom properties, so they won't be affected by theme switching. Here's an example:






    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!








    share|improve this answer

























    • Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

      – cronoklee
      2 days ago












    • I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

      – BoltClock
      2 days ago











    • Did you design the unicorn for today

      – Sombrero Chicken
      2 days ago











    • I damn right knew it.

      – Sombrero Chicken
      2 days ago











    • @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

      – wizzwizz4
      2 days ago















    8














    That's frankly the best (as in most idiomatic) approach — the use of class names, if not altogether separate stylesheets (as has been tradition for many, many years), to theme entire layouts via custom properties. It's the most "fundamentally CSS" approach with JavaScript merely being the glue that makes the theme switching work. You really can't do much better than that.



    For those unaware what :root means and wondering where exactly the class names are being applied, it's the html element (the parent of body). So there is nothing special going on here — you're simply switching class names on the html element. It just happens that global custom properties are conventionally defined for the document root element since it's at the top level of the inheritance chain.



    If you have any theme-agnostic custom properties, as well as style properties (i.e. not custom properties) that apply to the root element, keep them in their own unqualified :root rule, separate from your themed custom properties, so they won't be affected by theme switching. Here's an example:






    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!








    share|improve this answer

























    • Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

      – cronoklee
      2 days ago












    • I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

      – BoltClock
      2 days ago











    • Did you design the unicorn for today

      – Sombrero Chicken
      2 days ago











    • I damn right knew it.

      – Sombrero Chicken
      2 days ago











    • @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

      – wizzwizz4
      2 days ago













    8












    8








    8







    That's frankly the best (as in most idiomatic) approach — the use of class names, if not altogether separate stylesheets (as has been tradition for many, many years), to theme entire layouts via custom properties. It's the most "fundamentally CSS" approach with JavaScript merely being the glue that makes the theme switching work. You really can't do much better than that.



    For those unaware what :root means and wondering where exactly the class names are being applied, it's the html element (the parent of body). So there is nothing special going on here — you're simply switching class names on the html element. It just happens that global custom properties are conventionally defined for the document root element since it's at the top level of the inheritance chain.



    If you have any theme-agnostic custom properties, as well as style properties (i.e. not custom properties) that apply to the root element, keep them in their own unqualified :root rule, separate from your themed custom properties, so they won't be affected by theme switching. Here's an example:






    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!








    share|improve this answer















    That's frankly the best (as in most idiomatic) approach — the use of class names, if not altogether separate stylesheets (as has been tradition for many, many years), to theme entire layouts via custom properties. It's the most "fundamentally CSS" approach with JavaScript merely being the glue that makes the theme switching work. You really can't do much better than that.



    For those unaware what :root means and wondering where exactly the class names are being applied, it's the html element (the parent of body). So there is nothing special going on here — you're simply switching class names on the html element. It just happens that global custom properties are conventionally defined for the document root element since it's at the top level of the inheritance chain.



    If you have any theme-agnostic custom properties, as well as style properties (i.e. not custom properties) that apply to the root element, keep them in their own unqualified :root rule, separate from your themed custom properties, so they won't be affected by theme switching. Here's an example:






    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!








    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!





    const root = document.documentElement;

    // Default theme - should assign declaratively in markup, not JS
    // For a classless default theme, move its custom properties to unqualified :root
    // Again, keep it separate from the other :root rule that contains non-theme props
    // Remember, the cascade is your friend, not the enemy
    root.classList.add('white');

    document.querySelector('button').addEventListener('click', function()
    root.classList.toggle('white');
    root.classList.toggle('black');
    );

    :root 
    --spacing: 1rem;
    color: var(--col);
    background-color: var(--bgcol);


    :root.white
    --bgcol: #FFF;
    --col: #000;


    :root.black
    --bgcol: #000;
    --col: #FFF;


    p
    margin: var(--spacing);
    border: thin dashed;
    padding: var(--spacing);

    <button>Switch themes</button>
    <p>Hello world!






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 2 days ago

























    answered 2 days ago









    BoltClockBoltClock

    529k13011711208




    529k13011711208












    • Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

      – cronoklee
      2 days ago












    • I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

      – BoltClock
      2 days ago











    • Did you design the unicorn for today

      – Sombrero Chicken
      2 days ago











    • I damn right knew it.

      – Sombrero Chicken
      2 days ago











    • @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

      – wizzwizz4
      2 days ago

















    • Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

      – cronoklee
      2 days ago












    • I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

      – BoltClock
      2 days ago











    • Did you design the unicorn for today

      – Sombrero Chicken
      2 days ago











    • I damn right knew it.

      – Sombrero Chicken
      2 days ago











    • @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

      – wizzwizz4
      2 days ago
















    Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

    – cronoklee
    2 days ago






    Very cool and exactly what I wanted. It's funny I was so close with my hypothetical. I had no idea :root was just the html tag. Thanks!

    – cronoklee
    2 days ago














    I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

    – BoltClock
    2 days ago





    I considered that after the conversation under your question, so I figured it wouldn't hurt to add a primer. I'm glad I did now, and glad you learned something new.

    – BoltClock
    2 days ago













    Did you design the unicorn for today

    – Sombrero Chicken
    2 days ago





    Did you design the unicorn for today

    – Sombrero Chicken
    2 days ago













    I damn right knew it.

    – Sombrero Chicken
    2 days ago





    I damn right knew it.

    – Sombrero Chicken
    2 days ago













    @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

    – wizzwizz4
    2 days ago





    @BoltClock Shouldn't you use classList.toggle in order to avoid breaking other class use on the element?

    – wizzwizz4
    2 days ago













    2














    Using :root selector is identical to using html, except its specifity is higher, thus there is no issues in using this approach.



    For example:



    :root 
    --bg: red;

    :root.blue
    --bg: blue;

    // ...
    div
    background: var(--bg);



    Later, you should just change html's class and variables will change.



    You can see an example in this fiddle.






    share|improve this answer



























      2














      Using :root selector is identical to using html, except its specifity is higher, thus there is no issues in using this approach.



      For example:



      :root 
      --bg: red;

      :root.blue
      --bg: blue;

      // ...
      div
      background: var(--bg);



      Later, you should just change html's class and variables will change.



      You can see an example in this fiddle.






      share|improve this answer

























        2












        2








        2







        Using :root selector is identical to using html, except its specifity is higher, thus there is no issues in using this approach.



        For example:



        :root 
        --bg: red;

        :root.blue
        --bg: blue;

        // ...
        div
        background: var(--bg);



        Later, you should just change html's class and variables will change.



        You can see an example in this fiddle.






        share|improve this answer













        Using :root selector is identical to using html, except its specifity is higher, thus there is no issues in using this approach.



        For example:



        :root 
        --bg: red;

        :root.blue
        --bg: blue;

        // ...
        div
        background: var(--bg);



        Later, you should just change html's class and variables will change.



        You can see an example in this fiddle.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 2 days ago









        StyxStyx

        4,67562737




        4,67562737



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55439391%2fcan-i-add-a-classname-to-a-css-variable%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Bulk add to cart function issuecart vs. mini cart issue … rwd themeRedirect Add to cart button to cart pageAdd to cart issue - Magento 2.1The requested Payment Method is not available When creating an orderM2: reason add-to-cart might not function in production modeAdd to cart issue in some android devicesMagento 2 - custom price can not add to subtotal and grand total after add to cartAdd to cart codeIssue with my cart module on pdp and cart pages, just keeps spinningBulk price and quantity update using rest api

            БиармияSxpst500bh2ntaf! 3h2r