如何使用Less编译器将HEX颜色转换为rgba?

chu*_*byk 124 css less

我有以下代码:

@color : #d14836;

.stripes span {
    -webkit-background-size: 30px 30px;
    -moz-background-size: 30px 30px;
    background-size: 30px 30px;
    background-image: -webkit-gradient(linear, left top, right bottom,
        color-stop(.25, rgba(209, 72, 54, 1)), color-stop(.25, transparent),
        color-stop(.5, transparent), color-stop(.5, rgba(209, 72, 54, 1)),
        color-stop(.75, rgba(209, 72, 54, 1)), color-stop(.75, transparent),
        to(transparent));
Run Code Online (Sandbox Code Playgroud)

我需要转换@colorrgba(209, 72, 54, 1).

所以我需要rgba(209, 72, 54, 1)在我的代码中用Less函数替换,该函数rgba()从我的@color变量生成值.

我怎么能用Less做这件事?

Ron*_*ert 337

实际上,LESS语言带有一个名为的嵌入式函数fade.传递颜色对象和绝对不透明度%(较高的值意味着透明度较低):

fade(@color, 50%);   // Return @color with 50% opacity in rgba
Run Code Online (Sandbox Code Playgroud)

  • @Soc回答了OP的问题,但是你给了我们答案,每个人都来这里找!谢谢! (41认同)
  • 对于记录,这是API中的缺陷.我每次想要使用它时都要查找它.他们明智地将现有的RGBA加入到像SASS那样的LESS调用中 - rgba(@ colorValue,.5),这样它就会输出与实际CSS rgba声明完全相同的hing.但是,嘿,那是我的吵闹.:) (5认同)
  • @mousio实际上,通过精确地选择"50%",正确的是透明度和不透明度.:) (2认同)

小智 99

如果您不需要阿尔法键,则只需使用颜色的十六进制表示即可.alpha为"1"的rgba颜色与十六进制值相同.以下是一些示例来说明:

@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; */
}
Run Code Online (Sandbox Code Playgroud)

在线测试此代码:http://lesstester.com/


hel*_*pse 12

我的混合物少了:

.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
    }
}
Run Code Online (Sandbox Code Playgroud)

试试吧.

编辑:正如在rgba背景上看到的IE过滤器替代:IE9渲染两者! 我在mixin中添加了一些行.