Sass和组合子选择器


125

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

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

有什么方法可以在Sass中使用更简单(或更优)的语法来重写此代码?

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

我认为“简单/更好”表示OP的意思是“使用空格表示层次结构”
jsejcksn

Answers:


222

没有组合的子选择器,您可能会执行以下操作:

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

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

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

编译为:

foo > bar > baz {
  color: red;
}

或无礼:

foo
  > bar
    > baz
      color: red

2
这只是要延长时间,不是吗?
BoltClock

1
我虽然这就是OP想要的
Arnaud Le Blanc

1
很好,谢谢。正如BoltClock所说,顺便说一句,它更长(对我来说更难看)。似乎我将不得不保留旧样式。
frares 2011年

1
您需要定义“ nicer语法”;)
Arnaud Le Blanc

18

对于您所拥有的一条规则,没有什么更短的方法了。子组合器在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; }
}

因此,合并后的子选择器没有任何变换...也许还有其他选择?
frares 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.