Come applico uno stile a tutti i figli di un elemento


102

Ho un elemento con class='myTestClass'. Come applico uno stile CSS a tutti i figli di questi elementi? Voglio solo applicare lo stile agli elementi bambini. Non i suoi nipoti.

Potrei usare

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

che funziona per tutti i divbambini, ma vorrei una soluzione che funzioni per tutti i bambini. Pensavo di poterlo usare *, ma

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

non funziona.

modificare

Il .myTestClass > *selettore non applica la regola in firefox 26 e non ci sono altre regole per il margine secondo firebug. E funziona se sostituisco *con div.


2
Come "non funziona"? Tieni presente che i discendenti di quegli elementi figlio erediteranno (probabilmente) la maggior parte degli stili assegnati a quegli elementi figlio.
David dice di reintegrare Monica il

Eseguire il debug di questo con l'ispettore e vedere se c'è una regola che lo prende in consegna
Brewal

Risposte:


147

Come commentato da David Thomas , i discendenti di quegli elementi figli erediteranno (probabilmente) la maggior parte degli stili assegnati a quegli elementi figli.

Devi avvolgere il tuo .myTestClassinterno in un elemento e applicare gli stili ai discendenti aggiungendo il .wrapper * selettore discendente . Quindi, aggiungi .myTestClass > * il selettore figlio per applicare lo stile agli elementi figli, non ai suoi nipoti. Ad esempio in questo modo:

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
Non utilizzare mai un selettore universale. Ha un grande impatto sulle prestazioni sul rendering.
yes Ican

4
@ yesIcan: Ok, buono a sapersi .... hai una soluzione alternativa che non utilizzi il selettore universale?
Matthew Nichols,

8
Le prestazioni del selettore universale non sono poi così male sui browser moderni. Ecco un riferimento . La mia esperienza sul lavoro corrobora la conclusione di questo autore.
Nathan

-2

Invece del *selettore puoi usare :not(selector)con il >selettore e impostare qualcosa che sicuramente non sarà un bambino.

Modifica: pensavo che sarebbe stato più veloce ma si è scoperto che mi sbagliavo. Ignorare.

Esempio:

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


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

5
Qual è il vantaggio di farlo?
Wilson Biggs

3
@WilsonBiggs - sembra essere un tentativo fuorviante di "non utilizzare un selettore universale". Ma è ovviamente una cattiva idea, poiché è "quasi universale", ma richiede un test aggiuntivo - Quindi deve fare tutto il lavoro che farebbe un selettore universale, e poi fare un lavoro aggiuntivo.
ToolmakerSteve

: not (selector) funziona solo su safari e sembra che non funzionerà su chrome / firefox
gtamborero
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.