Utilisez des tirets, partout ! Les images, classes, ids sont en lowercase et séparés par des tirets.
// Bien
.user-profile {}
.post-header {}
#top-navigation {}
// Pas bien
.userProfile {}
.postheader {}
#top_navigation {}
On nomme les images avec leur positionnement et leur utilisation ensuite
// Bien
icon-home.png
bg-container.jpg
bg-home.jpg
sprite-top-navigation.png
// Pas bien
home-icon.png
container-background.jpg
bg.jpg
top-navigation.png
Jamais utiliser d'ID pour identifier Trop d'importance et écrase le style. Idem pour !important.
On met des variables pour les font-sizes, font-weights, couleurs etc.. On débute par la propriété variabilisé, on continue avec sa spécificité. Les couleurs sont exprimés en rgb, pas de hex ou rsl
$font-size-small: 12px
$font-size-base: 14px
$font-size-large: 22px
$color-blue: rgb(122, 245, 233)
$color-red: rgb(21,122,245)
Du namespacing pour faciliter la lecture et la réutilisation Il est fait au niveau fonctionnel ( pas au niveau de la page ). On commence avec le composant et on le fait suivre avec la partie spécifique.
// Pas bien
.nav,
.home-nav,
.profile-nav,
// Bien
.nav,
.nav-bar,
.nav-list
À la ligne pour chaque nouveau sélecteur Chaque bloc est séparé par une ligne
// Pas bien
.content, .content-edit {
...
}
.content-critical {
...
}
// Bien
.content,
.content-edit {
…
}
.content-critical {
...
}
Pas d'utilisation des extend des préprocesseurs Cela va étendre le code css d'un autre composant et le dupliquer. Plutôt, créer une autre classe pour modifier la première
Un niveau de nesting maximum pour garder en lisibilité Éviter le nesting permet de mieux se rendre compte de l'impact sur les performances des sélecteurs.
// Pas bien
.list-btn {
.list-btn-inner {
.btn {
background: red;
}
.btn:hover {
.opacity(.4);
}
}
}
// Bien
.list-btn .btn-inner {
background: red;
&hover {
.opacity(.4);
}
}
Quotes everywhere Même si le css est permissif, on met des quotes partout pour mieux identifier les URLs
// Bien
background-image: url("/img/you.jpg");
font-family: "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial;
// Pas bien
background-image: url(/img/you.jpg);
font-family: Helvetica Neue Light, Helvetica Neue, Helvetica, Arial;
Aller à l'essentiel Ne pas faire des sélecteurs à rallonge, aller droit au but.
// Pas bien
ul.user-list li span a:hover { color: red; }
// Bien
.user-list a:hover { color: red; }
Utiliser des mixins pour les prefixes, des helpers pour le reste Les mixins permettent de générer les vendors préfixes et de les faire évoluer avec le meilleur support des navigateurs dans le futur.
.user-page-avatar {
.transition(width .2s ease-in);
}
.transition(@transition) {
-webkit-transition: @transition;
-moz-transition: @transition;
-ms-transition: @transition;
-o-transition: @transition;
transition: @transition;
}
Les mixins comme helpers font faire beaucoup de code redondant. On préfèrera faire des class spécifiques d'helpers
.u-pull-left {
float: left !important;
}
.u-text-left {
text-align: left !important;
}
Avoir des composants pour pouvoir les étendre et les faire varier. Ils sont proches du fonctionnel et sont comme des objets imbriqués qui affinent la sélection du style et évite le nesting.
Syntaxe : componentName-descendantName
<article class="tweet">
<header class="tweet-header">
<img class="tweet-avatar" src="{$src}" alt="{$alt}">
…
</header>
<div class="tweet-body">
…
</div>
</article>