Apprenez les fondamentaux du Responsive Web Design étape par étape
Explorez les modules essentiels pour maîtriser le responsive
Le Responsive Web Design (RWD) est une approche de conception web qui vise à offrir une expérience utilisateur optimale sur tous les appareils, des écrans de bureau aux smartphones.
Avant 2010, les sites web étaient conçus pour des écrans de taille fixe (généralement 1024×768 px). Avec l'explosion des smartphones et tablettes, les développeurs ont dû adapter leurs approches. En 2010, Ethan Marcotte a inventé le terme "Responsive Web Design" dans un article célèbre d'A List Apart, proposant une nouvelle approche utilisant les media queries CSS3.
Redimensionnez la fenêtre ou utilisez les boutons pour voir le layout s'adapter :
<div class="row">
<div class="col-12 col-md-12 col-lg-12">Header</div>
<div class="col-12 col-md-8 col-lg-9">Content</div>
<div class="col-12 col-md-4 col-lg-3">Sidebar</div>
<div class="col-12 col-md-12 col-lg-12">Footer</div>
</div>
Les layouts utilisent des pourcentages plutôt que des pixels fixes. Un conteneur de 100% s'adapte à toute taille d'écran, tandis que ses enfants peuvent occuper des proportions relatives (50%, 33%, etc.).
.container { width: 100%; max-width: 1200px; }Permettent d'appliquer des styles CSS conditionnels selon les caractéristiques de l'appareil (largeur, orientation, résolution). C'est le cœur technique du responsive design.
@media (min-width: 768px) { ... }Les images et vidéos doivent s'adapter à leur conteneur sans dépasser. La règle CSS max-width: 100%; height: auto; est essentielle pour cela.
img { max-width: 100%; height: auto; }| Approche | Philosophie | Requête média | Avantage |
|---|---|---|---|
| Mobile-first ⭐ | Commencer par le mobile, ajouter pour desktop | min-width (progressif) |
Performances, priorité au contenu essentiel |
| Desktop-first | Commencer par desktop, retirer pour mobile | max-width (régressif) |
Approche plus intuitive pour certains designers |
Recommandation : L'approche mobile-first est aujourd'hui la norme car elle force à prioriser le contenu essentiel et offre de meilleures performances sur les appareils mobiles (souvent avec connexion limitée).
Sans cette balise dans le <head>, le navigateur mobile va simuler un écran de bureau et réduire la page. La page ne sera PAS responsive !
<meta name="viewport" content="width=device-width, initial-scale=1">
Trafic web mobile mondial
Utilisateurs de smartphones
Créez une page HTML simple avec un titre centré et un paragraphe. La page doit s'adapter à tous les écrans en utilisant la balise meta viewport et des unités relatives.
Voir la solution → 🧠 Testez vos connaissances →Les grilles fluides sont la base de tout design responsive. Elles permettent de créer des layouts qui s'adaptent automatiquement à la taille de l'écran, des smartphones aux écrans 4K.
Le nombre 12 est mathématiquement pratique car divisible par 2, 3, 4 et 6. Cela permet de créer facilement des layouts variés :
| Breakpoint | Dimensions | Classe | Utilisation |
|---|---|---|---|
| XS (Extra Small) | < 576px | col-* |
Mobile portrait |
| SM (Small) | ≥ 576px | col-sm-* |
Mobile paysage |
| MD (Medium) | ≥ 768px | col-md-* |
Tablette |
| LG (Large) | ≥ 992px | col-lg-* |
Laptop |
| XL (Extra Large) | ≥ 1200px | col-xl-* |
Desktop |
| XXL | ≥ 1400px | col-xxl-* |
Écrans larges |
Bootstrap utilise l'approche mobile-first. Les classes sans suffixe (juste col-*) s'appliquent à tous les écrans, puis on surcharge avec des breakpoints plus larges :
<div class="row">
<!-- Mobile: 12 colonnes (100%) | Desktop: 6 colonnes (50%) -->
<div class="col-12 col-lg-6">...</div>
<!-- Mobile: 6 colonnes (50%) | Tablette: 4 colonnes (33%) -->
<div class="col-6 col-md-4">...</div>
</div>
Pourcentage du parent. Base des grilles fluides.
width: 50%;
Viewport width/height. 1vw = 1% de la largeur écran.
width: 100vw;
Relatif à la taille de police du parent.
padding: 2em;
Relatif à la taille de police racine (html).
font-size: 1.5rem;
Bootstrap fournit des classes utilitaires pour les espacements entre colonnes :
gx-* : Espacement horizontal (gutter-x)gy-* : Espacement vertical (gutter-y)g-* : Espacement des deux côtés<div class="row g-3">...</div>Usage : Alignement 1D (ligne OU colonne)
Usage : Layouts 2D (ligne ET colonne)
Créez une grille de 4 cards qui passe de 1 colonne (mobile) à 2 colonnes (tablette) puis 4 colonnes (desktop). Utilisez Bootstrap ou CSS Grid.
Voir la solution → 🧠 Testez vos connaissances →Les media queries sont le cœur technique du responsive design. Elles permettent d'appliquer des styles CSS conditionnels selon les caractéristiques de l'appareil, créant ainsi des expériences adaptées à chaque contexte.
/* Syntaxe de base */
@media (condition) {
/* styles à appliquer */
}
/* Exemples concrets */
@media (min-width: 768px) { /* Tablette et + */ }
@media (max-width: 767px) { /* Mobile uniquement */ }
@media (min-width: 768px) and (max-width: 991px) { /* Tablette uniquement */ }
Commencer par le mobile, ajouter pour les grands écrans.
@media (min-width: 768px) { ... }
Commencer par desktop, retirer pour mobile.
@media (max-width: 767px) { ... }
| Nom | Breakpoint | Devices ciblés | Usage Bootstrap |
|---|---|---|---|
| XS | < 576px | Mobiles portrait | col-* |
| SM | ≥ 576px | Mobiles paysage | col-sm-* |
| MD | ≥ 768px | Tablettes portrait | col-md-* |
| LG | ≥ 992px | Tablettes paysage / Laptops | col-lg-* |
| XL | ≥ 1200px | Desktops | col-xl-* |
| XXL | ≥ 1400px | Écrans larges | col-xxl-* |
@media (orientation: portrait) { ... }
Utile pour les tablettes et les vidéos plein écran.
@media (hover: hover) { /* desktop */ }@media (hover: none) { /* touch devices */ }
Différencier les appareils tactiles des desktop.
@media (prefers-color-scheme: dark) { ... }
Adapter le thème selon les préférences système de l'utilisateur.
@media (576px <= width <= 991px) { ... }
Nouvelle syntaxe CSS4 pour cibler une plage précise. Support moderne.
/* Base mobile (mobile-first) */
.card {
width: 100%;
margin-bottom: 1rem;
}
/* Tablette */
@media (min-width: 768px) {
.card {
width: 48%;
float: left;
margin-right: 4%;
}
.card:nth-child(2n) {
margin-right: 0;
}
}
/* Desktop */
@media (min-width: 992px) {
.card {
width: 32%;
margin-right: 2%;
}
.card:nth-child(2n) {
margin-right: 2%;
}
.card:nth-child(3n) {
margin-right: 0;
}
}
Créez une navbar responsive avec un menu hamburger sur mobile et les liens affichés sur desktop. Utilisez les breakpoints Bootstrap ou des media queries CSS.
Voir la solution → 🧠 Testez vos connaissances →Les images et médias représentent souvent plus de 60% du poids d'une page web. Leur optimisation responsive est cruciale pour les performances et l'expérience utilisateur sur mobile.
img {
max-width: 100%; /* L'image ne dépasse jamais son conteneur */
height: auto; /* Les proportions sont conservées */
display: block; /* Élimine l'espace sous l'image */
}
Pour éviter les décalages de layout (CLS - Cumulative Layout Shift), fixez les ratios d'aspect :
Vidéos, hero sections
aspect-ratio: 16/9;
Photos classiques
aspect-ratio: 4/3;
Avatars, logos
aspect-ratio: 1/1;
Servez différentes tailles d'images selon l'écran pour optimiser le chargement :
<img srcset="
photo-320.jpg 320w,
photo-768.jpg 768w,
photo-1200.jpg 1200w"
sizes="
(max-width: 600px) 100vw,
(max-width: 1000px) 50vw,
33vw"
src="photo-1200.jpg"
alt="Description">
| Format | Taille vs JPEG | Transparence | Support |
|---|---|---|---|
| WebP ⭐ | -25% à -35% | ✅ Oui | 95%+ (2024) |
| AVIF | -50% | ✅ Oui | 85% (croissant) |
| JPEG | Référence | ❌ Non | 100% |
| PNG | +50% à +200% | ✅ Oui | 100% |
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="Description">
</picture>
Chargez les images uniquement quand elles entrent dans la viewport :
loading="lazy"
Pour les images sous la ligne de flottaison. Améliore LCP et économise data.
loading="eager"
Pour les images hero/above-the-fold. Charge immédiatement.
<video controls preload="metadata" loading="lazy">
<source src="video.mp4" type="video/mp4">
</video>
Technique du ratio padding :
.video-container {
position: relative;
padding-bottom: 56.25%; /* 16:9 */
height: 0;
overflow: hidden;
}
.video-container iframe {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
}
Créez une galerie d'images responsive où les images s'adaptent sans déformation. Ajoutez le lazy loading et des ratios d'aspect fixes.
Voir la solution → 🧠 Testez vos connaissances →Bootstrap 5 est le framework CSS le plus populaire au monde, utilisé par plus de 20 millions de sites. Il permet de créer des interfaces responsive professionnelles en un temps record grâce à son système de grille robuste et ses composants prêts à l'emploi.
Prototypez en heures, pas en jours
Mobile-first par défaut
Design uniforme garanti
Sass variables faciles
<!-- CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- JS avec Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
npm install bootstrap@5.3.3
Puis importez dans votre Sass/JS.
<div class="container"> <!-- Conteneur centré avec max-width -->
<div class="row"> <!-- Ligne flexbox -->
<div class="col-md-6">...</div> <!-- Colonne 50% sur md+ -->
<div class="col-md-6">...</div> <!-- Colonne 50% sur md+ -->
</div>
</div>
navbar, navbar-expand-lg, navbar-dark
Responsive avec hamburger automatique
card, card-body, card-header, card-footer
Conteneur flexible avec header/body/footer
btn, btn-primary, btn-lg, btn-outline-*
8 variants de couleur, 3 tailles
form-control, form-label, input-group
Styles cohérents pour tous les inputs
Classes puissantes pour gérer les marges et paddings sans écrire de CSS :
{property}{sides}-{size}mt-3px-4mb-autop-0| Classe | Effet | Responsive |
|---|---|---|
d-none |
display: none | d-md-block, d-lg-flex... |
d-flex |
display: flex | Oui |
justify-content-center |
Centre horizontalement | Oui (ex: justify-content-md-between) |
align-items-center |
Centre verticalement | Oui |
text-center |
text-align: center | Oui |
w-100, h-100 |
width/height: 100% | Non |
Bootstrap 5 est entièrement personnalisable via ses variables Sass :
// Custom variables
$primary: #007bff;
$enable-shadows: true;
$enable-gradients: true;
// Import Bootstrap
@import "bootstrap/scss/bootstrap";
Créez une landing page complète avec hero section, features cards, pricing table et footer. Utilisez uniquement des classes Bootstrap 5.
Voir la solution → 🧠 Testez vos connaissances →