2013-01-08 87 views
1

我刚刚开始使用Sass,所以请耐心等待。在Sass mixin中处理可选参数

我有这个mixin处理现代浏览器的px(旧IE)和rem的声明字体大小,它也做了很好的line-height计算。

@mixin font-size($font-size, $line-height-val: "", $sledge-hammer: "" /* $sledge-hammer is for an optional `!important` keyword */) { 
    font-size: ($font-size)+px#{$sledge-hammer}; 
    font-size: ($font-size/$base-font-size)+rem#{$sledge-hammer}; 
    @if $line-height-val == "" { 
      line-height: ceil($font-size/$base-line-height) * ($base-line-height/$font-size); 
    } @else { 
      line-height: #{$line-height-val}; 
    } 
} 

它的工作原理,但我觉得可选参数($line-height-val$sledge-hammer)是没有这样做的最优化的方式。 $line-height-val是需要的,因为有时我需要手动声明line-height$sledge-hammer是需要的,因为我需要在我的一些帮助程序类中声明!important关键字。时间

90%,我只是用这样的混入:

@include font-size(24);

其中编译过:

font-size: 24px; 
font-size: 1.5rem; 
line-height: 1.1; 

当我需要重写line-height我这样做:

@include font-size(24, 1.6);

其中编译过:

font-size: 24px; 
font-size: 1.5rem; 
line-height: 1.6; 

但是,如果我需要声明!important关键字,然后我必须这样做:

@include font-size($font-size-sml, "", !important);

其中编译过:

font-size: 15px!important; 
font-size: 0.9375rem!important; 
line-height: 1.6; 

但感觉有趣的是,我必须使用空""作为第二个参数,第三个参数的值总是!important这样应该在mixin中吗?

我只是想知道是否有更简洁的方式来编写这个mixin?

回答

1

您可以指定参数,当你打电话给他们这样的:

@include font-size($font-size-sml, $sledgehammer: !important); 

你可以缩短混入参数如下:!

@mixin font-size($font-size, $line-height-val: "", $i: false /* flag for`!important` */) { 
    $important: if($i, "!important", ""); 
    font-size: ($font-size)+px #{$important}; 
    font-size: ($font-size/$base-font-size)+rem #{$important}; 
    @if $line-height-val == "" { 
      line-height: ceil($font-size/$base-line-height) * ($base-line-height/$font-size); 
    } @else { 
      line-height: #{$line-height-val}; 
    } 
} 
+0

但我可以只写'important'这是少详细,但真的价值总是'!重要的'所以应该在mixin,但我似乎无法得到它的工作。另外如果我像上面的例子那样调用mixin,我会得到一个错误,因为它期待着第二个参数:'$ line-height-val',因此像我说过的那样的空双引号感觉很有趣。 –

+0

错误是因为我写了'$ sledgehammer'而不是'$ sledge-hammer'。否则编译好。 – cimmanon

+0

谢谢你的作品,你能解释一下这个部分主要是做最后一个空双引号: '$ important:if($ i,“!important”,“”);' –