Colors 确定HSL变化以在另一种颜色中变换颜色

Colors 确定HSL变化以在另一种颜色中变换颜色,colors,less,hsl,Colors,Less,Hsl,我使用更少的,我想利用各种集成功能,只允许设置少数基本颜色,然后导出其他更改色调、饱和度、亮度、旋转、ecc的颜色 让我们设想一下,在我的着色程序中有以下两种颜色(本例中为浅绿色和深绿色): @primary-color: rgb(0,100,60); @secondary-color: rgb(185,215,50); 我只想显式地设置@原色,然后在适当的HSL转换后获得@副色。(例如变暗(hsl(90%、80%、50%、20%)) 有没有办法确定我必须对@原色应用什么hsl设置才

我使用更少的,我想利用各种集成功能,只允许设置少数基本颜色,然后导出其他更改色调、饱和度、亮度、旋转、ecc的颜色

让我们设想一下,在我的着色程序中有以下两种颜色(本例中为浅绿色和深绿色):

@primary-color:    rgb(0,100,60);
@secondary-color:  rgb(185,215,50); 
我只想显式地设置
@原色
,然后在适当的HSL转换后获得
@副色
。(例如
变暗(hsl(90%、80%、50%、20%)

有没有办法确定我必须对
@原色
应用什么hsl设置才能获得
@副色

换言之:

给定2个RGB颜色定义,是否有任何方法可以确定它们之间在色调、饱和度和亮度方面存在什么差异,从而将
@二次色
表示为
@原色
的变体


备注:如果需要,也可以借助Photoshop等外部工具。

以下是计算两种颜色的色调、饱和度和亮度值之间的差值,然后根据第一种颜色计算第二种颜色的方法

具体步骤如下:

  • 色差计算:使用
    Hue()
    Saturation()
    Lightness()
    函数计算两种给定颜色之间的色调、饱和度和明度差。此函数可以单独使用,仅输出差异
  • 根据原色得出次颜色:这是一个三步过程,如下所示:
    • 通过传递两种颜色之间的色调差异,使用
      spin()
      函数调整原色的色调
    • 根据不同,使用
      saturate()
      desaturate()
      函数调整色调调整颜色的饱和度(上一步)
    • 根据不同,使用
      变暗()
      变亮()
      功能调整饱和度调整颜色的亮度(从上一步开始)
这个答案在如何计算一种颜色和另一种颜色方面的适应性较小

@primary:rgb(0100,60);/*原色*/
@中学:rgb(185215,50);/*次要颜色*/
/*mixin以计算两种给定颜色之间的差异*/
.color diff(@color1;@color2){
@色调(@color2)-色调(@color1);
@饱和度差:饱和度(@color1)-饱和度(@color2);
@亮度差异:亮度(@color1)-亮度(@color2);
color1:@color1;color2:@color2;/*仅用于测试,可以删除*/
}
/*步骤1:混合以调整颜色之间的色调差异*/
.调整色调(@color;@diff){
@hueAdjusted:spin(@color,@hueDiff);
}
/*步骤2:混入以调整饱和度差*/
.在(@diff>0)时调整饱和度(@color;@diff){
@satAdjusted:去饱和(@color,abs(@diff));/*如果diff大于0,则去饱和*/
}
.调整饱和度(@color;@diff),而不是(@diff>0){
@satAdjusted:饱和(@color,abs(@diff));/*如果diff不大于0,则饱和*/
}
/*步骤3:混合以调整颜色之间的亮度差异*/
.在(@diff>0)时调整亮度(@color;@diff){
@亮度调整:变暗(@color,abs(@diff));/*如果diff大于0,则变暗*/
}
.当亮度不为(@diff>0)时,调整亮度(@color;@diff){
@亮度调整:变亮(@color,abs(@diff));/*否则变亮*/
}
div{
.色差(@初级;@次级);
.调整色调(@primary;@hueDiff);
.调整饱和度(@hueAdjusted;@saturationDiff);
.调整亮度(@satajusted;@lightnessDiff);
颜色:@亮度调整;/*最终输出值*/
}
编译的CSS:

div {
    color1: #00643c;
    color2: #b9d732;
    color: #b9d732;
}

如果您只想获得两种颜色之间的差异,那么您可以使用下面这样的循环来输出色调、饱和度和亮度值方面的差异

@color-list-1:rgb(0100,60),#B0BCA7,#ABCDEF;/*原色列表*/
@颜色列表-2:rgb(185215,50),#BADA55,#FEDCBA;/*二级颜色列表*/
#输出{
.循环颜色(@index)时(@index>0){
@主:提取(@color-list-1,@index);
@次要:提取(@color-list-2,@index);
.色差(@初级;@次级);
/*输出比较的值*/
颜色比较-@{index}+:~“色调差异:@{hueDiff}”;
颜色比较-@{index}+:~“饱和度差:@{saturationDiff}”;
颜色比较-@{index}+:~“明度差:@{lightnessDiff}”;
.循环颜色(@index-1);
}
.循环颜色(长度(@color-list-1));
}
上述代码将比较两个列表中的相应值,并输出其差异,如下所示:

#输出{
颜色比较-3:色调差异:-180,饱和度差异:-29.142857142857153%,明度差异:-5.882352941176478%;
颜色比较-2:色调差异:-19.849624060150404,饱和度差异:-50.70282063269439%,明度差异:10.196078431372548%;
颜色比较-1:色调差异:-85.0908,饱和度差异:32.65306122448979%,明度差异:-32.352941176470594%;
}

找到两者之间的差异是可能的,但我对这个问题有点困惑。要找出差异,你不需要指定两种颜色吗?如果是的话,为什么还要在原色的基础上再找到第二种颜色呢?@Harry:这是一个简化的例子,但是想象一下一个典型的网站着色器,它有许多不同的绿色和灰色。例如,目前我的网站使用4种“绿色”和5种“灰色”。如果我想把整个主题改成“红黄相间”,而不是“绿灰相间”