【问题标题】:Handling optional arguments in a Sass mixin [duplicate]在 Sass mixin 中处理可选参数 [重复]
【发布时间】:2012-12-21 23:09:08
【问题描述】:

我刚刚开始使用 Sass,所以请耐心等待。

我有这个 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% 的时间我只是像这样使用 mixin:

@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?

【问题讨论】:

    标签: sass mixins


    【解决方案1】:

    你可以像这样调用参数时指定参数:

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

    你可以像这样缩短 mixin 参数:

    @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};
        }
    }
    

    【讨论】:

    • 但我可以只写!important,它不那么冗长,但实际上值总是!important,所以它应该在mixin中,但我似乎无法让它工作。此外,如果我像上面的示例一样调用 mixin,我会收到一个错误,因为它期望第二个参数有一些东西:$line-height-val 因此像我说的那样空的双引号感觉很有趣。
    • 这个错误是因为我写了$sledgehammer而不是$sledge-hammer。否则它编译得很好。
    • 谢谢你的作品,你能解释一下这部分主要是在做什么,主要是最后一个空双引号:$important: if($i, "!important", "");
    • If 是一个标准的 Sass 函数:sass-lang.com/docs/yardoc/Sass/Script/…。如果您熟悉其他语言,它就像一个三元运算符。
    猜你喜欢
    • 1970-01-01
    • 2013-01-04
    • 2014-06-30
    • 2015-05-26
    • 1970-01-01
    • 2021-06-20
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多