Questa mi sembra una pessima idea. definire le regole css per le classi e aggiungere tali classi all'html è un ottimo modo per rendere il tuo css riutilizzabile. Il modo in cui stai suggerendo, con un selettore complesso, sembra una ricetta per i fogli di stile mutilati. Certo, il tuo html è pulito come un fischio, ma ora il css è un dolore nel sedere da mantenere.
Si consideri:
.centre-box {
/* your rules */
}
Vs
body div > div:nth-of-type(3) > div {
/* your rules */
}
Poi la settimana prossima aggiungerai una div sopra la casella che vuoi essere centrata, ed è rotta. Per risolverlo, devi trovare la regola di css tangibile che ha come target il tuo box centrale prima e cambiarlo in qualcosa di nuovo. E tutto questo fastidio in modo che il tuo html sia più pulito?
Più tempo in anticipo, costi di manutenzione più elevati, nessuna circostanza attenuante che lo renda necessario. Fine della storia.
Addendum
Perché esistono anche selettori css complicati?
A volte vuoi stile più di un solo elemento. Considera questo esempio da bootstrap , un framework css molto popolare. (Nota: è scritto in less, che viene compilato in css. Supporta il nesting, quindi tutto quello che devi sapere quando leggi l'esempio è che foo { bar { /* rule */ } }
in less è foo bar { /* rule */ }
in css.)
Esempio: sorgente della barra di navigazione utilizza >
selector ( selettore figlio diretto ) per ridimensionare i figli diretti dell'elemento .navbar-brand
.
Ma in questo caso, si usa una classe con un nome significativo per mettere in relazione la regola css con una parte del DOM, e si usano i selettori di fantasia per lo stile degli elementi figli di quella classe.
Che ne dici di farlo in JavaScript?
Anche per me non sembra una soluzione ... per convertire da classi e ID e il vecchio foglio di stile con JavaScript, manterrai il tuo css lo stesso, semplificando il tuo html, ma aggiungi un file JavaScript completamente nuovo che deve (1) utilizzare selettori complessi con jQuery, quindi è tanto più un nido di topi quanto l'opzione del foglio di stile del pazzo selettore, oppure (2) usa JavaScript senza jQuery per attraversare il DOM e attache gli elementi se necessario.
(1) è altrettanto pessimo che metterlo in css, e (2) è peggio di (1) secondo me, perché fondamentalmente devi duplicare la tua struttura DOM nel tuo file JavaScript (solo in un formato diverso , ma le stesse informazioni), quindi hai ancora un DOM con ID e classi, è solo scritto in JavaScript. Questo è un lotto più complessità.
Quindi cos'è un discreto JavaScript?
Non lo tratterò completamente qui perché su Google ci sono molti se stai cercando dettagli. Ma il punto chiave in relazione a questo è che JavaScript non invadente è che non vuoi che il tuo JavaScript si intrometta nel tuo html. Questo si basa sull'uso di ID e classi per identificare gli elementi a cui attache il comportamento di JavaScript. JavaScript discreto dice: usa id e classi per allegare eventi agli elementi invece di integrare gli eventi JavaScript.
In poche parole
Le classi Css con nomi significativi sono il modo migliore per associare un insieme di regole css con una porzione di html che si desidera modificare. Questa è la convenzione corrente e le alternative suggerite aggiungono complessità e riducono la manutenibilità.