Aller au contenu principal

Module Bootstrap.4 – Composants

Objectif

Maîtriser les composants Bootstrap essentiels : buttons, forms, cards, navbar, modals pour créer des interfaces complètes rapidement.

Théorie

Buttons

Bouton de base :

<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-dark">Dark</button>

Tailles :

<button class="btn btn-primary btn-sm">Small</button>
<button class="btn btn-primary">Normal</button>
<button class="btn btn-primary btn-lg">Large</button>

Outlines :

<button class="btn btn-outline-primary">Outline Primary</button>
<button class="btn btn-outline-secondary">Outline Secondary</button>

États :

<button class="btn btn-primary active">Active</button>
<button class="btn btn-primary" disabled>Disabled</button>

Groupes de boutons :

<div class="btn-group" role="group">
<button type="button" class="btn btn-primary">Left</button>
<button type="button" class="btn btn-primary">Middle</button>
<button type="button" class="btn btn-primary">Right</button>
</div>

Forms

Input de base :

<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email">
</div>

Textarea :

<div class="mb-3">
<label for="message" class="form-label">Message</label>
<textarea class="form-control" id="message" rows="3"></textarea>
</div>

Select :

<div class="mb-3">
<label for="select" class="form-label">Select</label>
<select class="form-select" id="select">
<option>Option 1</option>
<option>Option 2</option>
</select>
</div>

Checkboxes :

<div class="form-check">
<input class="form-check-input" type="checkbox" id="check1">
<label class="form-check-label" for="check1">
Checkbox label
</label>
</div>

Radio buttons :

<div class="form-check">
<input class="form-check-input" type="radio" name="radio" id="radio1">
<label class="form-check-label" for="radio1">
Radio 1
</label>
</div>

Switch :

<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="switch1">
<label class="form-check-label" for="switch1">Switch</label>
</div>

Validation :

<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control is-invalid" id="email">
<div class="invalid-feedback">
Email invalide
</div>
</div>

<div class="mb-3">
<label for="name" class="form-label">Nom</label>
<input type="text" class="form-control is-valid" id="name">
<div class="valid-feedback">
Parfait !
</div>
</div>

Input groups :

<div class="input-group mb-3">
<span class="input-group-text">@</span>
<input type="text" class="form-control" placeholder="Username">
</div>

<div class="input-group mb-3">
<input type="text" class="form-control">
<button class="btn btn-outline-secondary" type="button">Button</button>
</div>

Cards

Card de base :

<div class="card">
<div class="card-body">
<h5 class="card-title">Titre</h5>
<p class="card-text">Contenu de la carte</p>
<a href="#" class="btn btn-primary">Action</a>
</div>
</div>

Card avec image :

<div class="card">
<img src="image.jpg" class="card-img-top" alt="...">
<div class="card-body">
<h5 class="card-title">Titre</h5>
<p class="card-text">Contenu</p>
</div>
</div>

Card avec header/footer :

<div class="card">
<div class="card-header">Header</div>
<div class="card-body">Contenu</div>
<div class="card-footer">Footer</div>
</div>

Card groups :

<div class="card-group">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
</div>

Navbar de base :

<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Brand</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" href="#">Accueil</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">À propos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Contact</a>
</li>
</ul>
</div>
</div>
</nav>

Navbar avec dropdown :

<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown">
Dropdown
</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action 1</a></li>
<li><a class="dropdown-item" href="#">Action 2</a></li>
</ul>
</li>

Couleurs :

<nav class="navbar navbar-dark bg-dark">
<nav class="navbar navbar-light bg-light">
<nav class="navbar navbar-dark bg-primary">

Modals

Modal de base :

<!-- Button trigger -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
Ouvrir modal
</button>

<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Titre</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Contenu du modal</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Fermer</button>
<button type="button" class="btn btn-primary">Sauvegarder</button>
</div>
</div>
</div>
</div>

Tailles :

<div class="modal-dialog modal-sm">Petit</div>
<div class="modal-dialog">Normal</div>
<div class="modal-dialog modal-lg">Grand</div>
<div class="modal-dialog modal-xl">Très grand</div>

Autres composants

Alerts :

<div class="alert alert-primary">Alert primary</div>
<div class="alert alert-success">Alert success</div>
<div class="alert alert-danger">Alert danger</div>

Badges :

<span class="badge bg-primary">Primary</span>
<span class="badge bg-secondary">Secondary</span>

Breadcrumbs :

<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Accueil</a></li>
<li class="breadcrumb-item"><a href="#">Section</a></li>
<li class="breadcrumb-item active">Page actuelle</li>
</ol>
</nav>

Exercices guidés

Exercice 1 : Buttons

Créez des boutons :

  • Toutes les variantes (primary, secondary, etc.)
  • Toutes les tailles
  • Groupes de boutons

Exercice 2 : Forms

Créez un formulaire complet :

  • Inputs, textarea, select
  • Checkboxes et radios
  • Validation (valid/invalid)
  • Input groups

Exercice 3 : Cards

Créez des cards :

  • Card simple
  • Card avec image
  • Card avec header/footer
  • Groupe de cards

Exercice 4 : Navbar

Créez une navbar :

  • Responsive (hamburger)
  • Dropdown
  • Différentes couleurs
  • Fonctionnelle

Exercice 5 : Modal

Créez un modal :

  • Trigger button
  • Modal complet
  • Tailles variées
  • Testez l'ouverture/fermeture

❌ Erreurs fréquentes

Erreur 1 : Oublier data-bs-* pour JavaScript

❌ Mauvais :

<button class="btn" data-toggle="modal">Ne fonctionne pas (Bootstrap 4)</button>

✅ Bon :

<button class="btn" data-bs-toggle="modal" data-bs-target="#modal">Bootstrap 5</button>

Pourquoi : Bootstrap 5 utilise data-bs-* (pas data-*).

Erreur 2 : Oublier le JavaScript

❌ Mauvais :

<!-- Modal sans JS = ne s'ouvre pas -->

✅ Bon :

<script src="bootstrap.bundle.min.js"></script>

Pourquoi : Composants interactifs nécessitent JS.

Erreur 3 : Structure incorrecte pour cards

❌ Mauvais :

<div class="card-body">
<div class="card">Titre</div>
</div>

✅ Bon :

<div class="card">
<div class="card-body">Titre</div>
</div>

Pourquoi : Structure HTML correcte nécessaire.

Erreur 4 : Navbar sans container

❌ Mauvais :

<nav class="navbar">
<a class="navbar-brand">Brand</a>
</nav>

✅ Bon :

<nav class="navbar">
<div class="container-fluid">
<a class="navbar-brand">Brand</a>
</div>
</nav>

Pourquoi : Container = structure correcte.

Erreur 5 : Form sans labels

❌ Mauvais :

<input type="email" class="form-control">

✅ Bon :

<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email">

Pourquoi : Accessibilité et UX.

🚀 Mini-projet

Mission : Créer une page avec tous les composants

Créez une page complète avec :

Composants :

  • Navbar responsive
  • Hero section
  • Cards en grille
  • Formulaire de contact
  • Modal pour actions
  • Buttons variés
  • Alerts

Fonctionnalités :

  • Navigation fonctionnelle
  • Modal qui s'ouvre/ferme
  • Formulaire avec validation
  • Responsive complet

Critères :

  • ✅ Tous les composants utilisés
  • ✅ JavaScript fonctionnel
  • ✅ Responsive
  • ✅ Accessibilité
  • ✅ Page professionnelle

Objectif : Maîtriser tous les composants Bootstrap essentiels pour créer des interfaces complètes.


Validation : Vous pouvez passer au module suivant quand vous maîtrisez les composants Bootstrap et créez des interfaces complètes.