【问题标题】:Stylus mixins block手写笔 mixins 块
【发布时间】:2014-02-02 22:08:27
【问题描述】:

我有一个与颜色配对的类列表,我想使用 mixin 中定义的颜色设置不同的属性(colorbackgroundborder-color、...)。

示例

colorHome = #FFF
colorParam = #999
colorDash = #000

links = {
  'home': colorHome,
  'param': colorParam,
  'dash': colorDash
}

.dashboard-menu li
  border 1px solid
  +addLinks()
    color clr
    background clr
    border-color clr

会输出到

.dashboard-menu li {
  border: 1px solid;
}
.dashboard-menu li.home {
  color: #fff;
  background: #fff;
  border-color: #fff;
}
.dashboard-menu li.param {
  color: #999;
  background: #999;
  border-color: #999;
}
.dashboard-menu li.dash {
  color: #000;
  background: #000;
  border-color: #000;
}

我现在拥有的 mixin,使用 block。

addLinks()
  for key, value in links
    clr = value
    &.{key}
      {block}


.dashboard-menu li
  border 1px solid
    +addLinks()
      color clr
      background clr
      border-color clr

但由于某种原因,clr 设置为backgroundborder-color 的第一种颜色(colorHome / #FFF),并设置为color 的最后一种颜色(colorDash / #000) .

输出

.dashboard-menu li {
  border: 1px solid;
}
.dashboard-menu li.home {
  color: #000;
  background: #fff;
  border-color: #fff;
}
.dashboard-menu li.param {
  color: #000;
  background: #fff;
  border-color: #fff;
}
.dashboard-menu li.dash {
  color: #000;
  background: #fff;
  border-color: #fff;
}

考虑到块混合是相对较新的,它们可以用来实现我想要的吗?还是我应该考虑使用完全不同的解决方案?

谢谢

【问题讨论】:

  • 对我来说看起来不错。不行吗?
  • 如果您查看输出,背景和边框颜色始终相同 (#FFF),而对于 .home,它们应该是 #FFF,对于 .param 是 #999,对于 .dash 是 #000。我已经设置了我想要的输出(就在示例之后)

标签: css mixins stylus


【解决方案1】:

您应该考虑使用不同的解决方案。您传递给块 mixin 的内容会在 mixin 的代码之前进行评估,因此每次运行时它总是相同的。

我不确定你究竟想在那里实现什么,但这里有一个例子说明你可以如何做你尝试过的事情:

addLinks(hash)
  for key, value in links
    new_hash = clone(hash)
    for hash_key, hash_value in new_hash
      if hash_value == clr
        new_hash[hash_key] = value

    &.{key}
      {new_hash}
      {block}

.dashboard-menu li
  border 1px solid
  addLinks({
    color: clr
    background: clr
    border-color: clr
  })

您可以将非块混合用于您想要使用links 对象中的颜色应用的任何属性,如果您需要其他东西,您可以完全使用块混合表示法:

.dashboard-menu li
  border 1px solid
  +addLinks({
      color: clr
      background: clr
      border-color: clr
    })
    padding: 10px

我们正在考虑添加一种方法来像哈希一样修改传递的块,但我们还没有到这里 :)

【讨论】:

  • 谢谢,这似乎有效。我想在这些颜色上添加功能:例如 darken(clr, 10)。手写笔有替换功能吗?或者至少是一个在字符串上逐字符迭代的函数? (例如字符串[索引]?)
  • 我不确定我是否理解您的评论。 1. 您可以像往常一样对哈希中的颜色使用函数:new_hash[hash_key] = darken(value, 10),并且有一个替换函数(仅适用于标识或字符串),尚未记录。您可以在测试中看到用例:beforeafter
  • 当您计划添加一种方法来修改传递的块(如哈希)?这是一个非常有用的功能。
  • 我们可以将block 解析为哈希吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多