Sass ve kombine çocuk seçici


126

Sass'ı yeni keşfettim ve bu konuda çok heyecanlandım.

Web sitemde, çocuk birleştirici ( E > F) kullanılarak şekillendirilmiş ağaç benzeri bir gezinme menüsü uyguluyorum .

Bu kodu Sass'ta daha basit (veya daha iyi) bir sözdizimi ile yeniden yazmanın bir yolu var mı ?

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

Bence "daha basit / daha iyi" ile OP, "hiyerarşiyi belirtmek için boşlukları kullanan bir şekilde" anlamına geliyor "
jsejcksn

Yanıtlar:


223

Birleşik çocuk seçici olmadan muhtemelen buna benzer bir şey yapardınız:

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

İle aynı sözdizimini yeniden üretmek istiyorsanız >, bunu yapabilirsiniz:

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

Bu şuna derler:

foo > bar > baz {
  color: red;
}

Veya sass içinde:

foo
  > bar
    > baz
      color: red

2
Bu sadece daha uzun sürecek, değil mi?
BoltClock

1
Sanırım OP'nin istediği şey bu
Arnaud Le Blanc

1
güzel, teşekkürler. btw, BoltClock'un belirttiği gibi, daha uzun (ve bir şekilde benim için daha çirkin). Görünüşe göre eski tarzımla kalmam gerekecek.
frarees

1
"daha güzel sözdizimi" tanımlamanız gerekiyor;)
Arnaud Le Blanc

19

Sahip olduğunuz tek kural için, bunu yapmanın daha kısa bir yolu yoktur. Alt birleştirici, CSS ve Sass / SCSS'de aynıdır ve bunun alternatifi yoktur.

Ancak, bunun gibi birden fazla kuralınız varsa:

#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;
}

Bunları aşağıdakilerden birine yoğunlaştırabilirsiniz:

/* 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; }
}

Yani birleşik çocuk seçici için bir dönüşüm yok ... belki buna herhangi bir alternatif?
frarees
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.