2012-10-24 1 views
6

Gestern lief ich in diesem: Einer meiner :hover -States funktioniert nicht mehr. Ich fand heraus, dass, wenn ich das ändern:Kann jemand erklären, warum der "nth-child" -Wähler eine höhere Priorität hat als "hover"?

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

dazu:

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

es wieder funktioniert.

Ich habe eine demo on jsfiddle erstellt, um beide Fälle anzuzeigen.

Kann jemand erklären, warum der :hover -Status vom Selektor überschrieben wird?

Antwort

11

Die Selektoren haben die gleiche specificity, so dass die letzte Priorität hat.

+0

+1 Danke, genau das, was ich suchte. Ich dachte, dass es innerhalb der Pseudoklassen immer noch eine Art Hierarchie gibt. – insertusernamehere

+0

@insertusernamehere: Nein, die einzige Pseudoklasse, die von der üblichen Berechnung ausgenommen ist, ist ': not()', die stattdessen die Spezifität ihres Arguments annimmt. Dies bedeutet, dass die Spezifität von ': not (E)' 'E' ist und nicht': not() '. – BoltClock

+0

@BoltClock Ah, also gibt es mindestens eine Ausnahme. Danke für diese zusätzliche Information. – insertusernamehere

0

Um die gleiche Spezifität außer Kraft setzen Sie die Selektoren Kette

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

'div.item: nth-child (even): Hover' ist genug, um die Spezifität zu erhöhen - keine Notwendigkeit, nach Eltern auszuwählen. – BoltClock

+0

@BoltClock danke, du hast Recht. Meine Platzierung am Ende des Stils in der Geige ließ es erscheinen, dass es spezifischer war. –

Verwandte Themen