คลาสการซ้อน CSS น้อย


101

ฉันใช้ LESS เพื่อปรับปรุง CSS และกำลังพยายามซ้อนคลาสภายในคลาส มีลำดับชั้นที่ค่อนข้างซับซ้อน แต่ด้วยเหตุผลบางประการการซ้อนของฉันไม่ทำงาน ฉันมีสิ่งนี้:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
    .posted {
         .my-posted;
         span {
            border: none;
         }
    }
}

ฉันไม่สามารถ.g.postedไปทำงานได้ มันแสดงให้เห็นเพียง.gเล็กน้อย ถ้าฉันทำมันก็โอเค:

.g {
    float: left;
    color: #323a13;
    .border(1px,#afc945);
    .gradient(#afc945, #c8da64);
    .common;
    span {
        .my-span;
        .border-dashed(1px,rgba(255,255,255,0.3));
    }
}

.g.posted {
         .my-posted;
         span {
            border: none;
         }
    }

ฉันต้องการที่จะรัง.postedใน.gแม้ว่า ความคิดใด ๆ ?

คำตอบ:


192

&ตัวละครที่มีฟังก์ชั่นของการเป็นthisคำหลักจริง (สิ่งที่ผมไม่ทราบว่าในช่วงเวลาของการเขียนคำตอบ) เป็นไปได้ที่จะเขียน:

.class1 {
    &.class2 {}
}

และ CSS ที่จะสร้างขึ้นจะมีลักษณะดังนี้:

.class1.class2 {}

สำหรับบันทึกนี้ @grobitto เป็นคนแรกที่โพสต์ข้อมูลนี้


[คำตอบเดิม]

LESS ไม่ทำงานด้วยวิธีนี้

.class1.class2 {} - กำหนดสองคลาสบนโหนด DOM เดียวกัน แต่

.class1 {
    .class2 {}
}

กำหนดโหนดที่ซ้อนกัน จะถูกนำมาใช้ถ้ามันเป็นลูกของโหนดกับการเรียน.class2class1

ฉันก็สับสนกับเรื่องนี้เช่นกันและข้อสรุปของฉันคือ LESS ต้องการthisคีย์เวิร์ด :)


5
sassมีฟังก์ชันดังกล่าวในตัวพร้อมกับตัวดำเนินการ &
sevenseacat

2
LESS ยังคงยอดเยี่ยมโดยเฉพาะอย่างยิ่งตัวประมวลผลล่วงหน้า PHP LESS พร้อมด้วยไวยากรณ์ที่ปรับเปลี่ยนและยืดหยุ่นมากขึ้น แต่จนกว่าจะมีไวยากรณ์ที่ยอมรับกันทั่วไปปัญหาดังกล่าวจะเกิดขึ้นเป็นครั้งคราว ในมุมมองของฉันสิ่งนี้เป็นข้อเสียเปรียบเพียงอย่างเดียวของ LESS
mingos

1
@ newbie_86 คุณไม่สามารถผสม sass และไวยากรณ์ css ดั้งเดิมได้ ดังนั้นการย้ายไปยัง Sass จึงจำเป็นต้องเขียนสไตล์ของคุณใหม่ทั้งหมดในขณะที่น้อยคุณสามารถรวบรวมสไตล์ที่มีอยู่แล้วและเริ่มเขียนใหม่ทีละชิ้น
เปลือย

1
ฉันสงสัยว่าทำไมคำตอบที่สองมีมากกว่าคำตอบนี้ทั้งๆที่มันเหมือนกันและมีวันที่หลัง จากนั้นฉันก็เห็นประโยคสุดท้ายและเพิ่มคำตอบทั้งสอง
llamerr

@topless คุณหมายถึงอะไรโดย "You can't mix sass and native css syntax" ฉันทำมาหลายปีแล้ว ใช้งานได้ดีสำหรับฉัน
Shanimal


2

หากเครื่องหมายแอมเพอร์แซนด์อยู่ถัดจากองค์ประกอบลูกในการซ้อนจะคอมไพล์เป็นตัวเลือกคลาสสองชั้น หากมีช่องว่างระหว่าง & และตัวเลือกระบบจะรวบรวมไว้ในตัวเลือกลูก อ่านเพิ่มเติมเกี่ยวกับการทำรังในน้อยที่นี่

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