2012-07-20 12 views
12

Secondo la documentazione CSS: http://www.w3.org/TR/CSS21/cascade.html#specificityCSS classe ripetizione per aumentare la specificità

specificità è definito da (tra le altre cose) il numero di attributi e pseudo-classi nel selettore.

Quindi, la mia domanda è, è possibile aumentare la specificità ripetendo lo stesso nome di classe più e più volte?

Per esempio:

farebbe

.qtxt.qtxt.qtxt.qtxt.qtxt 
{ 
} 

hanno una specificità superiore

.qtxt.lalgn 
{ 
} 

o

.lalgn .qtxt//(space added to create child selector) 
{ 
} 

?

+0

Immagino che questo sarà specifico per il browser. –

risposta

20

Sì, è possibile e intenzionalmente. Anche se questo non è menzionato nelle specifiche CSS2, è esplicitamente menzionato nel Selectors 3 spec:

Nota: occorrenze ripetute [sic] dello stesso selettore semplice sono ammessi e aumentano la specificità.

browsers Pertanto deve aumentare la specificità quando incontra selettori semplici ripetute, finché il selettore è valido e applicabile. Questo non si applica solo a classi ripetute, ma si applica anche a ID ripetuti, attributi e pseudo-classi.

Dato il codice, .qtxt.qtxt.qtxt.qtxt.qtxt avrà la massima specificità. Gli altri due selettori sono ugualmente specifici; combinatori hanno alcuna attinenza nei calcoli specificità affatto:

/* 5 classes -> specificity = 0-5-0 */ 
.qtxt.qtxt.qtxt.qtxt.qtxt 

/* 2 classes -> specificity = 0-2-0 */ 
.qtxt.lalgn 

/* 2 classes -> specificity = 0-2-0 */ 
.lalgn .qtxt 

Inoltre, lo spazio nel tuo ultimo selettore è il discendente combinatore; il combinatore è >.

+1

L'ho appena visto in Material Design Lite e devo dire che questo deve essere il più strano abominio di spaghetti CSS che abbia mai incontrato. Non riesco a spiegarmi che alcune persone hanno pensato che sarebbe una buona idea usare qualcosa di simile in una libreria CSS. – Senthe

-3

Non è necessario modificare la specificità in questo modo ... se è necessario forzare un valore, utilizzare !important.

+0

Grazie per il suggerimento, e molto probabilmente userò questo, ma ... Ancora non conosco la risposta alla mia domanda –

+0

! Importante non deve essere usato alla leggera. Devi davvero considerare che non c'è davvero un altro modo per aggirare l'uso della specificità, ecc ...Solo allora dovresti usare l'! Importante. – brunoais

+0

Combinare le classi non è un hack, è la specifica CSS ufficiale per aumentare la specificità. L'uso di '! Important' segnala lo stato di noob e l'ignoranza di css. Molto raramente qualcuno dovrebbe usare! Importante perché sconfigge il punto di specificità CSS. Quando hai 5 classi tutte dichiarando '! Important' sulla stessa proprietà, come trovi il tuo equilibrio mentale? Io uso solo '! Important' come ultima risorsa o quando mi occupo di css orribili di altri noobs ed è l'unico modo per farlo funzionare senza riscrivere l'intera libreria – TetraDev

1

.qtxt.qtxt.qtxt avrebbe la più alta specificità ...

http://jsfiddle.net/nXBTp/1/

Tuttavia, questo è solo il caso se si ripete il nome della classe più volte che qualsiasi altro selettore, ad esempio:

http://jsfiddle.net/nXBTp/2/

+0

Grazie! :) Quale browser hai utilizzato per curiosità? Funziona qui in safari, andando a testare firefox –

+0

Ho provato l'ultima versione di Chrome, Firefox, Safari e IE. Ottenuto gli stessi risultati per ciascuno. – smilledge

+0

Questo comportamento è previsto e richiesto per i browser. Vedi la mia risposta per un riferimento. – BoltClock

Problemi correlati