sass: usa selettori astratti o mixin / segnaposto?

6

Questo potrebbe essere stato coperto in un'altra discussione. Non l'ho trovato però ..

Oggi, con Sass ho 2 opzioni per lo styling del mio sito Web.
Vediamo esempi

Esempio 1

<button class="button main center">Submit</button>

Ho 3 classi, ognuna è abbastanza astratta .. possono verificarsi collisioni. Ad esempio, bootstrap ha un selettore .close . Si è scontrato con il mio codice su diversi progetti.

Esempio 2

<button class="submit-button">Submit</button>

.submit-button{
    @include button;
    @include main;
    @include center;
}

Posso farlo anche con segnaposto ed estensione, ma l'implementazione non è rilevante per la domanda.

In questo metodo ho un selettore più specifico e riuso le mie regole css nei miei file scss.

La domanda

Quale dovrei usare?

È solo una questione di gusti, o c'è una ragione tecnica per preferire uno rispetto all'altro?

Uno mi richiederebbe di modificare molto l'html, l'altro mi richiederebbe di cambiare CSS.
Mi piace cambiare il mio CSS in modo migliore poiché non modifica il contenuto (per me, tutte le parti di HTML sono considerate contenuto, anche i metadati), solo lo stile

Come accennato, sto disegnando un sito Web e non sto sviluppando una libreria come bootstrap per essere utilizzata da altri.

    
posta guy mograbi 24.11.2016 - 20:47
fonte

1 risposta

1

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.

    
risposta data 24.12.2016 - 21:31
fonte

Leggi altre domande sui tag