我一直在尝试让以下受保护的 mixin 在我们的 LESS 样式表中正常工作:
#font {
.body( @size: 15px, @lineHeight: 18px, @weight: normal ) {
font: @weight @size~"/"@lineHeight Arial, sans-serif;
}
.marginLeft( @margin ) when ( @margin = 0 ) { }
.marginLeft( @margin ) when not ( @margin = 0 ) {
margin-left: @margin;
}
.marginTop( @margin ) when ( @margin = 0 ) { }
.marginTop( @margin ) when not ( @margin = 0 ) {
margin-top: @margin;
}
.DinBold( @size: 14px, @lineHeight: 20px, @offsetTop: 0, @offsetLeft: 0 ) {
#font > .marginLeft( @offsetLeft );
#font > .marginTop( @offsetTop );
font: @size~"/"@lineHeight 'DINBold', Arial, sans-serif;
}
}
这里的想法是,如果任何字体偏移量为零,我不希望设置边距样式。现在,当两个参数不为零时,它可以正常工作,例如:
#font > .DinBold( 42px, 42px, -7px, -3px );
但是@offsetLeft 为 0 的那一刻,无论是显式的还是隐式的:
#font > .DinBold( 42px, 42px, -7px );
或者
#font > .DinBold( 42px, 42px, -7px, 0 );
似乎即使是margin-top也不会暴露。如果你翻转它,将marginTop mixin 放在marginLeft mixin 之前,并为@offsetTop 传递0,这似乎向我暗示,第一次命中空mixin 时,所有后续的mixin 调用可能会发生同样的事情忽略 - 对此有任何见解吗?