Architecture de fichiers Sass
Accueil Tags Recherche12 Novembre 2014
Architecture de fichiers Sass
Présentation de l'architecture de fichiers que j'utilise avec Sass.Diviser pour mieux régner
Vous est-il déjà arrivé d’utiliser la règle @import
en CSS ?
Il y a quelques années, on a vu fleurir bon nombre d’exemples où un fichier CSS principal était inclus via une balise <link>
, lequel importait d’autre fichiers CSS :
@import url("layout/header.css");
@import url("layout/content.css");
@import url("layout/footer.css");
L’avantage évident de cette technique était qu’elle permettait de diviser son code CSS pour plus de lisibilité, tout en gardant une unique balise <link>
dans le HTML. À l’époque (2009), un employé de Google (Steve Souders) spécialisé dans la performance des sites web, avait rédigé un article intitulé Don’t use @import. Son article expliquait que la technique de l’import, si elle avait un côté pratique reconnu, influait de manière très néfaste sur les temps de chargement, et pouvait même dans certains cas provoquer certains bugs avec JavaScript. Cet article fut d’ailleurs repris en France par Alsacréations.
Sass reprit plus tard ce principe, en apportant la règle @import
, mais surtout les partials. Les partials sont des fichiers Sass qui n’ont pas vocation a être compilés seuls, leur intérêt est d’être inclus par un autre fichier. Afin de les identifier, il faut préfixer leur nom d’un underscore.
Exemple d’un partial _header.scss
:
header {
background: tomato;
}
Et du fichier principal app.scss
, placé dans le même dossier :
@import "header";
body {
height: 100%;
}
Le gros avantage de Sass par rapport à CSS, c’est qu’il s’agit d’un préprocesseur. C’est-à-dire que, avec la même technique précédemment présentée, vous n’aurez réellement qu’un seul fichier CSS à charger via une balise <link>
. Ce fichier contiendra l’ensemble du code sans faire le moindre @import
, évitant ainsi tout problème de chargement.
Les partials Sass sont donc à utiliser sans modération, je les considère d’ailleurs comme un des piliers de Sass, avec les variables, les règles imbriquées et les placeholders.
Organiser ses fichiers
Cela semble évident quand on en parle, mais on ne le fait pas forcément correctement. Voici l’architecture que j’utilisais sur mes premiers projets :
partials/
_header.scss
_footer.scss
app.scss
C’est simple et ça fonctionne, mais je me retrouvais au final avec un fichier app.scss
énorme, contenant le code spécifique à chaque page, à chaque bloc de contenu…
J’ai ensuite commencé à réfléchir à une meilleure architecture, afin de mieux répartir mon code. Bien que je l’ai pensée de mon côté, cette architecture s’approche énormément de celle que propose Hugo Giraudel dans son article Architecture for a Sass Project :
base/
bootstrap.scss
debug.scss
normalize.scss
components/
alerts.scss
buttons.scss
forms.scss
helpers/
mixins.scss
placeholders.scss
variables.scss
layout/
content.scss
footer.scss
header.scss
pages/
home.scss
vendor/
app.scss
Cette architecture me permet de savoir rapidement où se trouve le code que je cherche, plutôt que de scroller longuement sur mon fichier app.scss
. En parlant de ce fichier d’ailleurs, que devient-il ? Et bien il ne contient que des règles @import
, placées dans un ordre précis :
@import "helpers/variables";
@import "helpers/mixins";
@import "helpers/placeholders";
@import "base/normalize";
@import "base/bootstrap";
@import "base/debug";
@import "components/alerts";
@import "components/buttons";
@import "components/forms";
// @import "vendor/…";
@import "layout/header";
@import "layout/content";
@import "layout/footer";
@import "pages/home";
N’hésitez pas à apporter votre contribution en discutant de cette architecture dans les commentaires, ou en proposant la votre !
Liens
Don’t use @import Documentation sur la règle @import de Sass Architecture for a Sass Project