2015-01-12 4 views
5

Selector comeLe pseudo-classi di Css senza alcun selettore, va bene?

.some-class :first-child 

che seleziona il primo bambino dentro .some-class opere come previsto in tutti i browser, anche in IE8.

Ma cellulare Chrome di 'opzione dati Ridurre' rimuove uno spazio tra .some-class e :first-child e rompe il CSS applicando stili di .some-class all'elemento stesso. In altri casi come .class1 .class2 Chrome mantiene lo spazio intatto. Probabilmente, considera lo spazio tra .some-class e :first-child uno spazio non semantico, perché pensa che non ci possa essere una pseudo-classe senza un qualche tipo di selettore.

Ma ho controllato lo standard e non dico da nessuna parte che la pseudo-classe deve avere un selettore. Allo stesso tempo tutti gli esempi con pseudo-classi includono un selettore di elementi, come

p:first-child 

Quindi sono confuso. Questo selettore CSS è errato o c'è un bug in "Riduci l'utilizzo dei dati" di Chrome?

+0

"c'è un bug in 'Ridurre l'utilizzo dei dati' di Chrome" <- Questo. –

+0

Wow, non puoi davvero inventarlo. Questa è una sciocchezza di livello IE9. – BoltClock

risposta

2

:first-child è valido come selettore standalone e questo sembra essere un bug nella versione mobile di Chrome. Possiamo confermarlo con W3C's CSS Validator.

:first-child { background: #F00; } 

Congratulazioni! Nessun errore trovato.

Infatti, tutti i componenti elencati nella sezioneSelettori della Selectors Level 3 specification è valido come selettore autonomo. Immagino che gli esempi di :first-child includano anche un selettore di elementi per evitare confusione e mostrare come può essere usato su quel particolare elemento.

+0

@ james-donelly grazie per la risposta esauriente! Ho segnalato il problema a Google e ho allegato un link a questa domanda SO. – snovity

+1

Una pseudo-classe è valida di per sé perché è un semplice selettore, proprio come un selettore di classe o un selettore di ID è valido da solo. Si dice che un selettore che non inizia con un selettore di tipo abbia invece un selettore '*' implicito. Ciò include pseudo-elementi (ad esempio '*,: before,: dopo {box-sizing: border-box;}'). – BoltClock

1

Direi che è un bug. Dovreste essere in grado di lavorare intorno ad esso con .some classe *: first-child