📚 Cours SCSS (Sass) 📍 Chapitre 4 / 21

Variables en SCSS

Les variables sont généralement la première fonctionnalité SCSS utilisée en pratique. Elles permettent de centraliser des valeurs importantes (couleurs, tailles, espacements), d'éviter les répétitions et de rendre le code plus cohérent et plus simple à maintenir. Dans ce chapitre, nous allons explorer en détail cette fonctionnalité fondamentale.

Objectifs du chapitre

  • Comprendre ce qu'est une variable SCSS et comment elle diffère des variables CSS natives.
  • Savoir déclarer et utiliser des variables dans différents contextes.
  • Identifier les cas où les variables apportent une réelle valeur ajoutée.
  • Adopter de bonnes pratiques de nommage et d'organisation.
  • Éviter les pièges courants liés à l'utilisation des variables.
À retenir

Une variable SCSS sert à représenter une valeur importante, pas simplement à éviter d'écrire une valeur une seule fois. Elle doit avoir une signification dans le système de design.

Explications théoriques détaillées

Qu'est-ce qu'une variable SCSS ?

Une variable SCSS est un conteneur qui stocke une valeur (couleur, nombre, texte, unité…) et à laquelle on donne un nom significatif. Contrairement aux variables CSS natives (--variable), les variables SCSS sont compilées et n'existent pas dans le CSS final.

En SCSS, les variables commencent toujours par le symbole $.

SCSS
// Déclaration d'une variable
$primary-color: #7aa7ff;
$base-spacing: 16px;
$border-radius: 12px;

Ces variables peuvent ensuite être réutilisées autant de fois que nécessaire dans tout le fichier SCSS. Le compilateur Sass remplacera chaque occurrence par sa valeur lors de la génération du CSS.

Pourquoi utiliser des variables SCSS ?

Sans variables, une même valeur est souvent répétée à plusieurs endroits. Cela pose plusieurs problèmes en développement :

  • Modifications risquées : changer une couleur nécessite de la rechercher et la remplacer partout.
  • Incohérences : des valeurs légèrement différentes peuvent apparaître (#7aa7ff vs #7aa8ff).
  • Manque de documentation : les valeurs "magiques" ne parlent pas d'elles-mêmes.

Les variables SCSS permettent de :

  • Centraliser les valeurs importantes en un seul endroit
  • Faciliter les changements globaux en un seul point de modification
  • Documenter implicitement le design grâce à des noms significatifs
  • Assurer la cohérence à travers tout le projet
  • Améliorer la collaboration entre développeurs et designers
Conseil terrain

Même sur un petit projet, commencer par définir quelques variables clés (couleur principale, espacement de base, rayon de bordure) peut faire gagner beaucoup de temps plus tard. C'est une bonne habitude à prendre dès le début.

Exemples simples

Variable de couleur

Le cas d'usage le plus courant : centraliser les couleurs du projet.

SCSS :

SCSS
$primary: #7aa7ff;
$secondary: #ffb703;
$text-color: #ffffff;

.button {
  background: $primary;
  color: white;
  border: none;
  padding: 12px 24px;
  border-radius: 8px;
}

.header {
  background: rgba($primary, 0.1);
  border-bottom: 2px solid $primary;
}

CSS généré :

CSS
.button {
  background: #7aa7ff;
  color: white;
  border: none;
  padding: 12px 24px;
  border-radius: 8px;
}

.header {
  background: rgba(122, 167, 255, 0.1);
  border-bottom: 2px solid #7aa7ff;
}
À retenir

Si la couleur principale change, une seule modification suffit. Notez également que SCSS permet d'utiliser des fonctions comme rgba() directement avec les variables de couleur.

Variables numériques et unités

Les variables peuvent stocker des nombres avec leurs unités. C'est particulièrement utile pour les espacements, les tailles de police, et les rayons de bordure.

SCSS
// Variables d'espacement
$radius: 12px;
$spacing-small: 8px;
$spacing-medium: 16px;
$spacing-large: 24px;

// Variables typographiques
$font-size-base: 16px;
$font-size-large: 20px;
$line-height-base: 1.6;

.card {
  border-radius: $radius;
  padding: $spacing-medium;
  margin-bottom: $spacing-large;
}

.title {
  font-size: $font-size-large;
  margin-bottom: $spacing-small;
  line-height: $line-height-base;
}

Exemples concrets et professionnels

Mini design system avec variables

Dans un projet réel, on regroupe les valeurs de design dans des variables globales pour créer un système cohérent. Voici un exemple de fichier _variables.scss typique :

SCSS
// ====================================
// VARIABLES DE DESIGN
// ====================================

// --- Couleurs ---
$color-primary: #7aa7ff;
$color-primary-dark: #5a8fff;
$color-secondary: #ffb703;
$color-success: #10b981;
$color-danger: #ef4444;

// Palette de gris
$color-gray-50: #f9fafb;
$color-gray-100: #f3f4f6;
$color-gray-200: #e5e7eb;
$color-gray-900: #111827;

// Couleurs sémantiques
$color-text: $color-gray-900;
$color-background: $color-gray-50;
$color-border: $color-gray-200;

// --- Espacements ---
$space-unit: 4px;
$space-1: $space-unit;      // 4px
$space-2: $space-unit * 2;  // 8px
$space-3: $space-unit * 3;  // 12px
$space-4: $space-unit * 4;  // 16px
$space-6: $space-unit * 6;  // 24px

// --- Typographie ---
$font-family-base: 'Inter', system-ui, -apple-system, sans-serif;
$font-size-base: 16px;
$font-size-sm: 14px;
$font-size-lg: 18px;
$line-height-base: 1.6;

// --- Bordures ---
$border-radius-sm: 4px;
$border-radius-md: 8px;
$border-radius-lg: 12px;
$border-width: 1px;

// --- Ombres ---
$shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
$shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
$shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);

Ces variables peuvent ensuite être utilisées dans tout le projet :

SCSS
// Import des variables (nous verrons cela au chapitre 6)
@use 'variables' as v;

.btn {
  background: v.$color-primary;
  color: white;
  padding: v.$space-3 v.$space-4;
  border-radius: v.$border-radius-md;
  font-family: v.$font-family-base;
  border: none;
  box-shadow: v.$shadow-sm;
  transition: all 0.2s ease;
}

.btn:hover {
  background: v.$color-primary-dark;
  box-shadow: v.$shadow-md;
}
Conseil terrain

En équipe, ces variables deviennent un langage commun entre développeurs et designers. Un designer peut modifier une valeur dans le fichier de variables, et tout le design se met à jour automatiquement. C'est un énorme gain de temps et de cohérence.

Variables conditionnelles et calculs

Les variables SCSS peuvent être utilisées dans des calculs et être conditionnées. Cela permet une grande flexibilité.

SCSS
$base-size: 16px;
$multiplier: 1.5;

// Calculs avec variables
$font-size-h1: $base-size * 2.5;        // 40px
$font-size-h2: $base-size * 2;          // 32px
$font-size-h3: $base-size * 1.75;       // 28px

// Variables conditionnelles (avec des fonctions, que nous verrons plus tard)
$spacing-large: if($multiplier > 1, 24px, 16px);

.container {
  max-width: $base-size * 60;  // 960px
  margin: 0 auto;
  padding: $base-size * 1.5;   // 24px
}

Bonnes pratiques

Bonnes pratiques pour les variables SCSS

  • Nommage explicite : préférer $color-primary à $blue ou $color1.
  • Organisation logique : regrouper les variables par catégorie (couleurs, espacements, typographie).
  • Consistance : utiliser le même préfixe pour les variables liées ($color-, $font-, $spacing-).
  • Documentation : commenter les variables complexes ou importantes.
  • Portée appropriée : les variables globales pour les valeurs de design, locales pour les besoins spécifiques.
  • Éviter la sur-engineering : ne pas créer de variable pour une valeur utilisée une seule fois.
À retenir

La force des variables SCSS ne réside pas dans leur nombre, mais dans leur pertinence. Quelques variables bien choisies peuvent transformer la maintenabilité d'un projet, tandis que des centaines de variables mal organisées peuvent le rendre encore plus complexe.

Erreurs courantes

Erreur 1 : créer trop de variables

Une variable doit avoir du sens dans le système de design. Si une valeur n'est utilisée qu'une seule fois et n'a pas de signification particulière, elle n'a probablement pas besoin d'être variable.

Exemple à éviter :

SCSS
// Trop spécifique, utilisé une seule fois
$header-top-padding: 24px;
$button-left-margin: 8px;

Erreur 2 : utiliser des noms trop vagues

$color1, $value ou $size n'expliquent rien sur le rôle de la variable. Le nom doit indiquer clairement l'utilité de la variable.

Exemple à éviter :

SCSS
$main: #7aa7ff;  // Que signifie "main" ?
$big: 24px;      // "Big" par rapport à quoi ?

Erreur 3 : mélanger variables SCSS et CSS

Les variables CSS natives (--variable) et SCSS ($variable) ont des cas d'usage différents. En général :

  • Variables SCSS : pour les valeurs de design à la compilation
  • Variables CSS : pour les valeurs dynamiques accessibles/modifiables via JavaScript

Résumé du chapitre

Ce que vous avez appris
Les variables SCSS ($variable) permettent de centraliser les valeurs importantes.
Elles améliorent la cohérence, la maintenabilité et facilitent les changements globaux.
Un bon nommage est essentiel pour la clarté du code.
Les variables doivent être organisées logiquement (couleurs, espacements, typographie).
Il faut éviter de créer des variables inutiles ou trop spécifiques.

Prochain chapitre : Imbrication des règles (Nesting)

Maintenant que nous maîtrisons les variables, passons à une autre fonctionnalité fondamentale de SCSS : l'imbrication des règles (nesting). Cette fonctionnalité permet d'écrire du CSS qui reflète plus fidèlement la structure HTML, rendant le code plus lisible et plus organisé.

  • Comprendre le principe du nesting (imbrication)
  • Apprendre à imbriquer les sélecteurs de manière efficace
  • Utiliser le sélecteur parent &
  • Éviter le nesting excessif (piège courant)
  • Cas pratiques d'utilisation professionnelle