Aucun breakpoint. beaucoup moins de media query.
Ça marche sur tous les écrans.
Tout le monde est encore en mode hacking stuff. On écrit 500 lignes de CSS grid (oui oui je le pense vraiment). On défini 7 breakpoints. On test sur 12 tailles d'écran. Et c'est toujours cassé quelque part.
Il y a une autre façon. Ça tient en 1 ligne. Ça marche sur téléphone, tablette, ordinateur, télévision, frigo connecté. Tu ne l'écris qu'une fois. Et tu n'y touches plus jamais.
C'est tout. C'est la ligne la plus puissante du CSS. Et personne ne l'utilise.
Redimensionne la fenêtre. Essaye sur téléphone. Essaye sur un écran 4k. Ça s'adapte tout seul. Pas de code supplémentaire.
Ceci est un contenu normal qui tient dans une carte. Ça marche avec n'importe quelle hauteur.
Une carte avec plus de contenu. Ça s'adapte automatiquement. Toutes les cartes gardent la même hauteur.
Et même avec plusieurs paragraphes.
Petite carte.
Ceci est un contenu normal qui tient dans une carte. Ça marche avec n'importe quelle hauteur.
Une carte avec plus de contenu. Ça s'adapte automatiquement.
Dernière carte.
Tu ne changes rien d'autre que le gap. C'est tout.
Ça marche aussi évidemment. La même règle s'applique à n'importe quel élément.
Aucune modification. Tu ajoutes juste flex: 1 1 min(100%, 180px); sur tes éléments existants. C'est tout.
Ça met automatiquement le bon nombre de cartes par ligne. Si l'écran est petit : 1 colonne. Moyen : 2 colonnes. Grand : 3 colonnes. Très grand : 4, 5, 6 colonnes.
Tu n'as rien à faire. Le navigateur calcule. Il sait mieux que toi combien de cartes ça tient.
Accroche toi un peu, je sais que je n'explique pas toujours très bien. Mais je pense que quand c'est compris, la magie opère vraiment.
Pas d'imagination. Pas de truc caché. Voilà exactement ce que tu écris. Tout. Pas plus.
D'abord les variables de base. Tu les as déjà définies sur la page rythme. Ce sont exactement les mêmes. Rien de nouveau.
Ensuite la grille. Deux sélecteurs. Cinq lignes au total.
Tu écris ça une seule fois dans ton fichier CSS principal.
Et ensuite dans ton HTML :
Tu ajoutes la classe grid sur le conteneur.
C'est tout.
Tu ne changes rien aux éléments à l'intérieur.
Tu ne changes rien à tes composants existants.
Ça marche avec absolument tout.
C'est fini.
Ça marche sur tous les écrans.
Ça marche avec n'importe quel contenu.
Ça marche avec les cartes de la page contraste.
Ça marche avec des boutons.
Ça marche avec des images.
Tu n'écris plus jamais de CSS de grille.
display: flex passe en mode flexible. flex-wrap: wrap dit que les éléments vont à la ligne quand il n'y a plus la place. gap c'est l'espace entre les éléments.
La règle s'applique à TOUS les enfants directement. Pas besoin de classe sur les éléments. Pas besoin de rien. Tu met ce que tu veux dedans.
Il n'y a que DEUX valeurs que tu peux changer. Pas plus.
Ce sont les deux seuls curseurs. Tu ne touches à rien d'autre. Jamais.
D'abord on dit que les éléments vont à la ligne quand il n'y a plus la place.
C'est le truc magique.
min() prend la plus petite valeur entre les deux.
Donc :
Et ensuite on dit : "Tu peux grandir si il y a de la place. Tu peux rétrécir si il n'y en a plus. Mais tu ne descendras jamais en dessous de ce que j'ai dit."
C'est tout. Pas de magie. Juste du CSS qui existe depuis au moins avant les dinosaures (au moins je te dis!).
Parce que tout le monde a appris `display: grid`. Parce que tous les tutos montrent les breakpoints (au début cela fait tricks de fou c'est vrai). Parce que tous les frameworks font comme ça. Parce que personne n'a pris 5 minutes pour lire la documentation de flexbox.
faire une grille = utiliser la propriété `display: grid`
Alors que c'est complètement faux. Une grille c'est juste des éléments alignés en lignes et colonnes. Ça existait 10 ans avant `display: grid`.
Le truc le plus drôle dans l'histoire: on ne fait pas de grille avec `display: grid`. On fait des tableaux. La vrai grille c'est ça. Celle là. Avec flex.
Il y a juste une limite : ça ne marche pas si tu veux absolument toujours exactement 3 colonnes peu importe la taille de l'écran.
Mais si tu veux toujours exactement 3 colonnes même sur un écran de téléphone de 320px, c'est que tu fais de la merde de toute façon (pardon mais c'est vrai à la fin quoi).
260px c'est parfait pour des cartes. 320px c'est parfait pour du contenu. Pas autre chose.
Si il y a de la place, les éléments grandissent. C'est normal. C'est ce que veulent les utilisateurices. A la limite pour le container moi j'ai mis une limite à 1200px pour l'accessibilité.
justify-content: centerSi tu centres la dernière ligne est cassée. Laisse les éléments sur la gauche. C'est mieux contre les effets dyslexiques aussi.
Tu peux supprimer beaucoup (tout?) du code CSS de tes grilles. Tu peux supprimer tous tes media queries. Tu peux supprimer Tailwind (bye bye presque copain). Tu peux supprimer Bootstrap (de toute façon je t'ai jamais aimé).
Une ligne. Ça marche partout. Ça marchera toujours.
Et personne ne te dira merci.