Cas pro 1 : système d'espacements cohérent
On veut un petit "système" d'espacements (margin et padding) basé sur une unité (ici 8px).
Plutôt que de tout écrire à la main, on génère des utilitaires.
SCSS :
$space-unit: 8px;
$space-levels: 0, 1, 2, 3, 4, 5;
@each $i in $space-levels {
.m-#{$i} { margin: $space-unit * $i; }
.mt-#{$i} { margin-top: $space-unit * $i; }
.mb-#{$i} { margin-bottom: $space-unit * $i; }
.p-#{$i} { padding: $space-unit * $i; }
.pt-#{$i} { padding-top: $space-unit * $i; }
.pb-#{$i} { padding-bottom:$space-unit * $i; }
}
CSS généré (extrait) :
.m-0 { margin: 0; }
.mt-0 { margin-top: 0; }
.mb-0 { margin-bottom: 0; }
.p-0 { padding: 0; }
.pt-0 { padding-top: 0; }
.pb-0 { padding-bottom: 0; }
.m-1 { margin: 8px; }
.mt-1 { margin-top: 8px; }
.mb-1 { margin-bottom: 8px; }
.p-1 { padding: 8px; }
.pt-1 { padding-top: 8px; }
.pb-1 { padding-bottom: 8px; }
/* ... jusqu'à 5 */
Conseil terrain
Si tu génères des utilitaires, définis des limites raisonnables (ex. 0 à 8).
Générer 0 à 50 peut produire un CSS inutilement lourd.
Cas pro 2 : grilles 12 colonnes (classes "span")
Exemple : générer des classes .col-1 à .col-12 pour un système de grille simple.
SCSS :
.grid {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 16px;
}
@for $i from 1 through 12 {
.col-#{$i} {
grid-column: span $i;
}
}
CSS généré (extrait) :
.col-1 { grid-column: span 1; }
.col-2 { grid-column: span 2; }
.col-3 { grid-column: span 3; }
.col-4 { grid-column: span 4; }
.col-5 { grid-column: span 5; }
.col-6 { grid-column: span 6; }
.col-7 { grid-column: span 7; }
.col-8 { grid-column: span 8; }
.col-9 { grid-column: span 9; }
.col-10 { grid-column: span 10; }
.col-11 { grid-column: span 11; }
.col-12 { grid-column: span 12; }
À retenir
Ce type de génération est idéal si tu construis un mini framework interne
(ou des composants réutilisables) sur plusieurs pages.
Cas pro 3 : variantes de composants (taille S/M/L)
Tu peux générer plusieurs tailles de composant à partir d'une liste, en combinant boucle et conditions.
SCSS :
$sizes: sm, md, lg;
@each $size in $sizes {
.btn--#{$size} {
@if $size == sm {
padding: 6px 10px;
font-size: 14px;
} @else if $size == md {
padding: 10px 16px;
font-size: 16px;
} @else if $size == lg {
padding: 14px 20px;
font-size: 18px;
}
}
}
CSS généré :
.btn--sm {
padding: 6px 10px;
font-size: 14px;
}
.btn--md {
padding: 10px 16px;
font-size: 16px;
}
.btn--lg {
padding: 14px 20px;
font-size: 18px;
}
Ici, on mélange boucle + conditions. Les conditions seront approfondies au chapitre 11.