Il tuo primo esempio:
<button class="button main center">Submit</button>
è sbagliato:
-
button
class sta ripetendo l'elemento stesso. Hai una class="p"
per ogni paragrafo e una class="li"
per ogni articolo della lista? Qual è il punto?
-
main
è particolarmente poco chiaro. Solo osservando il CSS, come saresti in grado di determinare a cosa si riferisce main
?
-
center
è un nome errato per una classe: center
è un valore, non un nome di classe. Immagina di volere che i tuoi hyperlink siano verdi. Faresti:
a {
color: green;
}
o creerai:
.green {
color: green;
}
e poi aggiungi class="green"
a tutti i tuoi link e poi scopri che il cliente vuole che i link vengano mostrati in arancione ora?
Considera un esempio leggermente migliore di un pulsante che annulla un'operazione mentre è evidenziato per qualche motivo e mostra un'icona vicino al testo. Dovresti fare questo:
<button class="cancel highlighted with-icon">Cancel</button>
o essere più specifico?
<button class="cancel-highlighted-with-icon">Cancel</button>
Tutto dipende da come vengono usati gli stili. Ad esempio:
- Avrebbe senso evidenziare pulsanti che non sono pulsanti Annulla?
- Esiste un'opzione di icone per i pulsanti che non sono pulsanti Annulla?
La prima domanda probabilmente riceverà una risposta positiva, e lo stile di evidenziazione sarà probabilmente lo stesso per qualsiasi altro tipo di pulsante di invio pulsante, pulsante normale, pulsante di salvataggio, pulsante di eliminazione: è il nome. Pertanto, ha senso mantenere uno stile .highlighted
separato. Per evitare collisioni, può essere applicato ai pulsanti: button.highlighted
.
La seconda domanda, d'altra parte, è meno ovvia. Sebbene i pulsanti di invio e i pulsanti di salvataggio e di eliminazione possano avere tutti un'icona, è possibile che il loro stile sia diverso ogni volta; se tutto lo stile contiene è la proprietà background-image
, utilizzando with-icon
class, avrai ancora la duplicazione del codice:
.cancel {
border: ...; border-radius: ...; padding: ...; }
.cancel.with-icon {
background-image: ...; }
.save {
border: ...; border-radius: ...; padding: ...; }
.save.with-icon {
background-image: ...; }
...
Tuttavia, quali sono le alternative? Diciamo che finisci per combinare cancel
di classe con with-icon
. Ora hai:
.cancel {
border: ...; border-radius: ...; padding: ...; }
.cancel-with-icon {
border: ...; border-radius: ...; padding: ...; background-image: ...; }
.save {
border: ...; border-radius: ...; padding: ...; }
.save-with-icon {
border: ...; border-radius: ...; padding: ...; background-image: ...; }
con un'enorme duplicazione del codice.
Se questo da solo non è sufficiente, c'è un altro motivo per mantenere with-icon
separato. Se è necessario attivare e disattivare le icone sui pulsanti, è possibile farlo in un unico metodo tramite jQuery se with-icon
è una classe effettiva. In caso contrario, sarai costretto a creare una mappa tra cancel
e cancel-with-icon
, save
e save-with-icon
e modificare quelle classi, che, anche se tecnicamente fattibile, richiedono più codice.