4.3 — Cartes (cards)
⏱️ TL;DR — La carte (
.card) est le conteneur le plus polyvalent : un cadre aveccard-header,card-body(card-title,card-text),card-footer, unecard-img-top, descard-link. On les combine en grille ou encard-grouppour des mises en page cohérentes.
🎯 Objectifs
- Structurer une carte complète.
- Ajouter image, en-tête, pied, liste et liens.
- Aligner des cartes de hauteur égale.
Anatomie
<div class="card" style="width: 18rem;">
<img src="photo.jpg" class="card-img-top" alt="…">
<div class="card-body">
<h5 class="card-title">Titre</h5>
<h6 class="card-subtitle mb-2 text-body-secondary">Sous-titre</h6>
<p class="card-text">Un paragraphe de description.</p>
<a href="#" class="card-link">Lien 1</a>
<a href="#" class="card-link">Lien 2</a>
</div>
</div>En-tête et pied
<div class="card">
<div class="card-header">En-tête</div>
<div class="card-body">Contenu</div>
<div class="card-footer text-body-secondary">Pied</div>
</div>Carte + list group
<div class="card" style="width:18rem">
<div class="card-header">Fonctionnalités</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">Rapide</li>
<li class="list-group-item">Sécurisé</li>
</ul>
</div>Cartes en grille (hauteur égale)
Combinez avec la grille et h-100 pour égaliser les hauteurs :
<div class="row row-cols-1 row-cols-md-3 g-4">
<div class="col">
<div class="card h-100">…</div>
</div>
<!-- répéter -->
</div>h-100 sur .card fait que toutes les cartes d’une même rangée ont la même hauteur.
Habillage : couleurs, bordures
<div class="card text-bg-primary">…</div> <!-- fond coloré -->
<div class="card border-success">…</div> <!-- bordure colorée -->Image de fond (overlay)
<div class="card text-bg-dark">
<img src="fond.jpg" class="card-img" alt="…">
<div class="card-img-overlay">
<h5 class="card-title">Texte par-dessus</h5>
</div>
</div>⚠️ Piège — Sans
h-100, deux cartes côte à côte avec des contenus de longueurs différentes ont des hauteurs différentes, ce qui casse l’alignement.h-100(sur la carte, pas la colonne) résout ça avec la grille.
💡 Pour un dev React — La carte est le candidat parfait pour un composant React réutilisable
<ProductCard>: vous mappez vos données et sortez le markup.cardavec les bonnes classes. C’est un cas où Bootstrap et la composition React s’entendent très bien.
✏️ Exercices
- Une grille de 3 cartes produit, hauteur égale, responsive (1/2/3 colonnes).
✅ Solution
<div class="row row-cols-1 row-cols-sm-2 row-cols-lg-3 g-4">
<div class="col"><div class="card h-100">…</div></div>
<!-- ×3 -->
</div>- Une carte avec image en haut, titre, texte et un bouton d’action.
✅ Solution
<div class="card">
<img src="a.jpg" class="card-img-top" alt="…">
<div class="card-body">
<h5 class="card-title">Titre</h5>
<p class="card-text">Texte.</p>
<a href="#" class="btn btn-primary">Action</a>
</div>
</div>🧠 Quiz de révision
1. Quel élément contient titre et texte d’une carte ?
.card-body.
2. Comment mettre une image en haut d’une carte ?
.card-img-top.
3. Comment égaliser la hauteur de cartes en grille ?
h-100 sur .card.
4. Quelle classe pour un texte par-dessus l’image ?
.card-img-overlay.
5. Comment coller une list group sans bordures dans une carte ?
list-group list-group-flush.
Chapitre suivant : 4.4 — List group