Sass та комбінований добірчик дітей


126

Я щойно виявив Сасса, і мене так схвилював.

На своєму веб-сайті я реалізую деревоподібне навігаційне меню, створене за допомогою дочірнього комбінатора ( E > F).

Чи є спосіб переписати цей код більш простим (або кращим) синтаксисом у Sass?

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

Я думаю, що "простіший / кращий" OP означає "таким чином, який використовує пробіл для позначення ієрархії"
jsejcksn

Відповіді:


223

Без комбінованого добірника дітей ви, мабуть, зробите щось подібне до цього:

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

Якщо ви хочете відтворити той самий синтаксис >, ви можете:

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

Це компілюється до цього:

foo > bar > baz {
  color: red;
}

Або в sass:

foo
  > bar
    > baz
      color: red

2
Це просто зробить це довше, чи не так?
BoltClock

1
Я хоч цього хоче ОП
Арно Ле Блан

1
приємно, спасибі btw, як заявив BoltClock, довший (і якось потворніше для мене). Здається, мені доведеться залишитися зі своєю старою стилізацією.
фраре

1
вам потрібно визначити "приємніший синтаксис";)
Арно Ле Блан

19

Для того єдиного правила, яке ви маєте, немає жодного коротшого способу це зробити. Дочірній комбінатор однаковий як у 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; }
}

Отже, для комбінованого дитячого селектора немає трансформації ... можливо, альтернативи цьому?
фраре
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.