← Retour au cours : CSS de Zéro à Héros
⚠️ Mode Visiteur : Vous lisez ce cours gratuitement.
Créez un compte
pour sauvegarder votre progression et obtenir des badges ! 🏆
Responsive Design et Media Queries
Créer des sites adaptatifs
Le responsive design permet à votre site de s'adapter à toutes les tailles d'écran.
Viewport meta tag (obligatoire)
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Mobile First vs Desktop First
Mobile First (recommandé)
/* Styles de base pour mobile */
.container {
width: 100%;
padding: 10px;
}
/* Tablette et plus */
@media (min-width: 768px) {
.container {
width: 750px;
margin: 0 auto;
}
}
/* Desktop */
@media (min-width: 1200px) {
.container {
width: 1140px;
}
}
Desktop First
/* Styles desktop */
.container {
width: 1200px;
margin: 0 auto;
}
/* Tablette */
@media (max-width: 1199px) {
.container {
width: 100%;
}
}
/* Mobile */
@media (max-width: 767px) {
.container {
padding: 10px;
}
}
Breakpoints courants
/* Mobile small */
@media (min-width: 320px) { }
/* Mobile */
@media (min-width: 480px) { }
/* Tablette */
@media (min-width: 768px) { }
/* Desktop */
@media (min-width: 1024px) { }
/* Large desktop */
@media (min-width: 1200px) { }
Media Queries avancées
/* Largeur exacte */
@media (width: 768px) { }
/* Plage de largeur */
@media (min-width: 768px) and (max-width: 1024px) { }
/* Orientation */
@media (orientation: portrait) { }
@media (orientation: landscape) { }
/* Résolution */
@media (min-resolution: 2dppx) { }
/* Préférence utilisateur */
@media (prefers-color-scheme: dark) {
body {
background: #333;
color: white;
}
}
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
}
}
Images responsives
/* CSS */
img {
max-width: 100%;
height: auto;
}
/* HTML avec srcset */
<img src="small.jpg"
srcset="small.jpg 480w,
medium.jpg 768w,
large.jpg 1200w"
sizes="(max-width: 768px) 100vw,
(max-width: 1200px) 50vw,
33vw"
alt="Image responsive">
Grilles responsives avec Flexbox
.grid {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.grid-item {
flex: 0 0 100%;
}
/* Tablette : 2 colonnes */
@media (min-width: 768px) {
.grid-item {
flex: 0 0 calc(50% - 10px);
}
}
/* Desktop : 4 colonnes */
@media (min-width: 1200px) {
.grid-item {
flex: 0 0 calc(25% - 15px);
}
}
Typographie responsive
/* Tailles fixes */
body {
font-size: 14px;
}
@media (min-width: 768px) {
body {
font-size: 16px;
}
}
@media (min-width: 1200px) {
body {
font-size: 18px;
}
}
/* Tailles fluides */
h1 {
font-size: clamp(1.5rem, 5vw, 3rem);
}
/* VW units */
h1 {
font-size: 5vw;
}
@media (min-width: 1200px) {
h1 {
font-size: 60px;
}
}
Navigation responsive
/* Menu hamburger mobile */
.nav-toggle {
display: block;
}
.nav-links {
display: none;
flex-direction: column;
}
.nav-links.active {
display: flex;
}
/* Desktop : menu horizontal */
@media (min-width: 768px) {
.nav-toggle {
display: none;
}
.nav-links {
display: flex;
flex-direction: row;
gap: 20px;
}
}
Container queries (moderne)
.container {
container-type: inline-size;
}
.card {
padding: 10px;
}
@container (min-width: 400px) {
.card {
display: flex;
padding: 20px;
}
}
Unités responsives
/* Viewport width */
width: 50vw; /* 50% de la largeur de viewport */
/* Viewport height */
height: 100vh; /* 100% de la hauteur */
/* Pourcentage */
width: 50%;
/* Em (relatif au parent) */
font-size: 1.5em;
/* Rem (relatif à root) */
font-size: 1.5rem;
/* Calculs */
width: calc(100% - 40px);
width: calc(50vw - 100px);
Exemple complet responsive
/* Mobile first */
.container {
width: 100%;
padding: 15px;
}
.hero {
height: 50vh;
font-size: 1.5rem;
}
.grid {
display: flex;
flex-direction: column;
gap: 20px;
}
/* Tablette */
@media (min-width: 768px) {
.container {
padding: 30px;
}
.hero {
height: 60vh;
font-size: 2rem;
}
.grid {
flex-direction: row;
flex-wrap: wrap;
}
.grid > * {
flex: 0 0 calc(50% - 10px);
}
}
/* Desktop */
@media (min-width: 1200px) {
.container {
max-width: 1140px;
margin: 0 auto;
}
.hero {
height: 80vh;
font-size: 3rem;
}
.grid > * {
flex: 0 0 calc(33.33% - 14px);
}
}
Points clés
- Viewport meta tag obligatoire
- Mobile First recommandé
- Media queries avec min-width
- Images avec max-width: 100%
- Flexbox + media queries = grilles
- clamp() pour typographie fluide
📝 Exercices (1)
Exercice 1 : Media Query
Syntaxe media query pour mobile ?
📝 Vous avez terminé cette leçon ?
Créez un compte gratuit pour sauvegarder votre progression !
Créer un compte gratuit