L'eau prend la forme du verre
Versez la même eau dans un verre à thé ou dans une carafe : elle s'adapte au récipient. Un site responsive, c'est le même contenu qui s'adapte à l'écran : une colonne sur téléphone, trois sur ordinateur.
Comprendre pourquoi un site doit s'adapter à toutes les tailles d'écran, utiliser la balise viewport, les unités relatives et les media queries, et concevoir d'abord pour le mobile.
Au Maroc, la grande majorité des visiteurs d'un site arrivent depuis leur téléphone. Le snack « Chez Hamid » à Meknès a un joli site sur ordinateur, mais sur téléphone il faut zoomer, le menu déborde et les photos sortent de l'écran. Les clients abandonnent et appellent le concurrent. Un site responsive s'adapte tout seul à la taille de l'écran.
Sur téléphone (moins de 600 px), les plats s'affichent sur une seule colonne : c'est le CSS par défaut, « mobile first ».
Un site responsive s’adapte à toutes les tailles d’écran : téléphone, tablette, ordinateur, grand écran. On ne fait pas trois sites : on écrit un seul HTML et un CSS qui s’adapte.
Sans elle, le téléphone fait comme s’il avait un écran d’ordinateur, puis rétrécit tout.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
%, max-width plutôt que width fixe ;rem ;img { max-width: 100%; height: auto; } ;flex-wrap: wrap : les éléments passent à la ligne seuls.@media (max-width: 600px) { ... } /* écrans de 600 px ou moins */
@media (min-width: 768px) { ... } /* écrans de 768 px ou plus */
@media (min-width: 768px) and (max-width: 1023px) { ... } /* tablettes */
@media print { ... } /* à l'impression */
Les points de rupture (breakpoints) les plus courants :
| Écran | Largeur |
|---|---|
| téléphone | moins de 576 px |
| tablette | à partir de 768 px |
| ordinateur portable | à partir de 992 px |
| grand écran | à partir de 1200 px |
On écrit d’abord le CSS du petit écran (une colonne, gros boutons), puis on ajoute des @media (min-width: ...) pour les écrans plus grands. Le code est plus court, et le téléphone ne charge que le nécessaire.
Dans Chrome ou Firefox, F12 puis l’icône téléphone (ou Ctrl + Maj + M) : on choisit un modèle d’appareil et on voit le rendu. Rien ne remplace un essai sur un vrai téléphone.
Versez la même eau dans un verre à thé ou dans une carafe : elle s'adapte au récipient. Un site responsive, c'est le même contenu qui s'adapte à l'écran : une colonne sur téléphone, trois sur ordinateur.
Une media query est une condition : le CSS qu'elle contient ne s'applique que si l'écran respecte la condition.
@media (max-width: 600px) { /* seulement sur les écrans de 600 px ou moins */ .menu { flex-direction: column; } }
Un stagiaire a écrit de belles media queries, mais sur son téléphone la page s'affiche toute petite, comme sur un ordinateur. Quelle ligne manque dans le <head> ?
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- sans elle, le téléphone simule un écran de 980 px de large -->
Réécrivez cette règle en « mobile first » : par défaut une colonne, et trois colonnes à partir de 768 px. .menu { display: flex; } @media (max-width: 767px) { .menu { flex-direction: column; } }
.menu { display: flex; flex-direction: column; /* téléphone : par défaut */ } @media (min-width: 768px) { .menu { flex-direction: row; } /* tablette et plus */ }
Sur téléphone, une photo de 1200 px de large fait apparaître une barre de défilement horizontale. Quelle règle CSS corrige le problème pour toutes les images du site ?
img { max-width: 100%; /* jamais plus large que son conteneur */ height: auto; /* garder les proportions */ }