【问题标题】:Using passed Variable as Key/Value pair in Mixins在 Mixins 中使用传递的变量作为键/值对
【发布时间】:2014-11-14 19:51:28
【问题描述】:

我尝试查找此内容,但没有成功。我找不到正确的搜索参数。

我在 SASS 中创建了一个 mixin,这将允许我通过从 value 和 to value 传递动画名称来创建关键帧。这是一个例子:

@mixin keyframes($name, $from, $to) {
    @-webkit-keyframes #{$name} {
        from {
            left: $from
        }
        to {
            left: $to
        }
    }
}

这是一个较短的版本,因为我还会为 @-moz-keyframes 和 @keyframes 添加行。我更喜欢这种方法,这样我就不必在动画中重复“from”和“to”,并且让 mixin 只需使用@content 抓取它,但我也不想假设“left”是唯一的将受到影响的财产。

我想做的是将 $from 和 $to 变量都视为对象,以便它们可以包含一系列键/值对。当我尝试这样做时:

$mixin keyframes($name, $from, $to) {
    @-webkit-keyframes #{$name} {
        from {
            $from
        }
        to {
            $to
        }
    }
}

...我得到编译错误,因为它是键/值对而不是变量。

有没有办法告诉 SASS 将 $from 和 $to 视为一系列键/值对?我已经尝试过#{$from},但它仍然会引发编译错误。

谢谢!

【问题讨论】:

    标签: sass mixins


    【解决方案1】:

    您不能这样做,因为属性/值不是字符串。您必须使用映射来编写它,如下所示:

    @mixin keyframes($name, $from, $to) {
        @-webkit-keyframes #{$name} {
            from {
                @each $prop, $val in $from {
                  #{$prop}: $val;
                }
            }
            to {
                @each $prop, $val in $to {
                  #{$prop}: $val;
                }
            }
        }
    }
    
    @include keyframes(foo, (top: 10px), (top: 50px));
    

    但是,如果您的目标是编写灵活的 mixin,我建议您根本不要这样做。只需写出您自己的 from/to 语句:

    @mixin keyframes($name) {
        @-webkit-keyframes #{$name} {
            @content
        }
    }
    
    @include keyframes(foo) {
      from {
        top: 10px;
      }
    
      to {
        top: 50px;
      }
    }
    

    【讨论】:

    • 谢谢,西马农!即使我最后不走这条路,至少知道如何做到这一点也会很好。 :)
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 2018-10-31
    • 2013-02-20
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多