Sass และตัวเลือกเด็กรวม


126

ฉันเพิ่งค้นพบ Sass และฉันก็ตื่นเต้นกับมันมาก

ในเว็บไซต์ของฉันฉันใช้เมนูการนำทางที่เหมือนต้นไม้ซึ่งมีสไตล์โดยใช้ลูก combinator ( 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
ฉันแม้ว่านี่คือสิ่งที่ OP ต้องการ
Arnaud Le Blanc

1
ดีขอบคุณ btw ตามที่ BoltClock ระบุไว้นั้นยาวกว่า (และน่าเกลียดสำหรับฉัน) ดูเหมือนว่าฉันจะต้องอยู่กับสไตล์เก่า ๆ ของฉัน
frarees

1
คุณต้องกำหนด "ไวยากรณ์ที่ดีกว่า";)
Arnaud Le Blanc

19

สำหรับกฎข้อเดียวที่คุณมีไม่มีวิธีใดที่สั้นกว่านี้ Combinator ลูกเหมือนกันใน 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; }
}

ดังนั้นจึงไม่มีการเปลี่ยนแปลงสำหรับตัวเลือกลูกที่รวมกัน ... อาจมีทางเลือกอื่นแทน?
frarees
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.