2015-04-20 15 views
9

Sto facendo ricerche su css e tipografia e mi sono imbattuto in questo intrigante concetto di pseudo-selettori. Ho usato selettori psuedo del singolo colon e non ho familiarità con la versione a due punti dei selettori di psuedo. I understand quel doppio colon è chiamato pseudo-elemento invece di uno pseudo-selettore - ma perché? E qual è la differenza?CSS "::" vs ":" - pseudo-elemento vs pseudo-selettore?

Capisco anche che il singolo colon è molto più supportato, quindi in che situazione si userebbe lo pseudoelemento doppio del colon? Ci sono casi d'uso in cui il doppio colon sarebbe necessario, e il colon singolo non farebbe il lavoro? quale potrebbe essere quella situazione?

"A differenza degli pseudo-elementi, le pseudo-classi possono apparire ovunque nella catena di selettori." (citazione dal link) - Non so quale sia la 'catena di selezione', ma questo sembra anche l'ennesima limitazione dell'approccio del doppio colon. Perché dovrei usare il doppio colon se è (a mio modo di vedere) solo una versione meno supportata del colon singolo?

edit: essi sembrano non essere funzionalmente lo stesso: fiddle

<div><p>First Line</p></div> 
<div><p>Second Line</p></div> 

css

div:nth-child(1) > p { 
    color: green; 
} 

div::nth-child(2) > p { 
    color: blue; 
} 
+1

Come [stati MDN] (https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements): "A volte si vedranno due doppi punti (: :) anziché uno solo (:) Questo fa parte del CSS3 e un tentativo di distinguere tra pseudo-classi e pseudo-elementi.La maggior parte dei browser supporta entrambi i valori. " – j08691

+0

Secondo https://developer.mozilla.org/en/docs/Web/CSS/:nth-child nth-child è un selettore di pseudo-classe, quindi dovresti usare i due punti singoli, non i due punti (perché non è un selettore psedo-element). –

+1

Perché li chiamate selettori psuedo quando la documentazione li chiama pseudo-classi? –

risposta

14

pseudo-classi (:) consentono allo stile i diversi stati di un elemento per esempio quando si passa il mouse su di esso, quando è disabilitato, quando è il primo figlio del suo genitore, ecc.

Gli pseudo-elementi (::) consentono di applicare stili a parti diverse di un elemento, ad es. la prima riga, la prima lettera, inserendo il contenuto prima o dopo, ecc.

Inizialmente tutti utilizzavano un singolo due punti, ma i CSS3 introducevano il doppio colon per separare i due punti.

+2

Non c'è alcun problema con l'inserimento di contenuti con lo pseudo di due punti. – Stickers

+0

I browser possono supportare singoli punti per alcuni pseudo-elementi perché è così che sono stati definiti nei CSS2. D'altra parte, nessun browser dovrebbe consentire il doppio doppio per le pseudo-classi perché non sono mai stati definiti in questo modo. – scronide

+1

Quindi mentre non posso usare ':' e '::' nello stesso modo ('::' fallirà con ad esempio ':: hover'), potrei usare': 'in ogni situazione? –