Module SCSS.2 – Syntaxe SCSS
Objectif
Maîtriser la syntaxe SCSS fondamentale : nesting, variables, partials pour écrire du SCSS propre et organisé.
Théorie
Variables SCSS
Déclaration :
$primary-color: #007bff;
$spacing: 1rem;
$font-family: 'Roboto', sans-serif;
Utilisation :
.button {
background-color: $primary-color;
padding: $spacing;
font-family: $font-family;
}
Portée :
$global: blue; // Globale
.container {
$local: red; // Locale au container
.element {
color: $local; // Accès à la locale
}
}
Types de variables :
// Couleurs
$primary: #007bff;
$secondary: #6c757d;
// Nombres
$spacing: 1rem;
$border-radius: 5px;
// Strings
$font-family: 'Roboto', sans-serif;
// Booléens
$enable-shadows: true;
// Lists
$colors: red, blue, green;
$spacings: 10px, 20px, 30px;
// Maps
$theme-colors: (
primary: #007bff,
secondary: #6c757d,
success: #28a745
);
Interpolation :
$property: color;
$value: blue;
.element {
#{$property}: $value; // color: blue;
}
Nesting (Imbrication)
Nesting de base :
.nav {
background-color: white;
ul {
list-style: none;
li {
display: inline-block;
a {
color: blue;
&:hover {
color: red;
}
}
}
}
}
Compilé en CSS :
.nav {
background-color: white;
}
.nav ul {
list-style: none;
}
.nav ul li {
display: inline-block;
}
.nav ul li a {
color: blue;
}
.nav ul li a:hover {
color: red;
}
Ampersand (&) :
.button {
background-color: blue;
&:hover {
background-color: darkblue;
}
&:active {
background-color: navy;
}
&--primary {
background-color: green;
}
&__icon {
margin-right: 10px;
}
}
Compilé :
.button { }
.button:hover { }
.button:active { }
.button--primary { }
.button__icon { }
Nesting de propriétés :
.element {
font: {
family: 'Roboto', sans-serif;
size: 1rem;
weight: bold;
}
border: {
width: 2px;
style: solid;
color: blue;
}
}
Compilé :
.element {
font-family: 'Roboto', sans-serif;
font-size: 1rem;
font-weight: bold;
border-width: 2px;
border-style: solid;
border-color: blue;
}
⚠️ Attention : Ne pas abuser du nesting (max 3-4 niveaux).
Partials et Imports
Partials = Fichiers SCSS préfixés par _ qui ne sont pas compilés seuls.
Créer un partial :
// _variables.scss
$primary-color: #007bff;
$spacing: 1rem;
Importer un partial :
// main.scss
@import 'variables'; // Pas besoin du _ ni .scss
@import 'mixins';
@import 'components';
Ordre d'import :
// 1. Variables (utilisées partout)
@import 'variables';
// 2. Mixins (peuvent utiliser variables)
@import 'mixins';
// 3. Base
@import 'base';
// 4. Components (utilisent variables et mixins)
@import 'components';
Structure recommandée :
scss/
├── _variables.scss
├── _mixins.scss
├── _base.scss
├── _components.scss
└── main.scss
Commentaires
Commentaires SCSS :
// Commentaire sur une ligne (non compilé)
/* Commentaire multi-lignes (compilé en CSS) */
/*!
* Commentaire important (toujours compilé)
*/
Commentaires dans le CSS compilé :
//: Non compilé (supprimé)/* */: Compilé en CSS/*! */: Toujours compilé (même en mode compressed)
Opérateurs
Mathématiques :
$width: 1000px;
$sidebar: 250px;
.main {
width: $width - $sidebar; // 750px
padding: 10px * 2; // 20px
margin: 100% / 3; // 33.333%
}
Opérateurs :
+: Addition-: Soustraction*: Multiplication/: Division%: Modulo
Attention avec / :
// Division nécessite des parenthèses ou variables
width: (100% / 3); // OK
width: $width / 3; // OK
width: 100% / 3; // Interprété comme séparateur
Comparaison :
@if $value > 10 {
// ...
}
Concaténation de strings :
$prefix: 'icon-';
$name: 'home';
.#{$prefix}#{$name} { } // .icon-home
Interpolation
Interpolation de variables :
$name: 'button';
$modifier: 'primary';
.#{$name}--#{$modifier} { } // .button--primary
Interpolation dans les propriétés :
$property: 'margin';
$side: 'top';
#{$property}-#{$side}: 10px; // margin-top: 10px;
Exercices guidés
Exercice 1 : Variables
Créez un fichier _variables.scss avec :
- Couleurs principales
- Espacements
- Tailles de police
- Utilisez-les dans vos styles
Exercice 2 : Nesting
Créez un composant avec nesting :
.cardavec.card__title,.card__body- Utilisez
&pour les modifiers - Testez le nesting de propriétés
Exercice 3 : Partials
Organisez votre SCSS :
_variables.scss_base.scssmain.scssavec imports
Exercice 4 : Opérateurs
Utilisez les opérateurs :
- Calculs de largeurs
- Espacements calculés
- Pourcentages
Exercice 5 : Interpolation
Créez des classes dynamiques :
- Avec interpolation de variables
- Classes générées automatiquement
❌ Erreurs fréquentes
Erreur 1 : Nesting trop profond
❌ Mauvais :
.nav {
ul {
li {
a {
span {
strong { } // Trop profond
}
}
}
}
}
✅ Bon :
.nav {
ul {
list-style: none;
}
a {
color: blue;
}
}
Pourquoi : Nesting profond = CSS trop spécifique.
Erreur 2 : Oublier le & pour les pseudo-classes
❌ Mauvais :
.button {
:hover { } // .button :hover (descendant)
}
✅ Bon :
.button {
&:hover { } // .button:hover
}
Pourquoi : & référence le parent.
Erreur 3 : Variables non définies
❌ Mauvais :
.element {
color: $undefined-variable;
}
✅ Bon :
$color: blue;
.element {
color: $color;
}
Pourquoi : Variables doivent être définies avant utilisation.
Erreur 4 : Import dans le mauvais ordre
❌ Mauvais :
@import 'components'; // Utilise $primary-color
@import 'variables'; // Définit $primary-color (trop tard)
✅ Bon :
@import 'variables'; // Définit d'abord
@import 'components'; // Utilise ensuite
Pourquoi : Variables doivent être définies avant utilisation.
Erreur 5 : Division sans parenthèses
❌ Mauvais :
width: 100% / 3; // Interprété comme séparateur
✅ Bon :
width: (100% / 3); // Division
Pourquoi : / peut être interprété comme séparateur CSS.
🚀 Mini-projet
Mission : Créer une structure SCSS organisée
Créez un projet SCSS avec :
Structure :
_variables.scss: Toutes les variables_base.scss: Styles de base_components.scss: Composantsmain.scss: Fichier principal avec imports
Fonctionnalités :
- Variables pour couleurs, espacements, typographie
- Nesting approprié (max 3 niveaux)
- Utilisation de
&pour BEM - Opérateurs pour calculs
- Commentaires organisés
Critères :
- ✅ Structure organisée en partials
- ✅ Variables bien utilisées
- ✅ Nesting approprié (pas trop profond)
- ✅ Imports dans le bon ordre
- ✅ Compilation fonctionnelle
Objectif : Maîtriser la syntaxe SCSS fondamentale et créer une structure organisée.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez les variables, le nesting, les partials et avez créé une structure SCSS organisée.