跳到主要内容

Rest Params

Stylus 支持以 name... 形式的剩余参数。这些参数会消耗传递给 mixin 或函数的剩余参数。当使用(例如)隐式函数调用支持来应用供应商前缀(如 -webkit-moz)时,这非常有用。

在下面的示例中,我们消耗传递的所有参数,并将它们简单地应用于多个属性。

box-shadow(args...)
-webkit-box-shadow args
-moz-box-shadow args
box-shadow args

#login
box-shadow 1px 2px 5px #eee

产生:

#login {
-webkit-box-shadow: 1px 2px 5px #eee;
-moz-box-shadow: 1px 2px 5px #eee;
box-shadow: 1px 2px 5px #eee;
}

如果我们想要查看特定参数(例如 x-offset),我们可以简单地使用 args[0]。或者,我们可能希望重新定义 mixin:

box-shadow(offset-x, args...)
got-offset-x offset-x
-webkit-box-shadow offset-x args
-moz-box-shadow offset-x args
box-shadow offset-x args

#login
box-shadow 1px 2px 5px #eee

产生:

#login {
got-offset-x: 1px;
-webkit-box-shadow: 1px 2px 5px #eee;
-moz-box-shadow: 1px 2px 5px #eee;
box-shadow: 1px 2px 5px #eee;
}

arguments

arguments 变量被注入到 mixin 和函数体中,包含传递的确切表达式。这对于多个原因非常有用(特别是供应商支持),因为您得到了确切的表达式,包括逗号。

例如,如果我们使用剩余参数,则逗号会被消耗(因为它是表达式分隔符):

box-shadow(args...)
-webkit-box-shadow args
-moz-box-shadow args
box-shadow args

#login
box-shadow #ddd 1px 1px, #eee 2px 2px

产生不希望的结果:

#login {
-webkit-box-shadow: #ddd 1px 1px #eee 2px 2px;
-moz-box-shadow: #ddd 1px 1px #eee 2px 2px;
box-shadow: #ddd 1px 1px #eee 2px 2px;
}

让我们使用 arguments 重新定义 mixin:

box-shadow()
-webkit-box-shadow arguments
-moz-box-shadow arguments
box-shadow arguments

body
box-shadow #ddd 1px 1px, #eee 2px 2px

现在,产生所需的结果:

body {
-webkit-box-shadow: #ddd 1px 1px, #eee 2px 2px;
-moz-box-shadow: #ddd 1px 1px, #eee 2px 2px;
box-shadow: #ddd 1px 1px, #eee 2px 2px;
}