2012-10-24 7 views
6

Wczoraj natknąłem się na to: Jeden z moich :hover -states przestał działać. I okazało się, że jeśli to zmienić:Czy ktoś może wyjaśnić, dlaczego selektor "n-dziecko" ma wyższy priorytet niż "najeżdżanie"?

div.item {} 
div.item:hover {} 
div.item:nth-child(even) {} 

do tego:

div.item {} 
div.item:nth-child(even) {} 
div.item:hover {} 

działa ponownie.

Utworzono demo on jsfiddle, aby pokazać oba przypadki.

Czy ktoś może wyjaśnić, dlaczego :hover -state jest nadpisane przez selektor?

Odpowiedz

11

Selektory mają to samo specificity, więc ten, który pojawia się jako ostatni, ma pierwszeństwo.

+0

+1 Dziękuję, dokładnie to, czego szukałem. Sądziłem, że w pseudoklasach wciąż istnieje hierarchia. – insertusernamehere

+0

@insertusernametutaj: Nie, jedyną pseudoklasą, która jest zwolniona ze zwykłego obliczenia, jest ': not()', która zamiast tego przyjmuje specyfikę swojego argumentu. Oznacza to, że specyficzność ': not (E)' to 'E', a nie': not() '. – BoltClock

+0

@BoltClock Ah, więc istnieje co najmniej jeden wyjątek. Dzięki za te dodatkowe informacje. – insertusernamehere

0

Aby nadpisać równą specyficzność można Łańcuch selektorów

div.container_2 > div:nth-child(even):hover { 
    background: red; 
}​ 
+1

'div.item: nth-child (even): hover' wystarczy, aby zwiększyć specyfikę - nie trzeba wybierać przez rodzica. – BoltClock

+0

@BoltClock dzięki, masz rację. Moje umieszczenie na końcu stylu w skrzypcach sprawiło, że wyglądało to bardziej konkretnie. –

Powiązane problemy