【问题标题】:Sass and combined child selectorSass 和组合子选择器
【发布时间】:2011-11-12 19:56:39
【问题描述】:

我刚刚发现了 Sass,对此我感到非常兴奋。

在我的网站中,我实现了一个树状导航菜单,使用child combinator (E > F) 设置样式。

有没有办法在 Sass 中用更简单(或更好)的语法重写这段代码?

#foo > ul > li > ul > li > a {
  color: red;
}

【问题讨论】:

  • 我认为“更简单/更好”的 OP 意味着“以一种使用空格来表示层次结构的方式”

标签: css css-selectors sass


【解决方案1】:

如果没有组合子选择器,您可能会做类似这样的事情:

foo {
  bar {
    baz {
      color: red;
    }
  }
}

如果你想用> 重现相同的语法,你可以这样做:

foo {
  > bar {
    > baz {
      color: red;
    }
  }
}

编译成这样:

foo > bar > baz {
  color: red;
}

或者在 sass 中:

foo
  > bar
    > baz
      color: red

【讨论】:

  • 这只会让它变长,不是吗?
  • 我虽然这是 OP 想要的
  • 很好,谢谢。顺便说一句,正如 BoltClock 所说,更长(而且对我来说更丑)。看来我将不得不保留我的旧样式。
  • 你需要定义“更好的语法”;)
【解决方案2】:

对于您拥有的单一规则,没有更短的方法可以做到这一点。子组合子在 CSS 和 Sass/SCSS 中是相同的,没有其他选择。

但是,如果您有多个这样的规则:

#foo > ul > li > ul > li > a:nth-child(3n+1) {
    color: red;
}

#foo > ul > li > ul > li > a:nth-child(3n+2) {
    color: green;
}

#foo > ul > li > ul > li > a:nth-child(3n+3) {
    color: blue;
}

您可以将它们压缩为以下之一:

/* Sass */
#foo > ul > li > ul > li
    > a:nth-child(3n+1)
        color: red
    > a:nth-child(3n+2)
        color: green
    > a:nth-child(3n+3)
        color: blue

/* SCSS */
#foo > ul > li > ul > li {
    > a:nth-child(3n+1) { color: red; }
    > a:nth-child(3n+2) { color: green; }
    > a:nth-child(3n+3) { color: blue; }
}

【讨论】:

  • 所以组合子选择器没有转换...也许有任何替代方案?
猜你喜欢
  • 1970-01-01
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多