📚 Cours SCSS (Sass) 📍 Chapitre 9 / 21

Chapitre 9 – Fonctions SCSS

Les fonctions SCSS permettent d'effectuer des calculs et de retourner une valeur utilisable dans tes styles. Contrairement aux mixins, elles ne génèrent pas directement de CSS : elles produisent une valeur. Ce chapitre t'apprend quand et comment les utiliser efficacement dans tes projets professionnels.

Objectifs du chapitre

  • Comprendre la différence fondamentale entre fonctions et mixins en SCSS.
  • Utiliser les fonctions SCSS intégrées pour transformer des valeurs.
  • Créer ses propres fonctions personnalisées avec logique conditionnelle.
  • Appliquer les fonctions dans des cas concrets de gestion d'espacements et de couleurs.
À retenir

Une fonction retourne une valeur. Une mixin injecte des règles CSS. Cette distinction est essentielle pour choisir le bon outil au bon moment.

Explications théoriques détaillées

Fonctions vs mixins : différence fondamentale

Les mixins servent à réutiliser des blocs de styles complets. Les fonctions, elles, servent à calculer ou transformer des valeurs qui seront ensuite utilisées dans tes propriétés CSS.

SCSS :

SCSS
// Fonction
@function double($value) {
  @return $value * 2;
}

// Utilisation
.box {
  padding: double(8px);
}

CSS généré :

CSS
.box {
  padding: 16px;
}

Ici, la fonction double retourne une valeur (16px) utilisable dans une propriété.

Structure d'une fonction SCSS

Une fonction est définie avec @function et doit obligatoirement utiliser @return pour retourner une valeur.

SCSS
@function nom($param1, $param2) {
  // calcul ou logique
  @return valeur;
}
Important

Sans @return, la fonction est invalide et générera une erreur de compilation.

Exemples simples

Fonction mathématique simple

Une fonction de base pour générer des espacements cohérents.

SCSS
@function spacing($multiplier) {
  @return 8px * $multiplier;
}

.card {
  padding: spacing(2); // 16px
  margin-bottom: spacing(3); // 24px
}
CSS
.card {
  padding: 16px;
  margin-bottom: 24px;
}

Fonction avec valeur par défaut et conditions

Les fonctions peuvent contenir de la logique conditionnelle pour retourner des valeurs différentes selon les paramètres.

SCSS
@function radius($size: md) {
  @if $size == sm {
    @return 6px;
  } @else if $size == md {
    @return 12px;
  } @else if $size == lg {
    @return 20px;
  } @else {
    @return 12px;
  }
}

.box {
  border-radius: radius(lg);
}

.small-box {
  border-radius: radius(sm);
}
À retenir

Les fonctions peuvent contenir des conditions et une vraie logique, ce qui les rend très puissantes pour créer des systèmes de design cohérents.

Exemples concrets et professionnels

Cas pro : gestion centralisée des espacements

Au lieu de multiplier les variables, on peut créer une fonction dédiée qui applique une échelle d'espacement cohérente.

SCSS
@function space($level) {
  $base: 8px;
  @return $base * $level;
}

.section {
  margin-bottom: space(4); // 32px
  padding: space(3); // 24px
}

.button {
  padding: space(2) space(3); // 16px 24px
}
Conseil terrain

Cette approche permet de maintenir une échelle d'espacement cohérente dans tout le projet. Si tu décides de changer l'unité de base (de 8px à 10px), tout s'ajuste automatiquement.

Cas pro : adaptation automatique des couleurs

SCSS fournit des fonctions natives très puissantes pour manipuler les couleurs sans créer manuellement chaque variante.

SCSS
$primary: #7aa7ff;

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

  &:hover {
    background: darken($primary, 8%);
  }

  &:active {
    background: darken($primary, 15%);
  }
}

.card {
  border: 1px solid rgba($primary, 0.2);
  background: lighten($primary, 40%);
}
Fonctions natives utiles
  • darken($color, $amount) : assombrit une couleur
  • lighten($color, $amount) : éclaircit une couleur
  • rgba($color, $alpha) : ajoute de la transparence
  • mix($color1, $color2, $weight) : mélange deux couleurs

Bonnes pratiques

Guide des bonnes pratiques pour les fonctions SCSS

  • Utiliser les fonctions pour les valeurs, pas pour générer du layout complet (privilégier les mixins dans ce cas).
  • Donner des noms explicites aux fonctions qui décrivent clairement leur rôle.
  • Limiter la complexité logique : une fonction doit faire une chose bien, pas plusieurs.
  • Centraliser les fonctions dans un fichier dédié (ex: _functions.scss) pour faciliter la maintenance.
  • Documenter les fonctions complexes avec des commentaires expliquant les paramètres attendus.
À retenir

Une bonne fonction fait un calcul clair et prévisible. Si tu dois relire plusieurs fois pour comprendre ce qu'elle fait, elle est trop complexe.

Erreurs courantes

Erreur 1 : confondre fonction et mixin

Si tu dois écrire des propriétés CSS complètes (plusieurs règles), tu as besoin d'une mixin. Si tu dois calculer une valeur unique (couleur, taille, position), tu as besoin d'une fonction.

Mauvais usage

Évite d'utiliser une fonction pour générer du CSS. C'est le rôle des mixins.

Erreur 2 : créer des fonctions trop complexes

Une fonction qui prend 5 paramètres et contient plusieurs niveaux de conditions devient rapidement illisible et difficile à déboguer.

Solution

Décompose les fonctions complexes en plusieurs fonctions simples qui font chacune une tâche précise.

Erreur 3 : oublier le @return

C'est l'erreur la plus courante avec les fonctions : oublier de retourner une valeur avec @return.

SCSS (ERREUR)
@function calculate($value) {
  $result: $value * 2;
  // Oubli du @return ! Erreur de compilation
}

Résumé du chapitre

Ce que vous avez appris
Les fonctions SCSS retournent des valeurs utilisables dans le CSS, contrairement aux mixins qui génèrent des règles CSS.
Les fonctions sont idéales pour les calculs mathématiques, les transformations de couleurs et la gestion centralisée des valeurs.
SCSS fournit des fonctions natives puissantes pour manipuler les couleurs (darken, lighten, rgba, mix).
Les fonctions personnalisées permettent de créer des systèmes de design cohérents et maintenables.

Prochain chapitre : Boucles en SCSS

Dans le prochain chapitre, nous verrons comment automatiser la répétition avec les boucles SCSS (@for, @each, @while), un outil puissant pour générer du CSS de manière intelligente et éviter la répétition manuelle.

  • Comprendre la boucle @for pour générer des classes numérotées
  • Utiliser @each pour itérer sur des listes et maps
  • Maîtriser @while pour des boucles conditionnelles
  • Cas pratiques : génération de grilles, palettes de couleurs, classes utilitaires