Mises en page CSS de nouvelle génération : Container Queries, Subgrid et patterns modernes
Au cours de la dernière décennie, le "Responsive Design" a été synonyme de Media Queries. Nous observions la largeur de la fenêtre entière du navigateur (le viewport) et ajustions nos mises en page en conséquence. Mais à mesure que les applications web sont devenues plus modulaires (React, Vue, Web Components), cette approche est devenue un goulot d'étranglement majeur.
Le CSS moderne a enfin résolu ce problème avec les Container Queries, accompagnées d'ajouts puissants comme Subgrid et Aspect-Ratio.
1. Container Queries : Le Graal du design modulaire
Imaginez que vous ayez un composant Card. Vous voulez qu'il affiche une barre latérale lorsqu'il est large, et une mise en page empilée lorsqu'il est étroit. Avec les Media Queries, la Card ne sait pas quelle est sa propre largeur ; elle ne connaît que la largeur de la fenêtre. Si vous placez cette carte dans une barre latérale étroite sur un écran de bureau, elle se casse.
Les Container Queries permettent à un composant de répondre à sa propre taille.
Comment les utiliser :
Tout d'abord, définissez un conteneur :
.card-wrapper {
container-type: inline-size;
container-name: card-container;
}
Ensuite, écrivez une requête pour le composant à l'intérieur :
@container card-container (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 1fr 2fr;
}
}
Désormais, la carte changera de mise en page en fonction de l'espace disponible dans .card-wrapper, quelle que soit la taille de l'écran.
2. CSS Subgrid : Aligner l'inalignable
CSS Grid est incroyable, mais il avait une limitation majeure : les grilles imbriquées ne pouvaient pas facilement s'aligner sur la grille parente. Si vous aviez une liste de cartes avec des en-têtes et des pieds de page, et que vous vouliez que tous les en-têtes aient la même hauteur quel que soit le contenu, c'était impossible.
Subgrid résout ce problème en permettant à un élément enfant d'"hériter" des lignes ou des colonnes de son parent.
Exemple :
.grid-parent {
display: grid;
grid-template-rows: auto 1fr auto; /* En-tête, Corps, Pied de page */
}
.card {
grid-row: span 3; /* Occupe 3 lignes du parent */
display: grid;
grid-template-rows: subgrid; /* Utilise le dimensionnement des lignes du parent ! */
}
Avec grid-template-rows: subgrid, tous les éléments .card de la même ligne auront des en-têtes et des pieds de page parfaitement alignés, même si leur contenu interne varie en longueur.
3. Contrôler les proportions avec aspect-ratio
Avant cette propriété, maintenir un ratio 16:9 pour une vidéo ou 1:1 pour une photo de profil nécessitait des "hacks" comme l'astuce du padding-top. Maintenant, c'est une simple ligne.
.video-thumbnail {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
}
C'est crucial pour prévenir le Layout Shift (CLS), car le navigateur peut réserver l'espace correct pour une image ou une vidéo avant même qu'elle ne finisse de charger.
4. Patterns modernes de Flexbox et Grid
Le CSS moderne apporte également des améliorations petites mais puissantes aux moteurs de mise en page existants :
gap pour Flexbox
Plus besoin de margin-right sur tous les éléments sauf le dernier enfant. Utilisez simplement gap.
.flex-container {
display: flex;
gap: 1rem;
}
Propriétés logiques (Logical Properties)
Pensez en termes d'inline et de block au lieu de left, right, top et bottom. Cela rend le support des langues s'écrivant de droite à gauche (RTL) automatique.
.element {
margin-inline-start: 20px; /* margin-left en LTR, margin-right en RTL */
padding-block: 10px; /* équivalent à padding-top et padding-bottom */
}
5. Performance et support des navigateurs
Depuis 2024, les Container Queries, Subgrid et Aspect-Ratio sont supportés par tous les principaux navigateurs. Pour les développeurs, cela signifie que nous pouvons enfin arrêter d'utiliser des Resize Observers JavaScript lourds et des hacks de grille complexes.
Le résultat ? Des fichiers CSS plus petits, de meilleures performances et des bases de code beaucoup plus faciles à maintenir.
FAQ : Questions fréquemment posées
Q : Dois-je arrêter d'utiliser les Media Queries ?
R : Non. Les Media Queries restent le meilleur outil pour la mise en page de haut niveau (ex: "la navigation principale doit-elle être une barre supérieure ou latérale ?"). Les Container Queries sont destinées à la mise en page au niveau des composants.
Q : Est-ce que Subgrid fonctionne dans tous les navigateurs ?
R : Oui ! Bien que ce soit la dernière de ces fonctionnalités à avoir bénéficié d'un support universel, elle est désormais disponible dans les dernières versions de Chrome, Safari et Firefox.
Q : Puis-je utiliser les Container Queries pour la typographie ?
R : Oui ! Vous pouvez utiliser des unités de requête de conteneur comme cqi pour rendre la taille du texte relative à la largeur du conteneur, ce qui est souvent bien plus utile que les unités de viewport (vw).
Construisez plus avec moins de code
Les outils de mise en page CSS modernes sont conçus pour fonctionner ensemble. En combinant Grid, Subgrid et Container Queries, vous pouvez construire des mises en page qui étaient impossibles — ou extrêmement fragiles — il y a seulement quelques années.
Prêt à tester vos nouvelles mises en page ? Consultez notre Visualiseur de mise en page CSS pour voir ces concepts en action.