【问题标题】:Combination of Mixin + Interpolation + Variable Arguments in SASS [duplicate]SASS 中 Mixin + 插值 + 变量参数的组合 [重复]
【发布时间】:2013-10-28 22:50:37
【问题描述】:
.green-oval-button {
    @extend .oval-button;
    @include radial-gradient($green-gradient...);

    &:active {
        @include radial-gradient($green-gradient-active...);
    }   
}

.blue-oval-button {
    @extend .oval-button;
    @include radial-gradient($blue-gradient...);

    &:active {
        @include radial-gradient($blue-gradient-active...);
    }   
}

是否可以用Mixin + Interpolation + Variable Arguments 简化以上SassScripts

示例导致错误

@mixin color-oval-button($color) {
    @extend .oval-button;
    @include radial-gradient(#{$color}-gradient...);

    &:active {
        @include radial-gradient(#{$color}-gradient...);
    }   
}

@include color-oval-button("$green");
@include color-oval-button("$blue");

【问题讨论】:

    标签: sass mixins compass-sass


    【解决方案1】:

    变量插值在 SASS 中不可用,但根据创建者 Chris Eppstein 的说法,一旦 3.3 发布,就可以通过地图功能实现。 https://github.com/nex3/sass/issues/132

    在此之前,您可以使用 2 个具有映射值的列表和一个 for 循环来进行排序。只需在与要调用的颜色变量相同的列表索引中指定所需的渐变。

     $colors: blue, green;
     $gradients: [gradient css], [gradient css];
        @for $i from 1 through length($colors) {
          @mixin #{nth($colors, $i}-oval-button($color) {
            @extend .oval-button;
            @include radial-gradient( #{nth($gradients, $i)} );
            &:active {
              @include radial-gradient( #{nth($gradients, $i)} );
            }   
          }
        }
    

    给你:

    @mixin blue-oval-button($color) {
      @extend .oval-button;
      @include radial-gradient(blue-gradient);
      $:active {
        @include radial-gradient(blue-gradient);
      }
    }
    etc....
    

    对于更高级且更简洁的版本,请查看链接以了解如何编写查找函数。

    【讨论】:

    • 我说的是你不能将 $green-gradient 指定为插值变量。但是您可以做的是在列表中指定它的值。然后只需确保 green-gradients 的值映射到与另一个列表中的变量名 green 相同的索引
    • 嘿@DMTintner 我必须道歉,我现在明白你的意思了! =) 是的,关于变量插值你是对的!
    • 不支持混音名称插值...@mixin #{$var}-something(){} 不起作用
    猜你喜欢
    • 2014-06-30
    • 2013-04-15
    • 2012-09-11
    • 2019-03-12
    • 1970-01-01
    • 2015-04-24
    • 2012-12-21
    • 2020-06-13
    相关资源
    最近更新 更多