Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更少的CSS预处理器:有没有办法将单一颜色映射到rgb和rgba定义?_Ruby On Rails_Css_Ruby_Less - Fatal编程技术网

Ruby on rails 更少的CSS预处理器:有没有办法将单一颜色映射到rgb和rgba定义?

Ruby on rails 更少的CSS预处理器:有没有办法将单一颜色映射到rgb和rgba定义?,ruby-on-rails,css,ruby,less,Ruby On Rails,Css,Ruby,Less,我正在尝试在CSS预处理器中编写一个块,它将执行以下操作: @transparent_background(@color; @alpha: .8) { background: @color; background: rgba(<color R value>, <color G value>, <color B value>, @alpha); } 试试这个: background: @color - rgba(0, 0, 0, 1.0) + rgba

我正在尝试在CSS预处理器中编写一个块,它将执行以下操作:

@transparent_background(@color; @alpha: .8)
{
  background: @color;
  background: rgba(<color R value>, <color G value>, <color B value>, @alpha);
}
试试这个:

background: @color - rgba(0, 0, 0, 1.0) + rgba(0, 0, 0, @alpha);
减法将清除
@color
上的alpha通道,然后您只需将所需的
@alpha
添加到alpha通道。颜色具有全套操作符,当在两种颜色上操作时,它们会逐个组件地工作;颜色在内部存储为RGBA组件,因此应该可以正常工作。此外,alpha通道标准化为间隔
[0,1.0]
,因此从alpha通道中减去1.0应该可以清除它,而不会导致任何问题


我现在没有设置CSS LESS,所以我无法检查,但这值得一试。

所有解决方案都不再有效,但这一个可以(感谢):


hsla()
功能虽然未在LESS网站上公布,但已定义。

请注意,您也可以继续使用LESS的fadein/fadeout功能:

.alpha(@color, @alpha: 80)
{
    background-color: fadeout(@color, (100 - @alpha));
}

因此,.alpha(红色,25)将导致背景色为rgba(255,0,0,0.25)

我知道这是一个老问题,但如果您只想添加一个alpha值,只需使用
淡入(@color,@alpha)
。颜色可以是十六进制、rgba或hsla。

因为@Color只是一个十六进制定义,所以不需要先减去alpha通道。所以解决方案很简单:@color+rgba(0,0,0,alpha)。回想起来似乎很明显,但我没有意识到你可以像那样混合使用十六进制/rgba。我只是有点偏执,试图证明阿尔法通道修改的未来性,因此,通过减法将alpha通道强制进入已知状态,以便将
@alpha
添加到它将导致alpha通道等于
@alpha
。作为一个额外的好处,它使您更清楚地分配alpha通道,而不仅仅是对其进行一点调整。至少在LESSHPP中,没有任何检查来防止alpha通道变为负值。真的吗?如果我使用LESSHPP,我会修复它并提交补丁。负alpha没有多大意义(可能是“用黑色蜡笔使劲按”?),而规范的Ruby实现将alpha限制为
[0,1]
。OTOH,这说明了在没有正式规范的情况下工作的问题。+1,很好!附言:我绝对喜欢新的安全性较低的混音D
.alpha(@color, @alpha: 0.8) {
    color: @color;
    color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha);
}
.alpha(@color, @alpha: 80)
{
    background-color: fadeout(@color, (100 - @alpha));
}