2010-01-19 17 views
214

Mam następujące htmlCzy istnieje selektor CSS dla pierwszego bezpośredniego dziecka?

<div class="section"> 
    <div>header</div> 
    <div> 
      contents 
      <div>sub contents 1</div>    
      <div>sub contents 2</div> 
    </div> 
</div> 

i następujący styl:

DIV.section DIV:first-child 
{ 
    ... 
} 

z jakiegoś powodu, że nie rozumieją styl jest uzyskiwanie stosowane do "zawartości sub 1"<div> jak również "nagłówek"<div>.

Pomyślałem, że selektor stylu ma zastosowanie tylko do pierwszego bezpośredniego dziecka div z klasą o nazwie "sekcja". Jak mogę zmienić selektor, aby uzyskać to, czego chcę?

+3

http://jsfiddle.net/joelpurra/7t5CK/ –

Odpowiedz

370

To, co napisałeś dosłownie, oznacza "Znajdź dowolne divy, które znajdują się w dziale div i są pierwszym dzieckiem ich rodzica". Sub zawiera jeden tag pasujący do tego opisu.

Nie jest dla mnie jasne, czy chcesz, aby oba dzieci z głównego div, czy nie. Jeśli tak, użyj tego:

div.section > div 

Jeśli chcesz tylko nagłówek, użyj tego:

div.section > div:first-child 

Używanie > zmienia opis na: „znaleźliśmy żadnych div, które są bezpośrednimi potomkami div sekcji "czego chcesz.

Należy pamiętać, że wszystkie główne przeglądarki obsługują tę metodę, z wyjątkiem IE6. Jeśli obsługa IE6 ma krytyczne znaczenie, będziesz musiał dodać klasy do elementów div dziecka i zamiast tego użyć ich. W przeciwnym razie nie warto się tym przejmować.

+4

: first-child nie jest wymagane w tym przypadku. – 3zzy

+2

Wygląda na to, że OP nie pyta o selektor tak bardzo, dlaczego reguła jest stosowana do wszystkich elementów div dziecka. –

+0

Moją interpretacją jest to, że dostaje on koncepcję dziedziczenia CSS i myślałem, że pierwsze dziecko będzie miało taki skutek, jaki miało>. To raczej niejasne sformułowanie. – Matchu

33

CSS nazywa się kaskadowymi arkuszami stylów, ponieważ reguły są dziedziczone. Stosując następujący selektor, będzie wybrać tylko bezpośrednie dziecko rodzica, ale jego przepisy będą dziedziczone przez że div „s dzieci divs:

div.section > div { color: red } 

teraz, że zarówno divi jej dzieci będzie red. Trzeba odwołać się cokolwiek ustawić na rodzica, jeśli nie chcesz, żeby odziedziczyć:

div.section > div { color: red } 
div.section > div div { color: black } 

Teraz tylko pojedynczy div że jest bezpośrednim dzieckiem div.section będzie czerwony, ale jego dzieci będą nadal divs bądź czarny.

+4

+1 To było coś, co mnie frustruło do końca kilka lat temu :) – Sampson

+0

+1 wart uwagi notatka – Evildonald

5

Użyj div.section > div.

Jeszcze lepiej, użyj znacznika <h1> w tytule i div.section h1 w Twojej CSS, tak aby wspierać starszych przeglądarek (które nie wiedzą o >) i zachować semantyczne znaczniki.

+0

Dobry pomysł, niestety muszę również obsługiwać IE6, a jeśli używam h1, będę musiał ustawić rozmiar czcionki do dziedziczenia, aby czcionka pasowała do czcionki ciała, a symbol ie7 i poniżej nie obsługuje dziedziczenia. arg! – Jeremy

+0

Mam również divy dla dzieci i umieszczanie div dla dzieci w h1 łamie reguły, mimo że IE to renderuje, nie jestem pewien, co robią inne przeglądarki – Jeremy

5

Wyszukiwanie tego pytania w Google. Spowoduje to zwrócenie pierwszego elementu potomnego elementu o klasie container, niezależnie od typu dziecka.

.container > *:first-child 
{ 
} 
Powiązane problemy