BaliseTonSite

Layout & Flexbox

Organise ta page comme un pro.

3.1Display

HTMLhtml
<div class="block">       <!-- Display: block (défaut pour div) -->
<span class="inline">     <!-- Display: inline -->
<div class="inline-block"> <!-- Display: inline-block -->
<div class="flex">         <!-- Display: flex 🌟 -->
<div class="grid">         <!-- Display: grid 🌟 -->
<div class="hidden">       <!-- Display: none (caché) -->
<div class="inline-flex">  <!-- Display: inline-flex -->

3.2Flexbox - la base

flex est probablement la classe la plus utilisée en Tailwind :

HTMLhtml
<!-- Direction -->
<div class="flex">             <!-- Ligne (défaut) -->
<div class="flex flex-col">    <!-- Colonne -->
<div class="flex flex-row-reverse">  <!-- Ligne inversée -->

<!-- Alignement horizontal (justify) -->
<div class="flex justify-start">     <!-- À gauche -->
<div class="flex justify-center">    <!-- Centré -->
<div class="flex justify-end">       <!-- À droite -->
<div class="flex justify-between">   <!-- Espacé entre -->
<div class="flex justify-around">    <!-- Espacé autour -->

<!-- Alignement vertical (items) -->
<div class="flex items-start">       <!-- En haut -->
<div class="flex items-center">      <!-- Centré verticalement -->
<div class="flex items-end">         <!-- En bas -->
<div class="flex items-stretch">     <!-- Étiré (défaut) -->

<!-- Le combo magique : centrer horizontalement ET verticalement -->
<div class="flex items-center justify-center">
  <p>Je suis parfaitement centré !</p>
</div>

3.3Gap (espacement entre éléments)

HTMLhtml
<!-- Gap uniforme -->
<div class="flex gap-4">        <!-- 16px entre chaque enfant -->

<!-- Gap horizontal et vertical séparés -->
<div class="flex gap-x-4 gap-y-2">

<!-- Exemple concret : barre de navigation -->
<nav class="flex items-center gap-6">
  <a href="/">Accueil</a>
  <a href="/cours">Cours</a>
  <a href="/blog">Blog</a>
  <a href="/contact">Contact</a>
</nav>

<!-- Avant gap, on faisait ça (horrible) :
  <a class="mr-6">Accueil</a>
  <a class="mr-6">Cours</a>
  ...le dernier n'a pas besoin de mr-6... galère !
-->

3.4Flex grow, shrink et basis

HTMLhtml
<!-- flex-1 : prend tout l'espace disponible -->
<div class="flex gap-4">
  <aside class="w-64">Sidebar fixe (256px)</aside>
  <main class="flex-1">Contenu qui prend le reste</main>
</div>

<!-- flex-none : ne rétrécit jamais -->
<div class="flex gap-4">
  <img class="flex-none w-16 h-16" src="avatar.jpg" />
  <div class="flex-1">
    <h3>Nom Utilisateur</h3>
    <p>Description qui peut être longue...</p>
  </div>
</div>

<!-- flex-shrink-0 : empêche le rétrécissement -->
<div class="flex">
  <div class="shrink-0 w-20">Ne rétrécit pas</div>
  <div class="flex-1 min-w-0 truncate">
    Texte très long qui sera tronqué...
  </div>
</div>

3.5CSS Grid

HTMLhtml
<!-- Grille basique -->
<div class="grid grid-cols-3 gap-4">
  <div>Colonne 1</div>
  <div>Colonne 2</div>
  <div>Colonne 3</div>
</div>

<!-- Colonnes de tailles différentes -->
<div class="grid grid-cols-4 gap-4">
  <aside class="col-span-1">Sidebar</aside>
  <main class="col-span-3">Contenu principal</main>
</div>

<!-- Grille auto-responsive (sans media queries !) -->
<div class="grid grid-cols-[repeat(auto-fill,minmax(250px,1fr))] gap-6">
  <div>Carte 1</div>
  <div>Carte 2</div>
  <div>Carte 3</div>
  <div>Carte 4</div>
  <!-- S'adapte automatiquement : 4 colonnes → 2 → 1 -->
</div>

<!-- Lignes -->
<div class="grid grid-rows-3 gap-4 h-screen">
  <header>Header</header>
  <main class="row-span-1">Contenu</main>
  <footer>Footer</footer>
</div>

3.6Positionnement

HTMLhtml
<!-- Position -->
<div class="relative">     <!-- position: relative -->
<div class="absolute">     <!-- position: absolute -->
<div class="fixed">        <!-- position: fixed -->
<div class="sticky top-0"> <!-- position: sticky; top: 0 -->

<!-- Placement (avec absolute/fixed) -->
<div class="absolute top-0 right-0">     En haut à droite
<div class="absolute bottom-4 left-4">   En bas à gauche + offset
<div class="absolute inset-0">           Couvre tout le parent
<div class="absolute inset-x-0 bottom-0"> Barre en bas

<!-- Exemple : Badge sur un avatar -->
<div class="relative inline-block">
  <img class="size-12 rounded-full" src="avatar.jpg" />
  <span class="absolute -top-1 -right-1 size-4 bg-green-500
               rounded-full border-2 border-white">
  </span>
</div>

<!-- z-index -->
<div class="z-10">  <!-- z-index: 10 -->
<div class="z-50">  <!-- z-index: 50 -->

3.7Layout complet : page type

HTMLhtml
<!-- Layout classique Header/Content/Footer -->
<div class="min-h-screen flex flex-col">
  <!-- Header sticky -->
  <header class="sticky top-0 z-50 bg-white/80 backdrop-blur-sm
                 border-b border-slate-200">
    <nav class="max-w-6xl mx-auto px-4 py-3 flex items-center justify-between">
      <a class="text-xl font-bold">MonSite</a>
      <div class="flex items-center gap-6">
        <a>Cours</a>
        <a>Blog</a>
        <button class="bg-sky-500 text-white px-4 py-2 rounded-lg">
          S'inscrire
        </button>
      </div>
    </nav>
  </header>

  <!-- Contenu avec sidebar -->
  <div class="flex-1 max-w-6xl mx-auto w-full px-4 py-8">
    <div class="flex gap-8">
      <aside class="hidden lg:block w-64 shrink-0">
        Sidebar (cachée sur mobile)
      </aside>
      <main class="flex-1 min-w-0">
        Contenu principal
      </main>
    </div>
  </div>

  <!-- Footer -->
  <footer class="bg-slate-900 text-slate-400 py-8">
    <div class="max-w-6xl mx-auto px-4 text-center">
      © 2026 MonSite
    </div>
  </footer>
</div>

Verifie tes acquis

3 questions pour valider ce chapitre

1. Quelle combinaison de classes centre un element horizontalement ET verticalement avec Flexbox ?

Valide et sauvegarde ce chapitre

Ne perds pas le fil de ton apprentissage. Chaque QCM terminé sauvegarde ton score. Crée ton profil gratuitement pour débloquer toutes les évaluations du site et retrouver tes résultats plus tard.

Commencer l'aventure
Déjà membre ?Connecte-toi