2012-02-28 55 views
3

我将rgba值存储为变量(例如:@black: rgba(0, 0, 0, 1.0);),并且我意识到如果可以使alpha值可变,那将会很好。函数可以返回*只是一个rgba值吗?

所以,我想这..

.color_black (@alpha: 1.0) { rgba(0, 0, 0, @alpha) } 

的问题很简单,这是行不通的。参数部分似乎是正确的,事实上,只有在添加rgba()代码后,它似乎才会“中断”。不太确实不喜欢rgba调用。

现在我可以通过定义属性标记,例如,使这项工作..

.color_black (@alpha: 1.0) { color: rgba(0, 0, 0, @alpha) } 

但是,这种失败的存储的单一颜色,并在重新使用全城的实用性。在背景,文字,渐变等

所以,有关如何解决这个问题的任何想法?

编辑:虽然我不满意这点无论是..这是最好的解决方案,我可以想出..

.color_black (@prop: color, @alpha: 1.0) { @prop: rgba(0, 0, 0, @alpha) } 

这不是有用的功能,因为你不能在其他属性(渐变等)中使用它。思考?

回答

7

看一看的色彩功能:http://lesscss.org/#-color-functions

我觉得‘褪色’是你在找什么。只需设置你的颜色为变量...

@black: #000000; 

...和使用fade()

color: fade(@black, 80%); 
+0

这是得心应手,并且很可能是我最终会做的,如果我的文章没有工作.., 但随着你的评论,这是否意味着我想这样做是行不通的方法? – 2012-02-29 00:51:05

+0

不是我所知道的。 – 2012-02-29 01:38:51

2

你面临这个问题可能是因为RGBA()是一个internal function in less; hsla()也是如此。

要使用混入作为将变量如所期望的功能,你需要使用mixins as functions feature,象下面这样:

// mixin 
.toRGBA(@color, @alpha) { 
    @color_plus_alpha: rgba(red(@color), green(@color), blue(@color), @alpha); //[A] 
} 


// usage 
.someClass { 
    .toRGBA(orange, 0.3); // [B] 
    color: @color_plus_alpha; // [C] 
} 

这里美中不足的是所添加的线[B],并且事实你总是需要使用[C]中变量@color_plus_alpha,该变量在[A]行中的混合中定义。

该作品在该编辑的时间,并输出以下内容:

.someClass { 
    color: rgba(255, 165, 0, 0.3); 
} 

然而,这仍然不能让你的混入的“输出”分配给作为OP的欲望任意可变。请注意,红色(),绿色()和蓝色()也是内部函数,分别输出输入颜色的红色,绿色和蓝色分量。

编辑:更新了答案是有点可重用。以前的版本只能用于硬编码属性名称color

+0

我遇到了多种方法的问题。将我的mixin名称从.rgba()更改为其他名称后,它就起作用了。 – 2013-11-14 22:29:34

+0

重新考虑了这一点,并意识到我的答案并未真正解决OP的问题,并更新了答案以接近OP希望使用当前版本更少(2.5.0)的方式。任何建议,以获得OP想要的是什么,欢迎。 – 2015-05-19 11:59:16

相关问题