How do I convert a hexadecimal color to rgba with the Less compiler?

前端 未结 4 551
温柔的废话
温柔的废话 2020-12-07 13:16

I have the following code:

@color : #d14836;

.stripes span {
    -webkit-background-size: 30px 30px;
    -moz-background-size: 30px 30px;
    background-siz         


        
相关标签:
4条回答
  • 2020-12-07 14:03

    My Less mixin:

    .background-opacity(@color, @opacity) {
        @rgba-color: rgba(red(@color), green(@color), blue(@color), @opacity);
    
        background-color: @rgba-color;
    
        // Hack for IE8:
        background: none\9; // Only Internet Explorer 8
        filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d')", argb(@rgba-color),argb(@rgba-color))); // Internet Explorer 9 and down
        // Problem: Filter gets applied twice in Internet Explorer 9.
        // Solution:
        &:not([dummy]) {
          filter: progid:DXImageTransform.Microsoft.gradient(enabled='false'); // Only IE9
        }
    }
    

    Try it.

    EDITED: As seen on rgba background with IE filter alternative: IE9 renders both!, I added some lines to the mixin.

    0 讨论(0)
  • 2020-12-07 14:10

    If you don't need an alpha key, you can simply use the hexadecimal representation of the color. An rgba color with a alpha of '1' is the same as the hexadecimal value.

    Here are some examples to demonstrate that:

    @baseColor: #d14836;
    
    html {
        color: @baseColor;
        /* color:#d14836; */
    }
    
    body {
        color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 1);
        /* color:#d14836; */
    }
    
    div {
        color: rgba(red(@baseColor), green(@baseColor), blue(@baseColor), 0.5);
        /* rgba(209, 72, 54, 0.5); */
    }
    
    span {
        color: fade(@baseColor, 50%);
        /* rgba(209, 72, 54, 0.5); */
    }
    
    h3 {
        color: fade(@baseColor, 100%)
        /* color:#d14836; */
    }
    

    Test this code online: http://lesstester.com/

    0 讨论(0)
  • 2020-12-07 14:13

    It seems that with the recent Less update 3.81, you can use just two arguments in the rgba() function.

    rgba(white, 0.3) or rgba(white, 30%) => rgba(255, 255, 255, 0.3)
    

    It works for me, but I can't find it in the official documentation.

    0 讨论(0)
  • 2020-12-07 14:22

    Actually, the Less language comes with an embedded function called fade. You pass a color object and the absolute opacity % (higher value means less transparent):

    fade(@color, 50%);   // Return @color with 50% opacity in rgba
    
    0 讨论(0)
提交回复
热议问题