Cas pro 1 : maîtriser les mixins (éviter la duplication)
Les mixins sont utiles, mais si elles injectent beaucoup de règles, elles peuvent gonfler ton CSS.
/* Mixin "lourde" (beaucoup de styles) */
@mixin card-heavy {
padding: 16px;
border-radius: 12px;
background: rgba(255,255,255,.08);
box-shadow: 0 10px 30px rgba(0,0,0,.15);
transition: transform .2s ease, box-shadow .2s ease;
&:hover {
transform: translateY(-2px);
box-shadow: 0 12px 40px rgba(0,0,0,.2);
}
}
/* ⚠️ Inclure partout peut dupliquer énormément de CSS */
.card-a { @include card-heavy; }
.card-b { @include card-heavy; }
.card-c { @include card-heavy; }
Approche recommandée
Si tu as un "style de base" identique, utilise plutôt un placeholder + @extend
(ou un composant unique) pour mutualiser, et garde les mixins pour les variantes paramétrables.
Cas pro 2 : boucles et utilitaires (contrôler la taille)
Générer des utilitaires est pratique, mais il faut limiter le scope.
$space-unit: 8px;
$levels: 0, 1, 2, 3, 4, 5; // ✅ bornes raisonnables
@each $i in $levels {
.m-#{$i} { margin: $space-unit * $i; }
.p-#{$i} { padding: $space-unit * $i; }
}
Si tu passes à 0..50, tu crées des dizaines (voire centaines) de classes inutiles.
Cas pro 3 : tokens (maps) pour éviter les valeurs "magiques"
Les tokens améliorent la cohérence et réduisent la duplication.
$tokens: (
radius: (
sm: 6px,
md: 12px,
lg: 20px
),
space: (
1: 8px,
2: 16px,
3: 24px
)
);
@function token($group, $key) {
@return map-get(map-get($tokens, $group), $key);
}
.card {
border-radius: token(radius, md);
padding: token(space, 2);
}
Conseil terrain
Les tokens sont aussi une "documentation vivante" : ils montrent comment le design est censé fonctionner.
Cas pro 4 : éviter @extend sur des sélecteurs complexes
Comme vu au chapitre 13, @extend peut produire des sélecteurs énormes.
La bonne pratique est d'étendre des placeholders simples.
%btn-base {
padding: 10px 16px;
border-radius: 12px;
font-weight: 700;
}
.btn {
@extend %btn-base;
}
.btn--primary {
@extend %btn-base;
background: #7aa7ff;
color: white;
}