Is it possible to change only the alpha of a rgba background colour on hover?

后端 未结 14 2205
离开以前
离开以前 2020-11-29 07:04
相关标签:
14条回答
  • 2020-11-29 07:46

    It's now 2017 and this is now possible with

    CSS custom properties / CSS Variables (Caniuse)

    One classic use case for CSS variables is the ability to individualize parts of a property's value.

    So here, instead of repeating the whole rgba expression once again - we split up or 'individulaize' the rgba values into 2 parts / variables (one for the rgb value and one for the alpha)

    .brown { 
      --rgb: 118, 76, 41; 
    }
    .green {
      --rgb: 51, 91, 11;
    }
    .brown, .green {
      --alpha: 0.3;
      background-color: rgba(var(--rgb), var(--alpha));
    }
    

    Then, on hover we can now just modify the --alpha variable:

    a:hover .green, a:hover .brown {
      --alpha: 1;
    }
    

    a {
      display: block;
      position: relative;
    }
    .brown { 
      --rgb: 118, 76, 41; 
    }
    .green {
      --rgb: 51, 91, 11;
    }
    .brown, .green {
      display: inline-block;
      --alpha: 0.3;
      background-color: rgba(var(--rgb), var(--alpha));
      font-size: 40px;
      margin: 20px;
    }
    
    a:hover .green, a:hover .brown {
      --alpha: 1;
    }
    <a href="#">
      <div class="brown">Link 1</div>
    </a>
    <a href="#">
      <div class="green">Link 2</div>
    </a>

    Codepen

    Further reading:

    Individualizing CSS Properties with CSS Variables (Dan Wilson)

    0 讨论(0)
  • 2020-11-29 07:50

    This is now possible with custom properties:

    .brown { --rgb: 118, 76, 41; }
    .green { --rgb: 51, 91, 11; }
    
    a { display: block; position: relative; }
    div { position: absolute; bottom: 0; background-color: rgba(var(--rgb), 0.8); }
    a:hover div { background-color: rgba(var(--rgb), 1); }
    

    To understand how this works, see How do I apply opacity to a CSS color variable?

    If custom properties are not an option, see the original answer below.


    Unfortunately, no, you'll have to specify the red, green and blue values again for each individual class:

    a { display: block; position: relative; }
    
    .brown { position: absolute; bottom: 0; background-color: rgba(118, 76, 41, 0.8); }
    a:hover .brown { background-color: rgba(118, 76, 41, 1); }
    
    .green { position: absolute; bottom: 0; background-color: rgba(51, 91, 11, 0.8); }
    a:hover .green { background-color: rgba(51, 91, 11, 1); }
    

    You can only use the inherit keyword alone as a value for the property, and even then the use of inherit isn't appropriate here.

    0 讨论(0)
提交回复
热议问题