Composants réutilisables¶
📟 Qu'est-ce qu'un composant réutilisable?¶
Un composant réutilisable est un bloc de code HTML + CSS qui :
- Peut être utilisé plusieurs fois dans un projet
- A un style cohérent et prévisible
- Est facile à maintenir (changer une fois = change partout)
- S'adapte à différents contextes et contenus
Pensez-y comme des LEGO : Vous créez des pièces standardisées que vous pouvez assembler de différentes façons.
Exemples concrets de composants¶
📟 Pourquoi créer des composants réutilisables?¶
Avantages d'utiliser des composants réutilisables¶
- Cohérence visuelle - Même look partout sur le site
- Productivité - Codez une fois, utilisez partout
- Maintenabilité - Un seul endroit à modifier
- Scalabilité - Facile d'ajouter de nouvelles sections
- Travail d'équipe - Tout le monde utilise les mêmes composants
SANS composants réutilisables¶
❌
/* Code dupliqué partout 😱 */
.carte-produit {
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.carte-article {
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.carte-utilisateur {
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
Problème : Si vous voulez changer le border-radius, vous devez modifier 3 endroits !
AVEC composants réutilisables¶
✅
/* Une seule définition 🎉 */
.carte {
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
/* Variations spécifiques si nécessaire */
.carte--produit { /* styles spécifiques */ }
.carte--article { /* styles spécifiques */ }
📟 Catégories de composants courantes et quelques exemples par type¶
1. Composants de navigation¶
- Barre de navigation (navbar)
- Menu déroulant (dropdown)
- Barre latérale (sidebar)
- Fil d'Ariane (breadcrumb)
- Pagination
- Menu de pied de page (footer)
2. Composants de contenu¶
- Cartes (cards)
- Listes de médias (media objects)
- Sections hero
- Article de blogue
- Titre de section (si plus que juste un
<h2>) - Grilles de galeries
- Tableau de données
- Bannière d'annonce (jumbotron)
- Graphiques de statistiques (stat cards)
- Carrousels (sliders)
- Liste de logos (logo grid ou logo cloud)
3. Composants d'interface¶
- Boutons
- Case à cocher
- Formulaires
- Boîte de dialogue (modales)
- Notifications/Alerts
- Badges
- Onglets
- Accordéons
- Barre de progression (progress bars)
- Infobulles (tooltips)
- Panier d'achat (cart)
4. Composants de mise en page¶
- Conteneurs
- Grilles de rangées et colonnes
- Espacements (spacers)
📟 Principes de conception de composants¶
1. Un composant = Une responsabilité¶
❌ Mauvais :
.carte-produit-avec-bouton-et-image-et-prix {
/* Trop spécifique, pas réutilisable */
}
✅ Bon :
.carte { /* Conteneur de base */ }
.carte__image { /* Image dans la carte */ }
.carte__titre { /* Titre dans la carte */ }
.carte__prix { /* Prix dans la carte */ }
.bouton { /* Bouton réutilisable partout */ }
2. Composants flexibles (pas rigides)¶
❌ Mauvais :
.carte {
width: 300px; /* Taille fixe = pas flexible */
height: 400px;
}
✅ Bon :
.carte {
width: 100%; /* S'adapte à son conteneur */
max-width: 400px; /* Limite raisonnable */
}
3. Variantes avec modificateurs¶
Structure BEM (Block Element Modifier) :
/* Block - Composant de base */
.carte { }
/* Element - Partie du composant */
.carte__titre { }
.carte__image { }
/* Modifier - Variante du composant */
.carte--large { }
.carte--sombre { }
Exemple concret :
<!-- Carte normale -->
<div class="carte">
<h3 class="carte__titre">Titre</h3>
</div>
<!-- Carte large -->
<div class="carte carte--large">
<h3 class="carte__titre">Titre</h3>
</div>
📟 Exemples de composants réutilisables avec Flexbox¶
Barre de navigation (Navbar)¶
See the Pen DEMO Composant: NavBar by TIM Montmorency (@tim-momo) on CodePen.
Pourquoi c'est réutilisable :
- Fonctionne avec n'importe quel nombre de liens
- S'adapte au contenu (logo peut être texte ou image)
- Facile d'ajouter des boutons dans
navbar__actions
Fil d'Ariane (Breadcrumb)¶
See the Pen DEMO composant - Fil d'Ariane by TIM Montmorency (@tim-momo) on CodePen.
Pourquoi c'est réutilisable :
- Fonctionne avec n'importe quel nombre de niveaux
- Séparateur facilement modifiable (/, >, →)
- Facile à styler différemment selon le contexte
Liste de médias (Media Object)¶
See the Pen DEMO composant - Liste de médias (Media Object) by TIM Montmorency (@tim-momo) on CodePen.
Pourquoi c'est réutilisable :
- Fonctionne pour avatars, produits, notifications
- Image peut être n'importe quelle taille
- Contenu s'adapte automatiquement
Section Hero¶
See the Pen DEMO composant - section hero by TIM Montmorency (@tim-momo) on CodePen.
Pourquoi c'est réutilisable :
- Fonctionne avec ou sans image
- Texte et boutons s'adaptent
- Facile de créer des variantes (reverse, centré, etc.)
Composant 5 : Grille de prix (pricing cards)¶
See the Pen DEMO composant - Pricing cards (grille de prix) by TIM Montmorency (@tim-momo) on CodePen.
Pourquoi c'est réutilisable :
- Fonctionne avec n'importe quel nombre de cartes
- S'adapte à différentes quantités de features
- Bouton toujours en bas (grâce à
flex: 1+margin-top: auto)
📟 Bonnes pratiques pour les composants réutilisables¶
1. Nomenclature cohérente (BEM recommandé)¶
.block { } /* Composant de base */
.block__element { } /* Partie du composant */
.block--modifier { } /* Variante du composant */
2. Évitez les styles trop spécifiques¶
❌ Mauvais :
.page .section .container .card .title {
/* Trop spécifique, difficile à réutiliser */
}
✅ Bon :
.card__title {
/* Simple, réutilisable */
}
3. Utilisez des variables CSS pour la cohérence¶
:root {
--card-padding: 1.5rem;
--card-radius: 8px;
--card-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.card {
padding: var(--card-padding);
border-radius: var(--card-radius);
box-shadow: var(--card-shadow);
}
4. Documentez vos composants¶
/**
* Navbar - Barre de navigation principale
*
* Utilisation :
* <nav class="navbar">
* <div class="navbar__logo">...</div>
* <ul class="navbar__menu">...</ul>
* </nav>
*
* Variantes :
* .navbar--dark : Version sombre
* .navbar--fixed : Position fixe en haut
*/
.navbar { }
📟 Résumé¶
Composants réutilisables :
- Code une fois, utilise partout
- Facilite la maintenance
- Crée une cohérence visuelle
- Flexbox est parfait pour les créer
Types de composants vus :
- Navbar (navigation principale)
- Breadcrumb (fil d'Ariane)
- Media Object (image + texte)
- Hero Section (section d'accueil)
- Pricing Cards (grille de prix)
Bonnes pratiques :
- Nomenclature cohérente (BEM)
- Variables CSS pour la cohérence
- Documentation