在Less中减轻父母的颜色

Ger*_*obs 2 less

我开始使用Less和我想要的原因之一是因为l​​igthen()函数.所以我的第一次尝试是对此做点什么.

这是我的HTML

<div class="box blue">
    <div class="boxbar">Foo</div>
    blue
</div>
Run Code Online (Sandbox Code Playgroud)

我终于让它工作了,但我怀疑它应该是这样的:

@blue:   #468ACE;
@green:  #41A53D;
@red:    #9C2525;
@purple: #8938BF;

div 
{
    padding: 10px;
}

.blue { 
    background-color: @blue; 
    .boxbar { background-color: lighten(@blue, 10%); }
}
.green { 
    background-color: @green; 
    .boxbar { background-color: lighten(@green, 10%); }
}
.red { 
    background-color: @red; 
    .boxbar { background-color: lighten(@red, 10%); }
}
.purple { 
    background-color: @purple; 
    .boxbar { background-color: lighten(@purple, 10%); }
}

.boxbar 
{
    height: 10px;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能重构这个?当然,更容易说"获得你的父色,并稍微减轻它".我尝试了几件事:继承(值得一试!),在.boxcar中有减轻版本.但这显然编译为.boxcar .blue ..这不是我想要的,我结束了你在这里可以看到的东西..它的作用..但它感觉不对.然后我需要为我介绍的每种新颜色编写代码.

Mar*_*jak 14

我不完全确定你想要的解决方案是什么......但也许像制作mixin会让你不得不写出这么多东西.

减:

.bgmixin(@color) {
    (~".@{color}") {
        background-color: @@color;
        .boxbar {
            background-color: lighten(@@color, 10%);
        }
    }
}

@blue: #468ACE;
@green: #41A53D;
@red: #9C2525;

.bgmixin("blue");
.bgmixin("green");
.bgmixin("red");
Run Code Online (Sandbox Code Playgroud)

CSS:

.blue{
  background-color: #468ace;
}
.blue .boxbar {
  background-color: #6ea3d9;
}
.green{
  background-color: #41a53d;
}
.green .boxbar {
  background-color: #59c055;
}
.red{
  background-color: #9c2525;
}
.red .boxbar{
  background-color: #c52f2f;
}
Run Code Online (Sandbox Code Playgroud)

更新:

LESS> = 1.4中,您可能希望使用类似的内容从颜色名称中插入类名:

.bgmixin(@color) {
    @classname: ~"@{color}"; 
    .@{classname} {
        background-color: @@color;
        .boxbar {
            background-color: lighten(@@color, 10%);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1很好地使用了mixin中的`@@`参考功能.很有创意. (4认同)