2011-12-16 22 views
14

Czy to jest praca, w której zwariowałem?pierwsze dziecko nie pracuje

.project.work:first-child:before { 
 
    content: 'Projects'; 
 
} 
 
.project.research:first-child:before { 
 
    content: 'Research'; 
 
}
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project work"> 
 
    <p>abcdef</p> 
 
</div> 
 
<div class="project research"> 
 
    <p>abcdef</p> 
 
</div>

projects:first-child działa dobrze, research:first-child nie przykleja. Jakieś pomysły?

Demo To nie działa, ale jaki jest najlepszy sposób, aby to osiągnąć?

+2

': first-child' wybiera tylko pierwsze dziecko. Nic więcej. – BoltClock

+0

.project.research: first-child Czy to nie pierwszy tego rodzaju? – uriah

+0

Jest, ale nie jest pierwszym dzieckiem rodzica. – BoltClock

Odpowiedz

14

:first-child tylko wybiera pierwsze dziecko swojego rodzica. Nic więcej.

Jak wspomniano w kilku innych moich odpowiedziach na miejscu (1234), nie ma :first-of-class Pseudo-klasa. Jeśli chcesz zastosować style do pierwszej z każdej klasy elementów div, rozwiązaniem jest zastosowanie stylów do wszystkich dzieci z tej klasy oraz ogólny selektor dla rodzeństwa, aby cofnąć style od kolejnych rodzeństwa.

Twój CSS będzie wtedy wyglądać tak:

.project.work:before { 
    content: 'Work'; 
} 

.project.research:before { 
    content: 'Research'; 
} 

.project.work ~ .project.work:before, 
.project.research ~ .project.research:before { 
    content: none; 
} 
+0

W czystym arkuszu stylów CSS nie ma możliwości zastosowania tego dynamicznie (tzn. Bez konieczności stosowania kodów stałych w dodatkowych klasach, jeśli zdecydujesz się dodać je później). Po dodaniu kolejnych klas, musisz dodać je do swojego CSS ręcznie w ten sposób. – BoltClock

+0

Idealne, stosuje się do wszystkich i cofa rodzeństwo. Dzięki @boltclock Więc jeśli mam dodać kolejną klasę jak '.project.photography' to nie będzie działać? – uriah

+0

@uriah: To zadziała, po prostu musisz to dodać ręcznie. – BoltClock

1

Z specification:

samo jak :nth-child(1). Pseudo-klasa :first-child reprezentuje element będący pierwszym dzieckiem innego elementu.

.project.research nie jest pierwszym dzieckiem rodzica.

0

wierzę chcesz to CSS:

.project.work p:first-child:before {content:'Projects';} 
.project.research p:first-child:before {content:'Research';} 

lub

.project.work > p:first-child:before {content:'Projects';} 
.project.research > p:first-child:before {content:'Research';} 

Updated fiddle

który pasuje do pierwszego dziecka z element z klas "projekt" i „pracy "(lub" projekt "i" badania "). Nie musisz używać p:first-child, jeśli nie jest to element p, możesz zamiast tego użyć *:first-child.

+0

Dzięki! Chciałbym tylko wybrać pierwszy tego rodzaju i zastosować CSS nie każdy element. To wybierz wszystkie z nich. – uriah

+0

@uriah: Ah. Nie sądzę, że możesz to zrobić bez zmiany znaczników. Nie sądzę, że nawet selektory CSS3 mają możliwość wyboru pierwszego elementu w kontenerze z daną parą nazw klas. Nawet ': first-of-type' odnosi się do typu elementu, niezależnie od klasy. –

Powiązane problemy