跳至内容
在本页

条件

条件为原本静态的语言提供控制流,提供条件导入、混合、函数等。以下示例仅为示例,不推荐 😃

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
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(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
box(x, y, margin-only = false)
  if margin-only
    margin y x
  else
    padding y x

unless

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

在以下示例中,如果 disable-padding-overrideundefinedfalse,则 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
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)
  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
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
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;
}
body {
  padding: 5px;
  margin: 5px;
}
body {
  margin: 5px;
}
body {
  padding: 10px;
}