Lors de la conférence “Maîtriser son style CSS” donnée dans le cadre du BDX.IO, Pierre Renaudin nous a présenté ses conseils pour mieux concevoir et maintenir son CSS.
Pourquoi s’occuper de son CSS?
Un CSS doit être maintenable au fil du temps. Pour une meilleure maintenabilité, un code lisible pourrait aider. Ensuite, un CSS continue d’évoluer. Il faut donc pouvoir ajouter des nouveaux styles sans tout casser.
TIP 1: Définir quelques règles
- Ecrire les noms de classes en minuscule.
Exemple:
/*Bad*/
.userProfile {...}
/*Good*/
.user-profile{...}
- Eviter d’utiliser les id: choisir entre un id ou une classe. Si le style doit être utilisé à plusieurs endroits, il nous faut donc une classe.
Exemple:
/* Bad */
#top_navigation{...}
/* Good */
.top-navigation{...}
- Un sélecteur par ligne
Exemple:
/*Bad*/
.document, .document-open {...}
/*Good*/
.document,
.document-open {...}
- Séparer les composants fonctionnels et graphiques
Exemple:
/*Bad*/
.button{
background-color: blue;
margin-top: 20px;
}
/*Good*/
button{
background-color: blue;
}
.user-button{
margin-top: 20px;
}
- Utiliser les sélecteurs plus directs
Exemple:
/*Bad*/
ul .user-list li span a:hover {...}
/*Good*/
.user-list a:hover{...}
- Refactorer son code au mieux
Définir des règles est utile lorsque nous écrivons les feuilles de style manuellement.
TIP2: Les préprocesseurs: SASS /LESS
Utiliser un préproceseur permet d’optimiser son code en amont et augmente la productivité.
Pour la conférence, le préprocesseur utilisé est SASS.
Niveau syntaxe, le CSS devient un “jeu d’enfant”. Par exemple avec SASS, on remplace les accolades par des tabulations.
Exemple:
body
color: #333
Si nous utilisons SASS, nous aurons donc des fichiers .sass.
Quelques bases de SASS:
- définition des variables
Exemple .sass:
$font-stack: Arial
$primary-color: #333
body
font: $font-stack
color: $primary-color
Après compilation (.css):
body {
font: Arial;
color: #333;
}
- les opérations
Exemple de fichier .sass:
$border-radius-base: 3px
.user-container
border-radius: $border-radius-base *
Après compilation (.css):
.user-container {
border-radius: 6px;
}
- Découper en partial les feuilles de styles
sass/
|—–style.sass
|—–_mixins.sass
|—–_variables.sass
|—–base/
| |—–_colors.sass
| |—–_typo.sass
| |—–_utilities.sass
|
|—–components/
| |—–_avatars.sass
| |—–_buttons.sass
|
pages/
|—–_form.sass
|—–_header.sass
L’utilisation d’un préprocesseur de type SASS permet de faciliter l’écrire de feuilles de styles. A contrario, il est aussi plus facile de se tromper.
TIP3: Framework
Utiliser un framework permet de:
- démarrer rapidement
- respecter les normes que le framework impose
- normaliser des propriétés de base
Exemples de frameworks:
- Bootstrap (orienté style)
- Foundation (orienté structure)
- Inuit.css
- Knacss etc.
Lors de l’utilisation d’un framework, les conseils sont les suivants:
- Etendre le framework plutôt que le surcharger
- Initialiser les variables du framework
- Importer certaines portions du framework
Exemple: Définition de variables de Bootstrap et import partiel
$border-radius-small: 3px
$border-radius-large: 6px
/*imports*/
@import bootstrap/forms
@import bootstrap/tables
TIP4: Composants BEM (BLOCK-ELEMENT-MODIFIER)
BEM est une méthode de nommage et de classification des classes CSS. Chacune d’entre elles a une responsabilité unique. On a ainsi beaucoup de classes mais moins de code. Elles deviennent plus strictes et informatives.
Exemple :
.message-profile--small {...}
On se retrouve avec du code légèrement redondant dans le HTML mais pas dans le CSS.
Exemple :[
<article class=”message”>
<header class=”message-header”>
</header>
<div class=”message-body”>
</div>
</article>
TIP5: Single Responsability Principle
Méthode utilisée principalement dans le développement Orienté-Objet.
Chaque classe a une responsabilité unique :
- une classe pour le style graphique
- une classe pour identifier un bloc fonctionnel
- une classe pour modifier ou nuancer une autre
Exemple :
<article class=”message”>
<header class=”message content”>
</header>
<div class=”message left”>
</div>
</article>
TIP6 : Utilisation de sélecteurs spécifiques
- u-utilities : déclaration d’un utilitaire
Exemple :
.u-pull-left {
float: left ;
}
- is-modifier : modification d’un bloc dans un certain état
Exemple :
<div class=”is-closed”> </div>
- block-element–modifier : spécification d’une variation
Exemple :
<div class=”user-avatar user-avatar--small”></div>
- js-property : réservation au Javascript
Exemple :
<div class=”js-expand”> </div>
TIP7: STYLEGUIDE
Souvent, nos feuilles de style ne sont pas documentées. Il est utile d’avoir la documentation pour maintenir notre CSS. Il existe donc un outil pour générer des guides de style : Hologram. Cet outil est écrit en Ruby. Il va parser les commentaires de nos feuilles de style et générer un guide. On pourra utiliser Cortana pour définir le thème du guide.
Exemple: http://yago.github.io/Cortana-example/
Conclusion
Pour maîtriser son CSS , il faut retenir les points suivants:
- Respecter les règles de développement définies par l’équipe
- Structurer ses feuilles de style
- Utiliser des frameworks pour faciliter l’écriture de ses feuilles de style
- Documenter
ALLER PLUS LOIN
Hologram: http://trulia.github.io/hologram/
Cortana: https://github.com/Yago/Cortana
Guidelines : http://cssguidelin.es/ by Harry Roberts
https://medium.com/@fat/ by FAT (Bootstrap)