Jak zastosować styl do wszystkich elementów potomnych elementu


112

Mam element z class='myTestClass'. Jak zastosować styl CSS do wszystkich elementów podrzędnych tych elementów? Chcę tylko zastosować styl do elementów dziecięcych. Nie jego wnuki.

mógłbym użyć

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

które działają dla wszystkich divdzieci, ale chciałbym rozwiązania, które działa dla wszystkich dzieci. Myślałem, że przydałoby się *, ale

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

nie działa.

Edytować

.myTestClass > *Selektor nie zastosować regułę w Firefoksie 26, i nie ma innego zasada marginesu zgodnie z Firebug. I to działa, czy mogę wymienić *z div.


2
Jak to „nie działa”? Należy pamiętać, że potomkowie tych elementów potomnych (prawdopodobnie) odziedziczą większość stylów przypisanych do tych elementów podrzędnych.
David mówi, że przywróć Monikę

Zdebuguj to z inspektorem i zobacz, czy istnieje reguła, która go przejmie
Brewal

Odpowiedzi:


156

Jak skomentował David Thomas , potomkowie tych elementów potomnych (prawdopodobnie) odziedziczą większość stylów przypisanych do tych elementów potomnych.

Musisz zawinąć .myTestClasselement wewnątrz elementu i zastosować style do elementów podrzędnych, dodając .wrapper * selektor potomków . Następnie dodaj .myTestClass > * selektor potomny, aby zastosować styl do elementów potomnych, a nie do jego wnuków. Na przykład w ten sposób:

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
Nigdy nie używaj selektora uniwersalnego. Ma duży wpływ na wydajność renderowania.
yesIcan

4
@yesIcan: Ok, dobrze wiedzieć .... czy masz alternatywne rozwiązanie, które nie korzysta z uniwersalnego selektora?
Matthew Nichols

8
Wydajność selektora uniwersalnego nie jest taka zła w nowoczesnych przeglądarkach. Oto odniesienie . Moje własne doświadczenia zawodowe potwierdzają wniosek tego autora.
Nathan,

-2

Zamiast *selektora możesz użyć :not(selector)z >selektorem i ustawić coś, co na pewno nie będzie dzieckiem.

Edycja: Myślałem, że będzie szybciej, ale okazuje się, że się myliłem. Lekceważenie.

Przykład:

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


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

5
Jaka jest korzyść z tego?
Wilson Biggs,

3
@WilsonBiggs - wygląda na to, że jest to chybiona próba „nieużywania selektora uniwersalnego”. Ale to oczywiście zły pomysł, ponieważ jest „prawie uniwersalny”, ale wymaga dodatkowego testu - musi więc wykonać całą pracę, jaką zrobiłby selektor uniwersalny, a następnie wykonać dodatkową pracę.
ToolmakerSteve

: not (selector) działa tylko na safari i wygląda na to, że nie będzie działać na chrome / firefox
gtamborero
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.