可选的mixin参数,将默认值设置为LESS中另一个参数的值?

时间:2012-12-17 01:07:10

标签: less

可选的@font-file参数可以在LESS中获得@font-name的值吗?没有任何JavaScript评估...

.font-face(@font-name, @font-file: ???) {
    font-family: '@{font-name}';
    src: url('fonts/@{font-file}.eot');
    src: url('fonts/@{font-file}.eot?#iefix') format('embedded-opentype'),
         url('fonts/@{font-file}.svg#@{font-file}') format('svg'),
         url('fonts/@{font-file}.woff') format('woff'),
         url('fonts/@{font-file}.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
}

对不起,如果这是一个非常无聊的问题,我现在花了大约2个小时的LESS:)

编辑:不重复mixin:

.font-face(@font-file) {
    .font-face(@font-file, @font-file)
}

.font-face(@font-name, @font-file) {
  font-family: '@{font-name}';
  src: url('fonts/@{font-file}.eot');
  src: url('fonts/@{font-file}.eot?#iefix') format('embedded-opentype'),
  url('fonts/@{font-file}.svg#@{font-file}') format('svg'),
  url('fonts/@{font-file}.woff') format('woff'),
  url('fonts/@{font-file}.ttf') format('truetype');
  font-weight: normal;
  font-style: normal;
}

2 个答案:

答案 0 :(得分:1)

我的知识答案是“不”。 LESS仅使用模式匹配和保护表达式来进行此类评估,因此无法执行可能用于设置font-file名称的其他类型的“if”条件。

根据LESS,你的“复制”mixin实际上不是“重复”,因为一个匹配只有一个变量传递的模式,而另一个匹配两个模式传递的变量。所以你的解决方案是达到你想要的正确(也可能是最优雅)的方式。

答案 1 :(得分:0)

您可以在声明中实际提供默认值:

.border-radius(@radius: 5px) {
  -webkit-border-radius: @radius;
     -moz-border-radius: @radius;
          border-radius: @radius;
}

然后在有或没有额外参数的情况下使用它:

#header {
  .border-radius;
}

请参阅:http://lesscss.org/features/#mixins-parametric-feature

相关问题