可选的@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;
}
答案 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;
}