less - 限制混合值并在提供无效值时抛出异常

标签 less less-mixins

我有以下 Less 混入:

.box-sizing(@value) {
    -webkit-box-sizing: @value;
    -moz-box-sizing: @value;
    box-sizing: @value;
}

我只想允许值“border-box”和“content-box”作为参数,否则 Less 引擎应该抛出异常。我怎样才能做到这一点?因为如果没有这个验证,我可以向 mixin 写入任何值,它会工作,但它也会生成无效的 CSS,没有人会注意到有错误。

最佳答案

据我所知,没有办法让 Less 编译器针对所讨论的无效值抛出错误。但是,您可以使用 guards feature 使 Less 编译器在提供无效值时根本不产生任何输出。 .

在下面的代码片段中,仅当两个有效值中的任何一个作为输入传递时才会调用 mixin。如果提供不同的值,Less 编译器将找不到匹配项,因此不会输出任何内容。

.box-sizing(@value){
    & when (@value=content-box) , (@value=border-box){ /* comma is the or operator */
        -webkit-box-sizing: @value;
        -moz-box-sizing: @value;
        box-sizing: @value;
    }
}
#demo{
    .box-sizing(content-box);
}

Less 也有一些内置的 type functions它可以与守卫一起使用来检查值是否有效(比如输入是数字还是颜色等)。还有一个 iskeyword 函数,但这些函数都不会检查无效的 CSS 值。


如果您有一个广泛的有效值列表,那么您可以使用如下所示的循环功能。在这里,我们从有效值数组中提取每个值,如果输入值与其中一个匹配,我们就输出属性。如果输入与任何输入值都不匹配,则(再次)不输出任何内容。

@valid-values: content-box, border-box, padding-box;
.box-sizing(@value){
    .loop-valid-values(@index) when (@index > 0){
        @valid-value: extract(@valid-values, @index);
        & when (@value= @valid-value){
            -webkit-box-sizing: @value;
            -moz-box-sizing: @value;
            box-sizing: @value;
        }
        .loop-valid-values(@index - 1);
    }
    .loop-valid-values(length(@valid-values));
}
#demo{
    .box-sizing(content-box);
}

严格不推荐,但如果您坚持让编译器在提供无效值时抛出一些异常,那么您可能会故意在 not-valid-value 中引入错误 部分。

.box-sizing(@value){
    & when (@value= content-box), (@value= border-box){
        -webkit-box-sizing: @value;
        -moz-box-sizing: @value;
        box-sizing: @value;
    }
    & when not (@value= content-box), (@value= border-box){
        output: @bwahahaha; /* there is no such variable and hence when the input value is not valid, compiler will complain that variable is undefined */
    }
}
#demo{
    .box-sizing(conten-box);
}

关于less - 限制混合值并在提供无效值时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556401/

相关文章:

css - 使用 mixins 时 Bootstrap 2 列问题

css - !important 在混合中

css - 对评估的字符串颜色应用颜色函数

LESS CSS 网格混合

css - Less mixin 中带参数的动态类名

less - 有条件地根据另一个变量设置一个变量的值

less - 使用 LESS mixin 添加供应商前缀

css - Less css - Id with variable, google plus, cover all

css - Flexbox 在移动设备上被忽略

eclipse - 保存Grails项目时自动刷新浏览器?