ฉันจะใช้สไตล์กับลูก ๆ ขององค์ประกอบทั้งหมดได้อย่างไร


113

class='myTestClass'ฉันมีองค์ประกอบที่มี ฉันจะใช้สไตล์ css กับลูก ๆ ทั้งหมดขององค์ประกอบนี้ได้อย่างไร ฉันต้องการใช้สไตล์นี้กับองค์ประกอบที่เด็ก ๆ เท่านั้น ไม่ใช่ลูกหลานของมัน

ฉันสามารถใช้

.myTestClass > div {
  margin: 0 20px;
}

ซึ่งเหมาะกับdivเด็ก ๆทุกคน แต่ฉันต้องการวิธีแก้ปัญหาที่เหมาะกับเด็กทุกคน ฉันคิดว่าฉันสามารถใช้ได้*แต่

.myTestClass > * {
  margin: 0 20px;
} 

ไม่ทำงาน, ไม่เป็นผล.

แก้ไข

.myTestClass > *เลือกไม่ใช้กฎใน Firefox 26 และไม่มีกฎอื่น ๆ สำหรับอัตรากำไรตามวางเพลิง และจะได้ผลถ้าฉันแทนที่*ด้วยdiv.


2
มัน 'ไม่ได้ผล' อย่างไร? โปรดจำไว้ว่าลูกหลานขององค์ประกอบลูกเหล่านั้น (น่าจะ) สืบทอดสไตล์ส่วนใหญ่ที่กำหนดให้กับองค์ประกอบลูกเหล่านั้น
เดวิดกล่าวว่าคืนสถานะโมนิกา

แก้ไขข้อบกพร่องนี้กับผู้ตรวจสอบและดูว่ามีกฎควบคุมหรือไม่
Brewal

คำตอบ:


157

ตามความเห็นของDavid Thomasลูกหลานขององค์ประกอบลูกเหล่านั้น (น่าจะ) สืบทอดรูปแบบส่วนใหญ่ที่กำหนดให้กับองค์ประกอบย่อยเหล่านั้น

คุณจำเป็นต้องห่อของคุณ.myTestClassภายในองค์ประกอบและใช้รูปแบบเพื่อลูกหลานโดยการเพิ่มตัวเลือกลูกหลาน.wrapper * จากนั้นเพิ่ม.myTestClass > * ตัวเลือกเด็กเพื่อใช้สไตล์กับองค์ประกอบย่อยไม่ใช่ลูกใหญ่ ตัวอย่างเช่นนี้:

JSFiddle - สาธิต

.wrapper * {
    color: blue;
    margin: 0 100px; /* Only for demo */
}
.myTestClass > * {
    color:red;
    margin: 0 20px;
}
<div class="wrapper">
    <div class="myTestClass">Text 0
        <div>Text 1</div>
        <span>Text 1</span>
        <div>Text 1
            <p>Text 2</p>
            <div>Text 2</div>
        </div>
        <p>Text 1</p>
    </div>
    <div>Text 0</div>
</div>


4
อย่าใช้ตัวเลือกสากล มีผลกระทบอย่างมากต่อประสิทธิภาพการแสดงผล
yesIcan

4
@yesIcan: โอเคดีที่รู้ .... คุณมีทางเลือกอื่นที่ไม่ใช้ตัวเลือกสากลหรือไม่?
Matthew Nichols

8
ประสิทธิภาพของตัวเลือกสากลไม่ได้แย่ในเบราว์เซอร์สมัยใหม่ นี่คือการอ้างอิง ประสบการณ์ของฉันเองในที่ทำงานยืนยันข้อสรุปของผู้เขียนคนนี้
Nathan

-2

แทนที่จะใช้*ตัวเลือกคุณสามารถใช้:not(selector)กับ>ตัวเลือกและตั้งค่าสิ่งที่จะไม่เป็นเด็กอย่างแน่นอน

แก้ไข: ฉันคิดว่ามันจะเร็วขึ้น แต่ปรากฎว่าฉันคิดผิด ไม่สนใจ.

ตัวอย่าง:

.container > :not(marquee){
        color:red;
    }


<div class="container">
    <p></p>
    <span></span>
<div>

5
ข้อดีของการทำเช่นนี้คืออะไร?
Wilson Biggs

3
@WilsonBiggs - ดูเหมือนจะเป็นความพยายามที่เข้าใจผิดในการ "ไม่ใช้ตัวเลือกสากล" แต่เห็นได้ชัดว่าเป็นความคิดที่ไม่ดีเนื่องจากเป็น "ใกล้เคียงสากล" แต่ต้องมีการทดสอบเพิ่มเติม - ดังนั้นจึงต้องทำงานทั้งหมดที่ตัวเลือกสากลต้องการจากนั้นจึงทำงานเพิ่มเติม
ToolmakerSteve

: not (ตัวเลือก) ใช้งานได้เฉพาะในซาฟารีและดูเหมือนว่าจะไม่ทำงานบน chrome / firefox
gtamborero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.