跳到主要内容

条件语句

条件语句为一种静态语言提供了控制流,提供了条件导入、混合、函数等。下面的示例仅仅是示例,不建议使用 :)

if / else if / else

if 条件语句按照您的预期工作,简单地接受一个表达式,在 true 时评估以下块。除了 if 之外,还有典型的 else ifelse 标记,作为后备。

下面的示例将有条件地重载 padding 属性,将其替换为 margin

overload-padding = true

if overload-padding
padding(y, x)
margin y x

body
padding 5px 10px

另一个示例:

box(x, y, margin = false)
padding y x
if margin
margin y x

body
box(5px, 10px, true)

另一个 box() 助手:

box(x, y, margin-only = false)
if margin-only
margin y x
else
padding y x

unless

对于熟悉 Ruby 编程语言的用户,我们有 unless 条件语句。它基本上是 if 的相反——本质上是 if (!(expr))

在下面的示例中,如果 disable-padding-override 未定义或为 false,则 padding 将被覆盖,显示 margin。但如果它是 true,则 padding 将继续按预期输出 padding 5px 10px

disable-padding-override = true

unless disable-padding-override is defined and disable-padding-override
padding(x, y)
margin y x

body
padding 5px 10px

后缀条件语句

Stylus 支持后缀条件语句。这意味着 ifunless 作为运算符;当右侧表达式为真时,它们评估左侧操作数。

例如,让我们定义 negative() 来执行一些基本的类型检查。下面我们使用块式条件语句:

negative(n)
unless n is a 'unit'
error('invalid number')
if n < 0
yes
else
no

接下来,我们利用后缀条件语句使我们的函数简洁。

negative(n)
error('invalid number') unless n is a 'unit'
return yes if n < 0
no

当然,我们可以进一步。例如,我们可以写 n < 0 ? yes : no,或者简单地使用布尔值:n < 0

后缀条件语句可以应用于大多数单行语句。例如,@import@charset、混合等,当然,如下所示,也可以应用于属性:

pad(types = margin padding, n = 5px)
padding unit(n, px) if padding in types
margin unit(n, px) if margin in types

body
pad()

body
pad(margin)

body
apply-mixins = true
pad(padding, 10) if apply-mixins

结果:

body {
padding: 5px;
margin: 5px;
}
body {
margin: 5px;
}
body {
padding: 10px;
}