Aller au contenu

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

  1. Cohérence visuelle - Même look partout sur le site
  2. Productivité - Codez une fois, utilisez partout
  3. Maintenabilité - Un seul endroit à modifier
  4. Scalabilité - Facile d'ajouter de nouvelles sections
  5. 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 :

  1. Navbar (navigation principale)
  2. Breadcrumb (fil d'Ariane)
  3. Media Object (image + texte)
  4. Hero Section (section d'accueil)
  5. Pricing Cards (grille de prix)

Bonnes pratiques :

  • Nomenclature cohérente (BEM)
  • Variables CSS pour la cohérence
  • Documentation