Module Bootstrap.5 – Personnalisation
Objectif
Maîtriser la personnalisation Bootstrap : thème, variables SCSS, override CSS pour adapter Bootstrap à votre identité visuelle.
Théorie
Pourquoi personnaliser ?
Bootstrap par défaut :
- Design générique
- Couleurs standards
- Espacements standards
Personnalisation :
- ✅ Identité visuelle unique
- ✅ Cohérence avec la marque
- ✅ Design sur mesure
Méthodes de personnalisation
1. Variables SCSS (recommandé)
Avantage : Modifie Bootstrap à la source, CSS optimisé.
Processus :
- Définir vos variables
- Importer Bootstrap
- Bootstrap utilise vos variables
Exemple :
// _custom-variables.scss
$primary: #custom-blue;
$secondary: #custom-gray;
$border-radius: 0.5rem;
// main.scss
@import "custom-variables";
@import "~bootstrap/scss/bootstrap";
Variables principales :
// Couleurs
$primary: #007bff;
$secondary: #6c757d;
$success: #28a745;
$danger: #dc3545;
$warning: #ffc107;
$info: #17a2b8;
$light: #f8f9fa;
$dark: #343a40;
// Typographie
$font-family-sans-serif: 'Roboto', sans-serif;
$font-size-base: 1rem;
$line-height-base: 1.6;
// Espacements
$spacer: 1rem;
$spacers: (
0: 0,
1: $spacer * 0.25,
2: $spacer * 0.5,
3: $spacer,
4: $spacer * 1.5,
5: $spacer * 3
);
// Border radius
$border-radius: 0.25rem;
$border-radius-sm: 0.2rem;
$border-radius-lg: 0.3rem;
// Breakpoints
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px
);
2. Override CSS
Avantage : Rapide, pas besoin de recompiler.
Inconvénient : Spécificité élevée nécessaire.
Méthode :
/* Après Bootstrap */
.btn-primary {
background-color: #custom-color;
border-color: #custom-color;
}
Avec spécificité :
.btn.btn-primary {
background-color: #custom-color;
}
Avec !important (à éviter) :
.btn-primary {
background-color: #custom-color !important;
}
3. Custom build
Processus :
- Importer seulement les parties nécessaires
- Personnaliser les variables
- Compiler un CSS personnalisé
Exemple :
// Imports sélectifs
@import "bootstrap/functions";
@import "bootstrap/variables";
// Personnalisation
$primary: #custom-color;
@import "bootstrap/mixins";
@import "bootstrap/grid";
@import "bootstrap/buttons";
// ... seulement ce dont vous avez besoin
Personnalisation complète
Structure recommandée :
scss/
├── _custom-variables.scss
├── _custom-overrides.scss
└── main.scss
main.scss :
// 1. Variables personnalisées
@import "custom-variables";
// 2. Bootstrap (utilise vos variables)
@import "~bootstrap/scss/bootstrap";
// 3. Overrides additionnels si nécessaire
@import "custom-overrides";
Variables à personnaliser
Couleurs
$primary: #007bff;
$secondary: #6c757d;
$success: #28a745;
$danger: #dc3545;
$warning: #ffc107;
$info: #17a2b8;
$light: #f8f9fa;
$dark: #343a40;
Créer vos propres couleurs :
$custom-colors: (
"brand": #ff6b6b,
"accent": #4ecdc4
);
$theme-colors: map-merge($theme-colors, $custom-colors);
Typographie
$font-family-sans-serif: 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif;
$font-family-serif: Georgia, "Times New Roman", serif;
$font-family-monospace: 'Courier New', monospace;
$font-size-base: 1rem;
$font-size-sm: $font-size-base * 0.875;
$font-size-lg: $font-size-base * 1.25;
$h1-font-size: $font-size-base * 2.5;
$h2-font-size: $font-size-base * 2;
$h3-font-size: $font-size-base * 1.75;
Espacements
$spacer: 1rem;
$spacers: (
0: 0,
1: $spacer * 0.25,
2: $spacer * 0.5,
3: $spacer,
4: $spacer * 1.5,
5: $spacer * 3,
6: $spacer * 4,
7: $spacer * 5
);
Border radius
$border-radius: 0.5rem;
$border-radius-sm: 0.25rem;
$border-radius-lg: 1rem;
$border-radius-pill: 50rem;
Breakpoints
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px
);
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px,
xxl: 1320px
);
Thème personnalisé
Créer un thème complet :
// _theme.scss
$primary: #6366f1;
$secondary: #8b5cf6;
$success: #10b981;
$danger: #ef4444;
$warning: #f59e0b;
$info: #3b82f6;
$body-bg: #ffffff;
$body-color: #1f2937;
$border-radius: 0.5rem;
$box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
// Import Bootstrap
@import "~bootstrap/scss/bootstrap";
Override sélectif
Quand override est nécessaire :
- Modifications très spécifiques
- Pas de variable disponible
- Quick fixes
Méthode propre :
// Après import Bootstrap
.btn-custom {
@extend .btn-primary;
background-color: #custom-color;
border-color: #custom-color;
&:hover {
background-color: darken(#custom-color, 10%);
}
}
Exercices guidés
Exercice 1 : Variables de base
Personnalisez :
- Couleurs principales
- Typographie
- Espacements
- Compilez et testez
Exercice 2 : Thème complet
Créez un thème :
- Palette de couleurs cohérente
- Typographie personnalisée
- Border radius uniforme
- Testez sur tous les composants
Exercice 3 : Custom build
Créez un build personnalisé :
- Imports sélectifs
- Variables personnalisées
- Comparez la taille du CSS
Exercice 4 : Override CSS
Testez l'override :
- Modifiez un composant spécifique
- Utilisez la bonne spécificité
- Évitez !important
Exercice 5 : Thème dark
Créez un thème dark :
- Variables pour dark mode
- Media query prefers-color-scheme
- Toggle manuel (optionnel)
❌ Erreurs fréquentes
Erreur 1 : Variables après import
❌ Mauvais :
@import "bootstrap";
$primary: #custom; // Trop tard
✅ Bon :
$primary: #custom; // Avant
@import "bootstrap";
Pourquoi : Variables doivent être définies avant l'import.
Erreur 2 : Override avec spécificité insuffisante
❌ Mauvais :
.btn-primary {
background-color: #custom; // Spécificité trop faible
}
✅ Bon :
.btn.btn-primary {
background-color: #custom; // Spécificité plus élevée
}
Pourquoi : Bootstrap a une spécificité élevée.
Erreur 3 : !important partout
❌ Mauvais :
.btn-primary {
background-color: #custom !important;
}
✅ Bon :
// Utiliser variables SCSS ou spécificité
Pourquoi : !important = difficile à maintenir.
Erreur 4 : Modifier Bootstrap directement
❌ Mauvais :
// Modifier node_modules/bootstrap/...
✅ Bon :
// Créer _custom-variables.scss
// Importer avant Bootstrap
Pourquoi : Modifications perdues à la mise à jour.
Erreur 5 : Pas de cohérence
❌ Mauvais :
$primary: blue;
$secondary: red; // Pas cohérent
✅ Bon :
// Palette cohérente
$primary: #007bff;
$secondary: #6c757d; // Dérivé de primary
Pourquoi : Cohérence = design professionnel.
🚀 Mini-projet
Mission : Créer un thème Bootstrap personnalisé
Créez un thème complet :
Personnalisation :
- Palette de couleurs cohérente
- Typographie personnalisée (Google Fonts)
- Espacements adaptés
- Border radius uniforme
- Thème dark (optionnel)
Structure :
_custom-variables.scssmain.scssavec imports- Compilation fonctionnelle
Critères :
- ✅ Variables bien organisées
- ✅ Thème cohérent
- ✅ Tous les composants personnalisés
- ✅ Compilation sans erreurs
- ✅ Design unique
Objectif : Maîtriser la personnalisation Bootstrap pour créer un design unique.
Validation : Vous pouvez passer au module suivant quand vous maîtrisez la personnalisation Bootstrap et avez créé un thème personnalisé fonctionnel.