2 Less Parameter 一个默认为null

2 Less Parameter with one being null by default

嘿,我有两套图标样式。黑白

 settings-icon-white.png  or  settings-icon.png

现在我正在使用带有文本参数的 Less mixin:

 //The mixin
.icon-finder(@url){ 
  background-image: url("../images/icons/backend/@{url}-icon.png");
  background-size: cover;
}

//generated class:login-icon.png
.icon-login{
  .icon-finder(login);
}

现在的挑战是,如果参数通过 white,我还想选择 select 一个白色图标。有没有办法有一个默认的 null 参数,但如果需要可以使用?

例如:

.icon-finder(@url,@white){
   background-image: url("../images/icons/backend/@{url}-icon@{white}.png");
   background-position: center center;
}

但是我不想一直都是白色的,所以这个可以为null吗? @white = "" 我确实看到这个 @_used before - 对吗?

所以代码是这样的:

.icon-admin{
   .icon-finder(admin);
}
.icon-admin-white{
   .icon-finder(admin,white);
}

我错过了什么吗?提前致谢!

是的,您可以通过在 mixin 声明中指定它来为 mixin 参数设置默认值,如下面的代码块所示。 @white: '' 部分表示当调用中未提供任何值时,mixin 会将 @white 的值作为空字符串。

.icon-finder(@url,@white: ''){
   background-image: url("../images/icons/backend/@{url}-icon@{white}.png");
   background-position: center center;
}
.icon-admin{
   .icon-finder(admin);
}
.icon-admin-white{
   .icon-finder(admin,white);
}

无需使用 link 中提到的 @_ 语法。


请注意,如果您正在编写类似 mixin 库的东西,并且想将第二个参数的值限制为白色或什么都没有(上面的 mixin 允许您为第二个参数发送任何值),那么您可以使用一个还有以下选项:

选项 1: 两个单独的混合,一个具有硬编码的 white 值(注意它不是变量),另一个只有一个参数。这样,如果用户试图传递任何其他值,它将被拒绝。

.icon-finder(@url,white) {
   background-image: url("../images/icons/backend/@{url}-iconwhite.png");
   background-position: center center;
}
.icon-finder(@url){
   background-image: url("../images/icons/backend/@{url}-icon.png");
   background-position: center center;
}
.icon-admin{
   .icon-finder(admin);
}
.icon-admin-white{
   .icon-finder(admin,white);
}

选项 2: 使用守卫并检查值是否为白色。如果是则使用白色背景图像,否则使用默认值。

.icon-finder(@url,@white: '') {
  & when (@white = white){
   background-image: url("../images/icons/backend/@{url}-iconwhite.png");
   background-position: center center;
  }
  & when not (@white = white){
   background-image: url("../images/icons/backend/@{url}-icon.png");
   background-position: center center;
  }
}
.icon-admin{
   .icon-finder(admin);
}
.icon-admin-white{
   .icon-finder(admin,white);
}

第一个选项的优点是,如果给出除白色以外的任何值,编译器将抛出错误并警告用户提供了错误的值,而第二个选项将默默地切换到默认值。