Design Responsive & Mobile-First

Adapter le web à tous les écrans

Utilisez les flèches, cliquez ou glissez pour naviguer

Objectifs d'apprentissage

1. Approche mobile-first

Comprendre pourquoi c'est le standard

2. Configurer le viewport

Le meta tag obligatoire

3. Media queries avec min-width

Breakpoints basés sur le contenu

4. clamp() pour tailles fluides

Moins de media queries

5. Images responsives avec srcset et sizes

Optimiser le chargement pour chaque écran

Plan de la présentation

Module 1

Pourquoi le responsive ?

Module 2

Mobile-first vs Desktop-first

Module 3

Viewport & Unités

Module 4

Media queries

Module 5

clamp() & Images responsives

Live Coding

Rendre une landing page responsive

Module 1

Pourquoi le responsive ?

Les statistiques d'utilisation en 2026

Usage Mobile vs Desktop en 2026

~60%

Mobile

~40%

Desktop

Depuis 2019 : Google indexe en mobile-first — votre site DOIT être responsive pour le SEO !

L'expérience utilisateur avant tout

❌ Site non-responsive

  • • Texte illisible (trop petit)
  • • Boutons impossibles Ă  cliquer
  • • Scroll horizontal
  • • Zoom manuel nĂ©cessaire
  • • Taux de rebond Ă©levĂ©

âś“ Site responsive

  • • Contenu adaptĂ© Ă  l'Ă©cran
  • • Navigation intuitive
  • • Performance optimisĂ©e
  • • Meilleur SEO
  • • Conversion accrue

Avant / Après

❌ Sans responsive

Desktop zoomé sur mobile

âś“ Avec responsive

Contenu adapté au mobile

Module 2

Mobile-First vs Desktop-First

Pourquoi mobile-first est le standard moderne

Qu'est-ce que mobile-first ?

Écrire le CSS pour mobile EN PREMIER, puis ajouter des styles pour écrans plus grands

/* Styles de base = Mobile */

.container {

width: 100%;

padding: 1rem;

}

/* Écrans plus grands */

@media (min-width: 768px) {

.container {

max-width: 720px;

padding: 2rem;

}

}

Règle : On commence simple (mobile) et on ajoute de la complexité (desktop)

min-width vs max-width

Deux approches opposées

âś“ min-width (Mobile-First)

/* Mobile par défaut */

.box { width: 100%; }

@media (min-width: 768px) {

.box { width: 50%; }

}

↑ Styles ajoutés progressivement

âś— max-width (Desktop-First)

/* Desktop par défaut */

.box { width: 50%; }

@media (max-width: 767px) {

.box { width: 100%; }

}

↓ Styles surchargés pour mobile

Pourquoi mobile-first ?

âś“ Code plus simple

Moins de surcharge, moins de bugs

âś“ Performance

CSS optimisé pour les mobiles (60% du trafic)

âś“ SEO

Google indexe en mobile-first

✓ Contraintes créatives

Forcer Ă  prioriser le contenu essentiel

Conseil : Tailwind CSS utilise mobile-first par défaut — c'est le standard moderne !

Module 3

Viewport & Unités

La base du responsive : le meta viewport

⚠️ Le meta viewport OBLIGATOIRE

Qu'est-ce que le viewport ? C'est la zone visible de la page web dans le navigateur. Sur mobile, cette zone est plus petite que sur desktop.

Sans ce meta tag, RIEN ne fonctionne !

<head>

<meta name="viewport"

content="width=device-width, initial-scale=1.0">

</head>

width=device-width

Largeur = largeur de l'écran

initial-scale=1.0

Zoom initial Ă  100%

Sans ce meta tag : Le mobile affiche la version desktop zoomée — l'utilisateur doit pincer pour zoomer !

Les unités viewport

Unités relatives à la taille de la fenêtre du navigateur

vw

Viewport Width

1vw = 1% de la largeur du viewport

Ex: sur un écran de 1200px, 1vw = 12px

vh

Viewport Height

1vh = 1% de la hauteur du viewport

Ex: sur un écran de 800px de haut, 1vh = 8px

dvh

Dynamic Viewport Height

S'adapte quand la barre d'adresse mobile apparaît/disparaît

✓ Recommandé pour les sections pleine hauteur

svh / lvh

Small / Large Viewport Height

svh = hauteur minimale (barre d'adresse visible) | lvh = hauteur maximale (barre cachée)

Conseil 2026 : Utilisez dvh pour les sections pleine hauteur sur mobile — gère automatiquement la barre d'adresse !

Exemple : Hero pleine hauteur

.hero {

height: 100dvh; /* Hauteur dynamique */

display: flex;

align-items: center;

justify-content: center;

}

.hero h1 {

font-size: clamp(2rem, 5vw, 4rem);

}

100vh

Problème sur mobile avec la barre d'adresse

âś“ 100dvh

S'adapte à la hauteur visible réelle

⚠️ Piège : Oublier le meta viewport

❌ Sans meta viewport

Le navigateur mobile :

  • • Affiche une vue "desktop" (980px)
  • • Zoom automatique arrière
  • • Media queries ignorĂ©es
  • • Texte minuscule

âś“ Avec meta viewport

Le navigateur mobile :

  • • Utilise la vraie largeur
  • • Pas de zoom automatique
  • • Media queries actives
  • • Texte lisible

Vérifiez TOUJOURS que le meta viewport est présent dans le <head> !

Module 4

Media Queries

Adapter les styles selon la taille de l'écran

Syntaxe des media queries

@media (min-width: 768px) {

/* Styles pour écrans ≥ 768px */

.container { max-width: 720px; }

}

min-width

≥ cette taille

Mobile-first âś“

max-width

≤ cette taille

Desktop-first âś—

width

= cette taille exacte

Rarement utilisé

Breakpoints courants

Basés sur le CONTENU, pas sur les devices !

640px sm Mobile landscape / Petit tablet
768px md Tablette portrait
1024px lg Desktop / Tablette landscape
1280px xl Grand desktop

⚠️ Règle : Les breakpoints ne correspondent PAS à des devices (iPhone, iPad...) mais au moment où votre contenu a besoin de s'adapter !

Combiner les conditions

/* AND : les deux conditions */

@media (min-width: 768px) and (max-width: 1023px) {

/* Tablette uniquement */

}

/* OR : au moins une condition */

@media (max-width: 639px) or (hover: none) {

/* Mobile ou tactile */

}

/* NOT : inverse la condition */

@media not (min-width: 768px) {

/* Écrans < 768px */

}

Exemple : Grille responsive

.grid {

display: grid;

gap: 1rem;

grid-template-columns: 1fr; /* Mobile: 1 colonne */

}

@media (min-width: 768px) {

.grid {

grid-template-columns: repeat(2, 1fr); /* 2 colonnes */

}

}

@media (min-width: 1024px) {

.grid {

grid-template-columns: repeat(3, 1fr); /* 3 colonnes */

}

}

âś“ Mobile-first : Style de base simple, puis on ajoute des colonnes

em vs px pour les breakpoints

Accessibilité : respecter le zoom utilisateur

❌ px (problème)

@media (min-width: 768px)

Si l'utilisateur zoom le texte, le breakpoint ne s'adapte pas

✓ em (recommandé)

@media (min-width: 48em)

768px ÷ 16 = 48em — suit le zoom

Conversion : px Ă· 16 = em (768px = 48em, 1024px = 64em)

Module 5

clamp() & Images Responsives

Tailles fluides et images optimisées

La fonction clamp()

Tailles fluides SANS media queries

clamp(min, preferred, max)

.title {

font-size: clamp(1rem, 2.5vw, 2rem);

}

/*

- Minimum : 1rem (16px)

- Préféré : 2.5% de la largeur

- Maximum : 2rem (32px)

*/

Exemples pratiques clamp()

/* Titre fluide */

h1 { font-size: clamp(1.5rem, 5vw, 4rem); }

/* Padding fluide */

.section { padding: clamp(1rem, 5vw, 4rem); }

/* Largeur de conteneur */

.container {

width: clamp(90%, 1200px, 100%);

}

/* Espacement entre éléments */

.grid { gap: clamp(1rem, 3vw, 2rem); }

âś“ Avantage : Une seule ligne au lieu de 3 media queries !

Images responsives : srcset

<img

src="hero-800.jpg"

srcset="hero-400.jpg 400w,

hero-800.jpg 800w,

hero-1200.jpg 1200w"

sizes="(max-width: 600px) 100vw, 50vw"

alt="Description">

srcset

Liste des images avec leur largeur réelle en pixels (w)

sizes

Largeur que l'image occupera selon le viewport

Résultat : Le navigateur choisit automatiquement l'image optimale selon l'écran et la densité de pixels (Retina)

Art direction avec <picture>

Images différentes selon le format

<picture>

<source media="(min-width: 1024px)"

srcset="hero-desktop.jpg">

<source media="(min-width: 768px)"

srcset="hero-tablet.jpg">

<img src="hero-mobile.jpg" alt="Hero">

</picture>

Cas d'usage : Image recadrée différemment pour mobile (focus sur le sujet) vs desktop (vue large)

🖥️ Live Coding

Rendre la landing page de vendredi responsive

Ouvrez DevTools : Ctrl+Shift+M pour le mode responsive

Objectifs du live coding

1

Ajouter le meta viewport

Dans le <head> de la page

2

Rendre la grille responsive

1 colonne mobile → 2 colonnes tablette → 3 colonnes desktop

3

Adapter la navigation

Menu hamburger sur mobile avec Tailwind

4

Utiliser clamp() pour les titres

Taille fluide sans media queries

⚠️ Pièges Courants

Les erreurs à éviter absolument

4 pièges à éviter

1. Oublier le meta viewport

Sans lui, le responsive ne fonctionne PAS du tout

2. Confondre min-width et max-width

Mobile-first vs Desktop-first

3. px au lieu de em

Problème d'accessibilité avec le zoom

4. Tester uniquement sur son écran

Utiliser DevTools responsive (Ctrl+Shift+M)

Rappel : Testez sur plusieurs tailles d'écran : 375px (iPhone SE), 768px (tablette), 1440px (desktop)

Récapitulatif

Mobile-First

CSS mobile d'abord

min-width dans media queries

Viewport

Meta tag obligatoire

vw, vh, dvh

Breakpoints

Basés sur le contenu

em pour l'accessibilité

clamp()

Tailles fluides

Moins de media queries

Images

srcset + sizes

<picture> pour art direction

Testing

DevTools responsive

Ctrl+Shift+M

Points clés à retenir

1

Mobile-first = min-width

Écrire le CSS mobile d'abord, puis ajouter des styles pour écrans plus grands

2

Breakpoints = Contenu, pas devices

Choisir les breakpoints selon oĂą le contenu a besoin de s'adapter

3

clamp() pour la fluidité

Une seule ligne pour des tailles qui s'adaptent automatiquement

4

Toujours tester en responsive

DevTools (Ctrl+Shift+M) — plusieurs tailles d'écran

Questions ?

PrĂŞt pour le live coding !

Rappel : Ctrl+Shift+M pour le mode responsive dans DevTools