【问题标题】:Unable to pass function as argument to a mixin [duplicate]无法将函数作为参数传递给mixin [重复]
【发布时间】:2014-03-07 15:58:43
【问题描述】:

我正在尝试在 Sass 中创建一个 mixin 以用于 :hover 操作,但我无法使其工作。

我声明了 mixin:

@mixin hover($action, $color, $amount) {
    color: $action($color, $amount);
}

我的想法是使用Sass Script Funcions 通过基本上变亮或变暗来改变悬停时链接的颜色。所以例如我尝试:

a {
    &:hover {
        @include hover(darken, $footer-text-color, 5%);
    }
}

$footer-text-color 是我之前定义的一个变量,它等于一个十六进制颜色,例如#84b3c8。

我希望这与

相同
 a {
    &:hover {
        color: darken($footer-text-color, 5%);
    }
}

相反,它用纯 CSS 编译的是:

color: darken #84b3c8, 5%;

所以很明显颜色功能不起作用,但我真的不明白为什么。我确定这很愚蠢,也许是 mixin 的参数中的变量和字符串值之间的混合?

【问题讨论】:

    标签: sass mixins


    【解决方案1】:

    函数和 mixin 在 Sass 中不是一等,这意味着它们不能作为参数传递给其他函数或 mixins。

    在 Sass 3.3 中,有一个名为 call() 的新函数,它将为您提供您正在寻找的行为:

    @mixin hover($action, $color, $amount) {
        color: call($action, $color, $amount);
    }
    

    【讨论】:

    • 哦,很高兴知道,我不知道这个限制!但是,我看不出你使用call() 的方式是如何尊重函数语法的,我猜它仍然应该是color: $action($color, $amount);
    • call() 是一个神奇的函数,它运行一个函数,无论第一个参数是什么,然后将以下参数传递给该函数。
    • 可惜 3.3 仍然是一个候选版本,你知道是否有任何关于 call() 或关于 3.3 的新功能的文档吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多