【问题标题】:LESS - set 3 variables depending on another variable's valueLESS - 根据另一个变量的值设置 3 个变量
【发布时间】:2013-05-07 15:09:05
【问题描述】:

我有一个接受两个参数的 mixin:

.build-logo(ab, 200px);

第一个是我们产品的首字母缩写词字符串,第二个是所需徽标的正方形宽度/高度。我需要的是一组受保护的 mixin 来测试第一个参数的值 - 但这是我对 LESS 的了解不足的地方。

我认为它需要是这样的,但我无法理解语法:

.set-logo-colors() when (@acronym = 'ab') {
    @first-color: red;
    @second-color: green;
    @third-color: blue;
}

那么上面声明的3个颜色变量需要在前面提到的.build-logo()mixin中可用。

欢迎任何帮助、提示或建议。谢谢!

【问题讨论】:

    标签: less mixins guard


    【解决方案1】:

    您可以编写特定于参数的 mixin 而不是使用守卫,例如:

    .set-logo-colors(ab) {
        @first-color: red;
        @second-color: green;
        @third-color: blue;
    }
    .set-logo-colors(bc) {
        @first-color: orange;
        @second-color: blue;
        @third-color: gray;
    }
    

    当你传递正确的参数时将被执行。

    为了详细说明这种方法,您可以执行以下操作:

    .logo(@product) {
        .set-logo-colors(@product);
        .build-logo(@product, 200px);
    }
    

    让我们说 build-logo 看起来像这样

    .build-logo(@a, @b) {
        product: @a;
        width: @b;
        color: @first-color;
    }
    

    通过调用

    .logo(ac);
    

    你得到:

    product: ab;
    width: 200px;
    color: #ff0000;
    

    不止一种产品:

    会有一个问题,如果你调用多个产品,颜色变量已经设置好了

    .logo(bc);
    

    将返回:

    product: bc;
    width: 200px;
    color: #ff0000;
    

    这不是我们想要的。

    所以最好从一组多参数混合开始:

    .build-logo(@a, @b, @color1, @color2, @colo3) {
        product: @a;
        width: @b;
        color: @color1;
    }
    
    .logo(ab, @size) {
        .build-logo (ab, @size, red, green, blue);
    }
    
    .logo(bc, @size) {
        .build-logo (bc, @size, green, orange, gray);
    }
    

    现在打电话

    .logo(ab, 200px);
    

    提供与上述相同的输出,但在为另一个产品调用它时不会重叠/覆盖任何内容。所以:

    .logo(bc,200px);
    

    返回:

    product: bc;
    width: 200px;
    color: #008000;
    

    【讨论】:

    • 优秀的答案马丁,很多信息要考虑。我会尝试其中一些想法并回来!
    • 很高兴能提供帮助。 less2css.org 是一个快速尝试事物的好地方...我非常喜欢玩各种想法。
    • 这个一般的想法是要走的路。事实证明我遇到了范围问题,因此将事情分解为 3 个相关的 mixin 解决了这个问题,而无需重复太多代码。一个 mixin 用默认颜色/大小构建 logo,一个测试 @product 变量的值并设置新颜色,最后一个 mixin 将这些颜色应用于必要的规则,以防止一遍又一遍地重复它们。当我有时间修改这个过程时,我会用成品编辑我的原始问题。
    【解决方案2】:

    尝试不同的方法:

    .build-logo(@acronym, @width) when (@acronym = 'ab') {
        background-color: red;
    }
    .build-logo(@acronym, @width) when (@acronym = 'cd') {
        background-color: blue;
    }
    .build-logo(@acronym, @width) {
        background-color: green;
    }
    

    【讨论】:

    • 感谢@MarZab 的建议,当您回答时,我正在尝试类似的事情。不幸的是,它并没有像我希望的那样顺利,因为它最终要求我编写大量重复的代码。
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2014-10-06
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多