Css display property set to inherit with variable doesn't work









up vote
1
down vote

favorite












I set the display property for divs to in
line-block
. I then created four classes:



  • no-var, which sets display to inherit

  • var, which sets display to a variable set to inherit

  • var-none, which sets display to a variable set to none

  • var-default, which sets display to a variable set to inherit and a default of grid

The actual style that is used by each class doesn't seem to be correct, though:



  • The no-var class correctly inherits display to block

  • The var class doesn't get the inherit value from the variable and displays as inline-block

  • The var-none class correctly sets display to none and is hidden

  • The var-default class doesn't get the inherit value from the variable and sets display to the default

For each of these classes I added variables and defaults for the color property, which all work as expected. Are variables supposed to ignore inherit and unset values?






:root 
--display: inherit;
--display-none: none;
--color: red;

div
display: inline-block;
color: green;

.no-var
display: inherit;
color: red;

.var
display: var(--display);
color: var(--color);

.var-none
display: var(--display-none);

.var-default
display: var(--display, grid);
color: var(--color, purple);

<div class="no-var">
No variable
</div>
<div class="no-var">
No variable
</div>
<div class="var">
Variable
</div>
<div class="var">
Variable
</div>
<div class="var-none">
None
</div>
<div class="var-none">
None
</div>
<div class="var-default">
Default
</div>
<div class="var-default">
Default
</div>












share|improve this question



























    up vote
    1
    down vote

    favorite












    I set the display property for divs to in
    line-block
    . I then created four classes:



    • no-var, which sets display to inherit

    • var, which sets display to a variable set to inherit

    • var-none, which sets display to a variable set to none

    • var-default, which sets display to a variable set to inherit and a default of grid

    The actual style that is used by each class doesn't seem to be correct, though:



    • The no-var class correctly inherits display to block

    • The var class doesn't get the inherit value from the variable and displays as inline-block

    • The var-none class correctly sets display to none and is hidden

    • The var-default class doesn't get the inherit value from the variable and sets display to the default

    For each of these classes I added variables and defaults for the color property, which all work as expected. Are variables supposed to ignore inherit and unset values?






    :root 
    --display: inherit;
    --display-none: none;
    --color: red;

    div
    display: inline-block;
    color: green;

    .no-var
    display: inherit;
    color: red;

    .var
    display: var(--display);
    color: var(--color);

    .var-none
    display: var(--display-none);

    .var-default
    display: var(--display, grid);
    color: var(--color, purple);

    <div class="no-var">
    No variable
    </div>
    <div class="no-var">
    No variable
    </div>
    <div class="var">
    Variable
    </div>
    <div class="var">
    Variable
    </div>
    <div class="var-none">
    None
    </div>
    <div class="var-none">
    None
    </div>
    <div class="var-default">
    Default
    </div>
    <div class="var-default">
    Default
    </div>












    share|improve this question

























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I set the display property for divs to in
      line-block
      . I then created four classes:



      • no-var, which sets display to inherit

      • var, which sets display to a variable set to inherit

      • var-none, which sets display to a variable set to none

      • var-default, which sets display to a variable set to inherit and a default of grid

      The actual style that is used by each class doesn't seem to be correct, though:



      • The no-var class correctly inherits display to block

      • The var class doesn't get the inherit value from the variable and displays as inline-block

      • The var-none class correctly sets display to none and is hidden

      • The var-default class doesn't get the inherit value from the variable and sets display to the default

      For each of these classes I added variables and defaults for the color property, which all work as expected. Are variables supposed to ignore inherit and unset values?






      :root 
      --display: inherit;
      --display-none: none;
      --color: red;

      div
      display: inline-block;
      color: green;

      .no-var
      display: inherit;
      color: red;

      .var
      display: var(--display);
      color: var(--color);

      .var-none
      display: var(--display-none);

      .var-default
      display: var(--display, grid);
      color: var(--color, purple);

      <div class="no-var">
      No variable
      </div>
      <div class="no-var">
      No variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-default">
      Default
      </div>
      <div class="var-default">
      Default
      </div>












      share|improve this question















      I set the display property for divs to in
      line-block
      . I then created four classes:



      • no-var, which sets display to inherit

      • var, which sets display to a variable set to inherit

      • var-none, which sets display to a variable set to none

      • var-default, which sets display to a variable set to inherit and a default of grid

      The actual style that is used by each class doesn't seem to be correct, though:



      • The no-var class correctly inherits display to block

      • The var class doesn't get the inherit value from the variable and displays as inline-block

      • The var-none class correctly sets display to none and is hidden

      • The var-default class doesn't get the inherit value from the variable and sets display to the default

      For each of these classes I added variables and defaults for the color property, which all work as expected. Are variables supposed to ignore inherit and unset values?






      :root 
      --display: inherit;
      --display-none: none;
      --color: red;

      div
      display: inline-block;
      color: green;

      .no-var
      display: inherit;
      color: red;

      .var
      display: var(--display);
      color: var(--color);

      .var-none
      display: var(--display-none);

      .var-default
      display: var(--display, grid);
      color: var(--color, purple);

      <div class="no-var">
      No variable
      </div>
      <div class="no-var">
      No variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-default">
      Default
      </div>
      <div class="var-default">
      Default
      </div>








      :root 
      --display: inherit;
      --display-none: none;
      --color: red;

      div
      display: inline-block;
      color: green;

      .no-var
      display: inherit;
      color: red;

      .var
      display: var(--display);
      color: var(--color);

      .var-none
      display: var(--display-none);

      .var-default
      display: var(--display, grid);
      color: var(--color, purple);

      <div class="no-var">
      No variable
      </div>
      <div class="no-var">
      No variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-default">
      Default
      </div>
      <div class="var-default">
      Default
      </div>





      :root 
      --display: inherit;
      --display-none: none;
      --color: red;

      div
      display: inline-block;
      color: green;

      .no-var
      display: inherit;
      color: red;

      .var
      display: var(--display);
      color: var(--color);

      .var-none
      display: var(--display-none);

      .var-default
      display: var(--display, grid);
      color: var(--color, purple);

      <div class="no-var">
      No variable
      </div>
      <div class="no-var">
      No variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var">
      Variable
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-none">
      None
      </div>
      <div class="var-default">
      Default
      </div>
      <div class="var-default">
      Default
      </div>






      html css css3 css-variables






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 8 at 19:15









      Temani Afif

      59k93472




      59k93472










      asked Nov 8 at 18:19









      GammaGames

      649




      649






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










          In such situation, inherit is used as a value for the custom property and will not be evaluted to the inherit value using var().



          Here is a basic example to understand the issue:






          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          Note how in the second case we have a blue color because the custom property inherited this value from the top div then it's getting evaluted to that value. In the first case, we will use the default color because there is nothing to inherit.



          enter image description here



          In other words, inherit will be considered for the custom property and not for the property where you will evalute the custom property using var(). You will not find a custom property with a computed value equal to inherit BUT with a computed value equal to the inherited value.




          From the specification:




          Custom properties are ordinary properties, so they can be declared on any element, are resolved with the normal inheritance and cascade rules







          share|improve this answer






















          • That's interesting and makes sense when explained like that, thank you!
            – GammaGames
            Nov 8 at 21:24










          • @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
            – Temani Afif
            yesterday










          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',
          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%2f53213870%2fcss-display-property-set-to-inherit-with-variable-doesnt-work%23new-answer', 'question_page');

          );

          Post as a guest






























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          2
          down vote



          accepted










          In such situation, inherit is used as a value for the custom property and will not be evaluted to the inherit value using var().



          Here is a basic example to understand the issue:






          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          Note how in the second case we have a blue color because the custom property inherited this value from the top div then it's getting evaluted to that value. In the first case, we will use the default color because there is nothing to inherit.



          enter image description here



          In other words, inherit will be considered for the custom property and not for the property where you will evalute the custom property using var(). You will not find a custom property with a computed value equal to inherit BUT with a computed value equal to the inherited value.




          From the specification:




          Custom properties are ordinary properties, so they can be declared on any element, are resolved with the normal inheritance and cascade rules







          share|improve this answer






















          • That's interesting and makes sense when explained like that, thank you!
            – GammaGames
            Nov 8 at 21:24










          • @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
            – Temani Afif
            yesterday














          up vote
          2
          down vote



          accepted










          In such situation, inherit is used as a value for the custom property and will not be evaluted to the inherit value using var().



          Here is a basic example to understand the issue:






          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          Note how in the second case we have a blue color because the custom property inherited this value from the top div then it's getting evaluted to that value. In the first case, we will use the default color because there is nothing to inherit.



          enter image description here



          In other words, inherit will be considered for the custom property and not for the property where you will evalute the custom property using var(). You will not find a custom property with a computed value equal to inherit BUT with a computed value equal to the inherited value.




          From the specification:




          Custom properties are ordinary properties, so they can be declared on any element, are resolved with the normal inheritance and cascade rules







          share|improve this answer






















          • That's interesting and makes sense when explained like that, thank you!
            – GammaGames
            Nov 8 at 21:24










          • @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
            – Temani Afif
            yesterday












          up vote
          2
          down vote



          accepted







          up vote
          2
          down vote



          accepted






          In such situation, inherit is used as a value for the custom property and will not be evaluted to the inherit value using var().



          Here is a basic example to understand the issue:






          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          Note how in the second case we have a blue color because the custom property inherited this value from the top div then it's getting evaluted to that value. In the first case, we will use the default color because there is nothing to inherit.



          enter image description here



          In other words, inherit will be considered for the custom property and not for the property where you will evalute the custom property using var(). You will not find a custom property with a computed value equal to inherit BUT with a computed value equal to the inherited value.




          From the specification:




          Custom properties are ordinary properties, so they can be declared on any element, are resolved with the normal inheritance and cascade rules







          share|improve this answer














          In such situation, inherit is used as a value for the custom property and will not be evaluted to the inherit value using var().



          Here is a basic example to understand the issue:






          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          Note how in the second case we have a blue color because the custom property inherited this value from the top div then it's getting evaluted to that value. In the first case, we will use the default color because there is nothing to inherit.



          enter image description here



          In other words, inherit will be considered for the custom property and not for the property where you will evalute the custom property using var(). You will not find a custom property with a computed value equal to inherit BUT with a computed value equal to the inherited value.




          From the specification:




          Custom properties are ordinary properties, so they can be declared on any element, are resolved with the normal inheritance and cascade rules







          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>





          .box 
          --c:inherit;
          color:var(--c,red);

          <div>
          <div class="box">I am a text</div>
          </div>
          <div style="--c:blue">
          <div class="box">I am a text</div>
          </div>






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 2 days ago

























          answered Nov 8 at 18:59









          Temani Afif

          59k93472




          59k93472











          • That's interesting and makes sense when explained like that, thank you!
            – GammaGames
            Nov 8 at 21:24










          • @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
            – Temani Afif
            yesterday
















          • That's interesting and makes sense when explained like that, thank you!
            – GammaGames
            Nov 8 at 21:24










          • @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
            – Temani Afif
            yesterday















          That's interesting and makes sense when explained like that, thank you!
          – GammaGames
          Nov 8 at 21:24




          That's interesting and makes sense when explained like that, thank you!
          – GammaGames
          Nov 8 at 21:24












          @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
          – Temani Afif
          yesterday




          @GammaGames you can check this stackoverflow.com/questions/53239880/… in case you need a way to use inherit value within CSS variable
          – Temani Afif
          yesterday

















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53213870%2fcss-display-property-set-to-inherit-with-variable-doesnt-work%23new-answer', 'question_page');

          );

          Post as a guest














































































          這個網誌中的熱門文章

          How to read a connectionString WITH PROVIDER in .NET Core?

          Node.js Script on GitHub Pages or Amazon S3

          Museum of Modern and Contemporary Art of Trento and Rovereto