2016-04-27 19 views
5

In teoria i selettori di figlio CSS sono più efficienti dei selettori di tag. Ma cosa succede quando hai una classe e devi disegnare un tag specifico all'interno di questo elemento di classe, ma non sono un bambino di primo livello?Selettori CSS multipli per bambini vs prestazioni del selettore di tag singoli

Vediamo un esempio:

.styled-table > tbody > tr > td{ 
    // Some cell styles 
} 

VS

.styled-table td{ 
    // Some cell styles 
} 

Quale di questi è una migliore prassi esecutiva CSS?

+1

"Ma cosa succede quando hai una classe e hai bisogno di disegnare tag specifici all'interno di questo elemento di classe ma non sono un bambino di primo livello?" Quindi le prestazioni diventano completamente irrilevanti. – BoltClock

+1

Il CSS viene letto da destra a sinistra dall'interprete, selettori più corti === maggiori prestazioni. –

risposta

5

Per MDN: Evitare il selettore discendente ~

Il selettore discendente è il selettore più costosa in CSS.. È spaventosamente costoso, soprattutto se il selettore si trova nel Tag o nella categoria universale.

Se si pensa che attraverso la logica, con un selettore discendente, il motore CSS controllerà ogni bambino dell'elemento principale (in questo caso .styled-table) alla ricerca di corrispondenze (in questo caso il tag td) e poi ognuno figlio di quei bambini e così via e così via.

Con un selettore di figlio, però, stai dicendo al motore esattamente quale "percorso" seguire per cercare una corrispondenza. Se non riesce a trovare una corrispondenza in qualsiasi punto del percorso (ad es., Se il tuo .styled-table non ha uno tbody come uno dei suoi figli immediati), allora abbandonerà il selettore.

+0

Il collegamento che hai inviato alla documentazione MDN segnala anche che queste linee guida sono state scritte nel 2000 e sono/non possono più essere rilevanti per i browser moderni. – fbid

+1

Oops, lo sapevo, ma quando è apparso su Google, aveva una data del 15 gennaio 2016, quindi ho pensato che fosse stato aggiornato. Un po 'più Googling rivela che entrambi i selettori hanno ancora scarse prestazioni, rispetto ad altri selettori, e che il selettore figlio ha prestazioni migliori rispetto al selettore discendente. – Shaggy