Comment utiliser Sass pour créer un projet comportant plusieurs thèmes

Le flux de travail du développeur frontend a subi de grands changements ces dernières années. Plus de complexité, des exigences plus élevées et des projets plus importants nous amènent vers de nouvelles technologies telles que les pré-processeurs. Personnellement, j'aime mon flux de travail de préprocesseur et je ne voudrais pas rater Sass pour mes projets ces temps-ci - sans cela, je serais un gâchis.

Sass m'a notamment aidé à créer une seule et même interface solide pouvant avoir différents thèmes - changer facilement de couleur, d'image ou de police. Aujourd'hui, je vais décrire mon flux de travail, j'espère que vous en retirerez quelque chose d'utile.

Structure basique

Voici la structure d'un exemple de projet. Vous pouvez utiliser tous les partiels qui, à votre avis, devraient être inclus. L’important est d’avoir un dossier séparé pour les thèmes et un nouveau .scss fichier pour chaque thème. 

Structure du dossier

| - _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

Construire la base avec un fichier principal

dans le application.scss fichier vous importez tous vos partiels, en ignorant le dossier _themes / À ce point. Cela construit la base sur laquelle nous pouvons créer différents thèmes.

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

Configuration

Couleurs, polices et bien plus encore

La configuration de votre projet est très importante. Ici, les variables viennent à la rescousse, nous permettant de définir les valeurs par défaut, puis d’écraser les valeurs au niveau du thème ultérieurement. Ici vous pouvez voir que j'ai défini des variables pour les couleurs, les polices et les paramètres de bordure.

Pour plus de détails sur la dénomination des variables, consultez le conseil rapide de Jim Nielsen: Nommez vos variables SASS de manière modulaire..

@charset "UTF-8"; // Couleurs $ black: # 000; $ white: #fff; $ red: # e2061c; $ grey-light: # c9c8c8; $ grey: # 838282; $ grey-dark: # 333333; $ blue: # 253652; // Corp-Couleurs $ corp-color: $ blue! Default; $ corp-color-dark: assombrir ($ corp-color, 15%)! default; $ corp-color-second: $ red! default; $ corp-color-second-dark: assombrir ($ corp-color-second, 15%)! default; // Police $ base-font-size: 1.8! Default; $ base-font-family: Helvetica, Arial, Sans-Serif! default; $ base-font-color: $ grey-dark! default; // Bordure $ base-border-radius: 2px! Default; $ arrondi-frontière-rayon: 50%! default; $ base-border-color: $ grey! default;

La clé de cette étape consiste à utiliser le !défaut drapeau après les déclarations de variables. Cela vous permet de les écraser dans le thème. .scss des dossiers; la !défaut dit efficacement “Utiliser cette valeur si elle n'est pas définie ailleurs”.

Images de fond

Très souvent, les développeurs ne créent pas de variables pour les images, mais écrivent des URL directement dans les sélecteurs. Une approche que j’aime est de supprimer tous les chemins des partiels et de les placer dans le fichier de configuration sous forme de variables. Cela vous facilitera la vie et rendra le projet plus facile à maintenir..

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

Exemple de module de base

Ici, vous pouvez voir certaines variables d'arrière-plan en action. Ceci est un partiel modulaire pour un accordéon, utilisant la variable globale $ sprite mais aussi la mise et l'utilisation d'une variable $ accordéon-bgcolor qui est spécifique au module. 

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

Comment créer un thème

Dans votre fichier de thème (tel que le _themes / _light-theme / light.scss de la structure de démonstration ci-dessus) importez le application.scss qui contient tous les modules, mises en page et ainsi de suite. C'est la base de tout. avec un thème, nous allons placer une seconde couche dessus. Rien de plus. Une fois que vous avez importé application.scss ajoute les mêmes variables que celles utilisées précédemment, mais définit des valeurs spécifiques à ce thème. 

En utilisant cette technique, si nous ajoutons de nouveaux modules à la base du projet, nous les compilerons automatiquement (et sans danger) dans tous nos thèmes..

@charset 'UTF-8'; // 1.Overwrite stuff $ corp-color: $ grey; $ corp-color-darken: assombrit ($ corp-color, 10%); $ corp-color-second: $ blue; $ corp-color-second-dark: assombrit ($ corp-color-second, 10%); $ base-font-size: 1.6; $ base-font-family: Droid Sans, Géorgie, Arial; $ base-border-radius: 0px; $ base-border-color: $ grey-light; // Images $ sprite: '… /images/light/sprite.png'; $ colorbox-background: '… /images/light/colorbox-background.png'; $ accordéon-bgcolor: $ grey-light; // 2. Importer le thème de base @import '… /… / application';

Regarder plusieurs fichiers dans Sass

La dernière étape consiste à compiler le fichier Sass en CSS et à obtenir deux fichiers différents à utiliser. Il faut compiler application.scss et le light.scss. En utilisant la ligne de commande, vous utiliseriez quelque chose comme:

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

Si vous utilisez une application, telle que CodeKit ou une application Prepros, la compilation sera un processus plus visuel..

Inclure le light.css déposer dans l'en-tête de votre page et jeter un coup d'œil sur votre site Web rafraîchi.

Conclusion

Comme vous pouvez le constater, il est utile et simple d’avoir plusieurs fichiers de thèmes, tous basés sur une base solide. N'hésitez pas à poser des questions ou à donner votre avis et à partager vos expériences avec nous dans la section commentaires.