7.3 — Display, flex & position
⏱️ TL;DR —
d-*contrôledisplay(d-none,d-block,d-flex,d-inline,d-grid…) et est responsive (d-none d-md-block= caché sur mobile). Les utilitaires flex (vus en 2.5) et de position (position-*,top-0…) complètent la panoplie.d-print-*cible l’impression.
🎯 Objectifs
- Afficher/masquer selon le breakpoint.
- Passer un conteneur en flex ou grid.
- Gérer l’affichage à l’impression.
Display
<div class="d-none">jamais affiché</div>
<div class="d-block">block</div>
<div class="d-inline">inline</div>
<div class="d-flex">flex</div>
<div class="d-grid">grid</div>Valeurs : none, inline, inline-block, block, grid, inline-grid, table, flex, inline-flex.
Responsive : montrer/masquer
<!-- visible seulement à partir de md -->
<div class="d-none d-md-block">Desktop only</div>
<!-- visible seulement en dessous de md -->
<div class="d-block d-md-none">Mobile only</div>Le motif « caché puis affiché » est la base du responsive : on empile deux classes d-* à des breakpoints différents.
Boutons en pile (d-grid)
<div class="d-grid gap-2">
<button class="btn btn-primary">Bloc 1</button>
<button class="btn btn-primary">Bloc 2</button>
</div>
<!-- pleine largeur sur mobile, auto dès md -->
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
<button class="btn btn-primary">Action</button>
</div>d-grid transforme des boutons en blocs pleine largeur empilés — plus propre que w-100 répété.
Impression
<div class="d-print-none">Masqué à l'impression</div>
<div class="d-none d-print-block">Visible seulement à l'impression</div>Overflow, visibility
<div class="overflow-auto" style="height:100px">défile</div>
<div class="overflow-hidden">rogné</div>
<div class="invisible">occupe l'espace mais invisible</div>
<div class="visible">visible</div>⚠️ Piège —
d-noneretire l’élément du flux (commedisplay:none) : il n’est plus lu par les lecteurs d’écran. Pour masquer visuellement mais garder accessible, utilisezvisually-hidden. Pour occuper l’espace sans afficher,invisible.
💡 Pour un dev React — En React, on conditionne souvent le rendu (
{isMobile && …}), maisd-none d-md-blockévite un re-render au resize et fonctionne côté serveur (SSR) sans JS. Pour du responsive purement visuel, préférez les classesd-*aux media queries JS.
✏️ Exercices
- Afficher un lien « Menu » uniquement sur mobile.
✅ Solution
<a class="d-block d-lg-none">Menu</a> (visible en dessous de lg).
- Deux boutons empilés pleine largeur sur mobile, côte à côte à droite dès md.
✅ Solution
<div class="d-grid gap-2 d-md-flex justify-content-md-end">…</div>.
🧠 Quiz de révision
1. Que fait d-none d-md-block ?
d-none d-md-block ?Caché en dessous de md, affiché (block) à partir de md.
2. Quelle classe pour masquer un élément à l’impression ?
d-print-none.
3. Différence entre d-none et invisible ?
d-none et invisible ?d-none retire du flux ; invisible garde l’espace mais rend transparent.
4. Comment empiler des boutons pleine largeur proprement ?
d-grid gap-2.
5. Comment masquer visuellement en gardant l’accès aux lecteurs d’écran ?
visually-hidden.
Chapitre suivant : 7.4 — Bordures, ombres & divers