Bir öğenin tüm alt öğelerine nasıl stil uygularım


103

İle bir unsurum var class='myTestClass'. Bu öğelerin tüm alt öğelerine nasıl css stili uygularım? Ben sadece stili çocuk elemanlarına uygulamak istiyorum. Torunları değil.

kullanabilirim

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

tüm divçocuklar için çalışıyor , ancak tüm çocuklar için işe yarayan bir çözüm istiyorum. Kullanabileceğimi düşündüm *ama

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

çalışmıyor.

Düzenle

.myTestClass > *Seçici firefox 26 kuralı geçerli değildir ve kundakçı göre marjı için başka bir kural yoktur. Ve *ile değiştirirsem işe yarar div.


2
Nasıl 'çalışmıyor'? Bu alt öğelerin torunlarının (muhtemelen) bu alt öğelere atanan stillerin çoğunu miras alacağını unutmayın.
— David,

Müfettişle bu hatayı ayıklayın ve onu devralan bir kural olup olmadığına bakın
— Brewal

Yanıtlar:


148

David Thomas'ın yorumladığı gibi , bu alt öğelerin torunları (büyük olasılıkla) bu alt öğelere atanan stillerin çoğunu miras alacaklardır.

.myTestClassBir öğenin içini sarmalamanız ve .wrapper * alt seçiciyi ekleyerek stilleri alt öğelere uygulamanız gerekir . Ardından, stili çocuklara değil çocuklara uygulamak için .myTestClass > * çocuk seçici ekleyin . Örneğin bunun gibi:

JSFiddle - DEMO

.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
Asla evrensel bir seçici kullanmayın. Oluşturma üzerinde büyük bir performans etkisi vardır.
— evet

4
@yesIcan: Tamam, bilmekte fayda var .... evrensel seçiciyi kullanmayan alternatif bir çözümünüz var mı?
— Matthew Nichols

8
Evrensel seçicinin performansı, modern tarayıcılarda o kadar da kötü değil. İşte bir referans . İşyerindeki kendi deneyimim bu yazarın sonucunu doğruluyor.
— Nathan

-2

Yerine *selektör kullanabilirsiniz :not(selector)ile >kesinlikle bir çocuk olmayacağım selektör ve set şey.

Düzenleme: Daha hızlı olacağını düşündüm ama yanıldığım ortaya çıktı. Saygısızlık.

Misal:

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


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

5
Bunu yapmanın avantajı nedir?
— Wilson Biggs

3
@WilsonBiggs - "evrensel bir seçici kullanmamak" için yanlış yönlendirilmiş bir girişim gibi görünüyor. Ancak "neredeyse evrensel" olduğu için açıkça kötü bir fikir, ancak ek bir test gerektiriyor - Yani evrensel bir seçicinin yapacağı tüm işi yapmalı ve sonra ek işler yapmalıdır.
— ToolmakerSteve

: değil (seçici) yalnızca safaride çalışıyor ve chrome / firefox üzerinde çalışacak gibi görünmüyor
— gtamborero
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.