2012-05-28 7 views

risposta

3

C'è a great doco sull'uso efficiente selettori CSS, concentriamoci su regole con selettori eccessivamente qualificati:

selettori di ID sono unici per definizione. Includendo tag o classe i qualificatori aggiungono semplicemente informazioni ridondanti che devono essere valutate senza necessità .

Invece di applicare lo stile ad un elemento con ID main, il vostro selettore riqualificare l'elemento controllando se o non è anche un div (in questo ordine).Per chiarire: selettori CSS vengono valutati destra a sinistra, a differenza stessa sintassi di selezione quando viene utilizzato in jQuery ecc

suggerimento di

Re pixelistik che div#main è più specifico di #main - sì, che è tecnicamente corretto, se avete a ricorrere a questo per aumentare la specificità di una regola, è probabile che la struttura del CSS su cui stai lavorando non sia pensata come dovrebbe.

2

Quindi la differenza è questa:

Quando si scrive lo stile div#main sarà solo per l'elemento <div>. Quando si scrive #main può essere usato come stile per <div>, <span>, <p>, ecc

E che cosa consigliare è difficile da dire, ogni sviluppatore che ha diverso. Quindi, ad esempio, utilizzo span.<nameClass> quando è nidificato in <li> per esempio.

#nav li span.href a { 
... 
} 

Penso che sia usato quando si desidera che una classe con un nome specifico possa avere un solo elemento.

Così quando scrivi span#href funzionerà solo per <span id="href">Simply dummy text</span> non per gli altri. Quando scrivi #href funzionerà per <span id="href">Simply dummy text</span> o <a href="#" id="href">Link</a> ma entrambi sono corretti quando chiedi anche questo. Differenze ho scritto sopra.

+0

Grazie, ma relativo al codice fornito? Entrambe le div. – Teson

+0

così modificato uomo :-) – Sajmon

+0

collisione ID? Io non ci vado mai ... – Teson

2

#main corrisponde a tutto con ID 'principale', mentre div#main corrisponde solo a <div> elementi con ID principale. Idealmente, non dovresti mai avere due elementi con lo stesso ID, quindi realisticamente i due non fanno la differenza, ma ci sono probabilmente problemi relativi alle prestazioni riguardanti la possibilità di specificare il risultato più rapidamente se si specifica div.

+2

Rende più lento in realtà. Come ho detto nella mia risposta di seguito, i selettori di CSS sono analizzati RTL, il che significa che al momento di trovare un elemento con un id 'main', il motore di rendering dovrà verificare se è anche un' div'. Mentre lo sforzo intorno a questo potrebbe essere visto come trascurabile, mi preoccuperei di più sull'impatto strutturale e, eventualmente, sull'override della specificità indesiderata. –

+2

@ o.v. Il fatto che il tipo di un elemento sia verificato dopo che un browser lo ha individuato tramite il suo ID non ha nulla a che fare con l'analisi di RTL. L'analisi RTL funziona tra i combinatori. – BoltClock

+0

@BoltClock: considera due scenari, quando un '#aaa .bbb' viene valutato dal motore di rendering e quando viene utilizzato per abbinare gli elementi DOM w/JS. Nel primo scenario, tutti gli elementi che corrispondono a '.bbb' saranno trovati per primi, e quindi ri-qualificati guardando i loro genitori (RTL). Nel secondo scenario, un elemento che corrisponde a '# aaa' viene (rapidamente) trovato e quindi i suoi discendenti vengono cercati per una corrispondenza con' .bbb'. Questo è ciò che intendevo dicendo * i selettori di CSS sono analizzati RTL * - due modi polarmente diversi per risolvere lo stesso problema. E non so perché, vado con il flusso :) –