我应该如何使用其自身的价值重置变少(How should I reset a less variab

2019-10-21 12:03发布

我想创建一个rgba从少变颜色和结果分配给同一个变量,但我不能用下面的代码做到这一点。

@navbar-default-bg: rgba(red(@navbar-default-bg), green(@navbar-default-bg), blue(@navbar-default-bg), 0.9);

Answer 1:

上面的代码将导致以下错误被扔在编译:

NameError:对@导航栏默认-BG递归定义变量

因为这样更不是递归定义变量不会减少工作延迟加载的变量。 这意味着,该变量(在同一范围内),最后的定义将被使用的一个。 在您的例子这将导致一个错误,因为变量不能引用自身(以获得其最初申报价值)。

引用减网站:

当定义两次变量,该变量的最后的定义被使用,从当前范围向上搜索。 这是类似的,其中一个定义中的最后一个属性是用来确定值的CSS本身。


创造一个最好的方式rgba从给定的颜色值rgb颜色是使用内置的fade功能(如下图所示)。 不过需要注意的是,该值不能被分配回同一个变量。

@navbar-default-bg: rgb(255, 0, 0);

#sample{
    color: fade(@navbar-default-bg, 90%);
}

编译时会产生以下CSS输出上面更少的代码:

#sample {
    color: rgba(255, 0, 0, 0.9);
}

的,当然,像中提到你可以做一些这样的回答来排序的条件下达到复位的效果,但我个人的看法是,它是太多的复杂性和精力,可以很可能以不同的方式来实现的东西。

下面是这个问题的答案中提到的方法的样本实现调整,以适应这个问题。 ( 代码被添加下面只是在-情况下,链接变为无效。)

.init() {
    .inc-impl(rgb(255, 0, 0), 0.1); // set initial value
}
.init();
 .inc-impl(@new, @i) {
    .redefine() {
        @color: @new;
        @alpha: @i;
    }
}
.someSelector(@name) {
    .redefine(); // this sets the value of counter for this call only
    .inc-impl(rgba(red(@color), green(@color), blue(@color), @alpha), (@alpha + 0.1)); // this sets the value of counter for the next call 
    @className: ~"@{name}";
    .@{className}
    {
        color: @color;
    }
}
.someSelector("nameOfClass");
.someSelector("nameOfClass1");
.someSelector("nameOfClass2");


文章来源: How should I reset a less variable using its own value
标签: less