Lignes de hauteur égale dans la disposition en grille CSS : une explication détaillée
Contrairement à Flexbox, où les hauteurs de lignes sont dictées par la hauteur minimale requise pour ses éléments, CSS Grid Layout permet aux développeurs d'obtenir des lignes de hauteur égale sur l'ensemble d'un grid.
Solution de mise en page de grille
La clé pour obtenir des hauteurs égales réside dans la définition de la propriété grid-auto-rows du conteneur de grille sur 1fr. Les unités Fr sont conçues pour distribuer l'espace libre dans un conteneur, semblable à la propriété flex-grow dans Flexbox.
En définissant les lignes automatiques de grille : 1fr, toutes les lignes de la grille auront des hauteurs égales. Cela peut sembler contre-intuitif puisque fr devrait allouer de l'espace de manière dynamique.
Comprendre l'unité Fr
Cependant, la spécification CSS Grid dévoile une nuance cruciale : lorsqu'il s'agit de dimensions de grille dynamiques , les "pistes de la grille" (les lignes dans ce cas) sont redimensionnées pour s'adapter à leur contenu. La hauteur de chaque ligne s'adapte ensuite à l'élément de grille le plus haut (contenu maximum).
La hauteur maximale de ces lignes devient la longueur de 1fr, qui est ensuite multipliée par le facteur de flexion de chaque piste de grille pour déterminer sa longueur finale. taille. Ce mécanisme garantit des hauteurs égales sur toutes les lignes.
Pourquoi Flexbox échoue
Flexbox, contrairement à CSS Grid, ne peut pas faciliter des hauteurs de ligne égales sur plusieurs lignes. Les éléments flexibles ne peuvent atteindre des hauteurs égales qu'au sein de la même ligne, conformément aux spécifications Flexbox :
"Dans un conteneur flexible multiligne, la taille transversale de chaque ligne est la taille minimale nécessaire pour contenir les éléments flexibles sur le doubler." Cette stipulation empêche Flexbox d'étendre les lignes au-delà de leur hauteur minimale.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!