Come usare Sass per costruire un progetto con più temi

Il flusso di lavoro dello sviluppatore frontend ha subito grandi cambiamenti negli ultimi anni. Più complessità, requisiti più elevati e progetti più grandi ci spingono verso nuove tecnologie come i preprocessori. Personalmente, adoro il mio flusso di lavoro con il preprocessore e non vorrei perdere Sass per i miei progetti in questi giorni - senza di esso sarei un disastro.

Una situazione in particolare in cui Sass mi ha aiutato è la creazione di un singolo frontend solido che può avere diversi temi - cambiare facilmente i colori, le immagini oi caratteri. Oggi descriverò il mio flusso di lavoro, spero che ne porti via qualcosa di utile.

Struttura basilare

Ecco la struttura di un progetto di esempio. Puoi usare qualsiasi partiale che ritieni logicamente dovrebbe essere incluso. La chiave è avere una cartella separata per temi e una nuova .SCSS file per ogni tema. 

Folder-Struttura

| - _scss / | - | - _base / | - | - | - _config.scss | - | - _layouts / | - | - | - _l-grid.scss | - | - | - _l-default.scss | - | - _modules / | - | - | - _m-accordions.scss | - | - | - _m-teasers.scss | - | -_themes / | - | - | - _light-theme / | - | - | - | - light .scss | - | - application.scss

Costruisci la base con un file principale

Nel application.scss file importi tutti i tuoi partial, ignorando la cartella _themes / a questo punto. Questo costruisce le basi su cui possiamo creare diversi temi.

@charset 'UTF-8'; // 1.Base @import '_base / _config.scss'; // 2.Layouts @import '_layouts / _l-grid', '_layouts / _l-default'; // 3.Moduli @import '_modules / _m-accordions', '_modules / _m-teasers';

Configurazione

Colori, caratteri e molto altro

La configurazione del tuo progetto è molto importante. Qui le variabili vengono in soccorso, permettendoci di impostare i valori predefiniti, quindi sovrascrivere i valori a livello di tema in seguito. Qui puoi vedere che ho impostato alcune variabili per colori, caratteri e impostazioni dei bordi.

Per maggiori dettagli sulle variabili di denominazione, dai uno sguardo a Suggerimento rapido di Jim Nielsen: Assegna un nome alle tue variabili SASS in modo modulare.

@charset "UTF-8"; // Colors $ black: # 000; $ bianco: #fff; $ rosso: # e2061c; $ gray-light: # c9c8c8; $ grigio: # 838282; $ grigio-scuro: # 333333; $ blu: # 253652; // Corp-Colors $ corp-color: $ blue! Default; $ corp-color-dark: darken ($ corp-color, 15%)! predefinito; $ corp-color-second: $ red! default; $ corp-color-second-dark: darken ($ corp-color-second, 15%)! default; // Font $ base-font-size: 1.8! Default; $ base-font-family: Helvetica, Arial, Sans-Serif! default; $ base-font-color: $ gray-dark! default; // Border $ base-border-radius: 2px! Default; $ round-border-radius: 50%! default; $ base-border-color: $ gray! default;

La chiave di questo stadio è l'uso del !predefinito bandiera dopo le dichiarazioni delle variabili. In questo modo puoi sovrascriverli all'interno del tema .SCSS File; il !predefinito dice efficacemente "Usa questo valore se non è definito altrove".

Background-Images

Molto spesso gli sviluppatori non creano variabili per le immagini, ma scrivono gli URL direttamente all'interno dei selettori. Un approccio che mi piace è rimuovere tutti i percorsi all'interno dei partial e inserirli nel file di configurazione come variabili. Ciò renderà la tua vita più facile e il progetto più gestibile.

// Immagini $ sprite: '... /images/base/sprite.png'! Default; $ colorbox-background: '... /images/base/colorbox-background.png'! default;

Esempio di un modulo di base

Qui puoi vedere alcune variabili di sfondo in azione. Questo è un parziale modulare per una fisarmonica, facendo uso della variabile globale $ sprite ma anche impostando e usando una variabile $ Fisarmonica bgcolor che è specifico per il modulo. 

// 1. Config $ accordion-bgcolor: $ gray! Default; // 2. Base .m-accordion padding: 20px; background: $ accordion-bgcolor;  .m-accordion__trigger background: url ($ sprite) no-repeat; 

Come creare un tema

Nel file del tema (come ad esempio il _themes / _light-theme / light.scss dalla struttura demo sopra) importare il file application.scss che contiene tutti i moduli, i layout e così via. Questa è la base di tutto; con un tema piazzeremo un secondo livello sopra di esso. Niente di più. Una volta che hai importato application.scss aggiungi le stesse variabili utilizzate in precedenza, ma definisci valori specifici per questo tema. 

Usando questa tecnica, se aggiungiamo nuovi moduli alla base del progetto, automaticamente (e in modo innocuo) li compileremo in tutti i nostri temi.

@charset 'UTF-8'; // 1.Overwrite stuff $ corp-color: $ gray; $ corp-color-darken: darken ($ corp-colore, 10%); $ corp-color-second: $ blue; $ corp-color-second-dark: darken ($ corp-color-second, 10%); $ base-font-size: 1.6; $ base-font-family: Droid Sans, Georgia, Arial; $ base-border-radius: 0px; $ base-border-color: $ gray-light; // Immagini $ sprite: '... /images/light/sprite.png'; $ colorbox-background: '... /images/light/colorbox-background.png'; $ accordion-bgcolor: $ gray-light; // 2. Importa il tema di base @import '... / ... / application';

Guardare più file in Sass

L'ultimo passo è compilare il Sass in CSS e ottenere due file diversi per l'uso. Dobbiamo compilare application.scss e il light.scss. Usando la riga di comando useresti qualcosa come:

sass --watch YOUR / PATH / application.scss: YOUR / CSSPATH / application.css YOUR / PATH / _themes / _light-theme / light.scss: YOUR / CSSPATH / light.css

Se si utilizza un'app, come CodeKit o Prepros App, la compilazione sarà un processo più visivo.

includere il light.css file nella parte superiore della pagina e dare un'occhiata al tuo sito web rinnovato.

Conclusione

Come puoi vedere, è utile e semplice avere più file di temi, tutti basati su una solida base. Sentiti libero di fare domande, o di dare un feedback e condividere le tue esperienze con noi nella sezione commenti.