Mise en page de la grille CSS: Comment utiliser minmax ()
Le CSS Grid Layout Module prend la conception sensible au niveau suivant en introduisant un nouveau type de flexibilité qui n'a jamais été vu auparavant. Maintenant, nous pouvons non seulement définir des grilles personnalisées avec rapidité uniquement avec du CSS pur, mais le CSS Grid a aussi beaucoup de gemmes cachées qui nous permettent de modifier la grille et d'obtenir des mises en page compliquées.
La fonction minmax()
est l'une de ces fonctionnalités moins connues. Il permet de définir la taille d'une trace de grille au minimum et au maximum afin que la grille puisse s'adapter au mieux à la vue de chaque utilisateur.
Syntaxe
La syntaxe de la fonction minmax()
est relativement simple, elle prend deux arguments : un minimum et un maximum:
minmax (min, max)
La valeur min
doit être plus petite que la valeur max
, sinon max
ignoré par le navigateur.
Nous pouvons utiliser la fonction minmax()
comme valeur de la propriété grid-template-columns
ou grid-template-rows
(ou les deux) . Dans notre exemple, nous utiliserons le premier, car c'est un cas d'utilisation beaucoup plus fréquent.
.container {display: grille; grid-template-columns: minmax (100px, 200px) 1fr 1fr; grid-template-rows: 100px 100px 100px; intervalle de grille: 10px; }
Dans la démo Codepen ci-dessous, vous pouvez trouver le code HTML et CSS que nous utiliserons tout au long de l'article.
Nous pouvons utiliser différents types de valeurs dans la fonction minmax()
, tout dépend du type de grille personnalisée que nous voulons créer.
Valeurs de longueur statiques
Il y a deux façons principales d'utiliser la fonction minmax()
avec des valeurs de longueur statiques .
Premièrement, nous pouvons utiliser minmax()
seulement pour une colonne de grille et définir la largeur des autres colonnes comme de simples valeurs statiques (pixels ici).
grid-template-columns: minmax (100px, 200px) 200px 200px;
Sur la démo gif ci-dessous, vous pouvez voir que cette mise en page n'est pas réactive, cependant la première colonne a une certaine flexibilité . Les deuxième et troisième colonnes conservent leur largeur fixe (200px) tandis que la première colonne varie de 100px à 200px, en fonction de l'espace disponible .
Deuxièmement, nous pouvons définir la largeur de plus d'une colonne de la grille en utilisantminmax()
. Les valeurs min et max sont toutes les deux statiques, donc par défaut, la grille n'est pas réactive . Cependant, les colonnes elles-mêmes sont flexibles, mais seulement entre 100px et 200px. Ils grandissent et rétrécissent simultanément lorsque nous changeons la taille de la fenêtre.colonnes de matrice de grille: minmax (100px, 200px) minmax (100px, 200px) minmax (100px, 200px);Notez que nous pouvons aussi utiliser la fonction
repeat()
togehter avec minmax()
. Ainsi, l'extrait de code précédent peut également être écrit comme ceci:grid-template-columns: repeat (3, minmax (100px, 200px));
Valeurs de longueur dynamiques
En dehors des valeurs statiques, la fonction minmax()
accepte également les unités de pourcentage et la nouvelle fraction (fr) comme arguments. En les utilisant, nous pouvons réaliser des grilles personnalisées qui répondent à la fois et changent leurs dimensions en fonction de l'espace disponible.
Le code ci-dessous donne une grille dans laquelle la largeur de la première colonne est comprise entre 50% et 80% tandis que la seconde et la troisième partagent uniformément l'espace restant .
grid-template-columns: minmax (50%, 80%) 1fr 1fr;Lorsque nous utilisons des valeurs dynamiques avec la fonction
minmax()
, il est essentiel de définir une règle qui a du sens . Laissez-moi vous montrer un exemple où la grille s'effondre :grid-template-columns: minmax (1fr, 2fr) 1fr 1fr;
Cette règle n'a aucun sens, car le navigateur est incapable de décider quelle valeur affecter à la fonction minmax()
. La valeur minimale conduirait à une largeur de colonne de 1fr 1fr 1fr
, tandis que la valeur maximale 2fr 1fr 1fr
de 2fr 1fr 1fr
. Mais, les deux sont possibles même sur un très petit écran. Il n'y a rien que le navigateur puisse comprendre .
Voici le résultat:
Combiner les valeurs statiques et dynamiquesIl est également possible de combiner des valeurs statiques et dynamiques . Par exemple, dans la démo Codepen ci-dessus, j'ai utilisé le minmax(100px, 200px) 1fr 1fr;
règle qui aboutit à une grille où la première colonne est comprise entre 100px et 200px et l'espace restant est partagé de manière égale entre les deux autres .
grid-template-columns: minmax (100px, 200px) 1fr 1fr;
Il est intéressant d'observer qu'à mesure que la fenêtre se développe, la première colonne passe de 100px à 200px. Les deux autres, régis par l'unité fr, commencent à croître seulement après que le premier a atteint sa largeur maximale . C'est logique, car l'objectif de l'unité de fraction est de diviser l'espace disponible (restant).
Les motsauto
clés min-content
, max-content
et auto
Il existe un troisième type de valeur que nous pouvons affecter à la fonction minmax()
. Les mots auto
clés min-content
, max-content
et auto
associent les dimensions d'une trace de grille au contenu qu'elle contient .
max-content
Le mot max-content
clé max-content
indique au navigateur que la colonne de la grille doit être aussi large que l'élément le plus large qu'il contient .
Sur la démo ci-dessous, j'ai placé une image de 400 px à l'intérieur de la première piste de grille, et utilisé la règle CSS suivante (vous pouvez trouver une démo Codepen avec le code modifié complet à la fin de l'article) :
.container {grid-template-columns: max-contenu 1fr 1fr; / ** * La même chose avec la notation minmax (): * grid-template-columns: minmax (max-contenu, max-contenu) 1fr 1fr; * /}
Je n'ai pas encore utilisé la notation minmax()
, mais dans le commentaire de code ci-dessus, vous pouvez voir à quoi ressemblerait le même code (bien que ce soit superflu ici).
min-content
Le mot clé min-content
indique au navigateur que la colonne de la grille doit être aussi large que l' élément le plus étroit qu'il contient, d'une manière qui n'entraîne pas de débordement .
Voyons comment la démo précédente avec l'image ressemble si nous changeons la valeur de la première colonne en min-content
:
.container {grid-template-columns: min-contenu 1fr 1fr; / ** * La même chose avec la notation minmax (): * grid-template-columns: minmax (min-contenu, min-contenu) 1fr 1fr; * /}
J'ai laissé l'arrière-plan vert sous l'image pour que vous puissiez voir la taille de la première cellule.
Comme vous pouvez le voir, la première colonne conserve la plus petite largeur pouvant être atteinte sans débordement . Dans cet exemple, ceci sera défini par la largeur minimale des cellules 4 et 7, qui provient des propriétés depadding
et font-size
, car l'image de la première cellule peut être réduite à zéro sans débordement.Si la cellule de grille contenait une chaîne de texte, le min-content
serait égal à la largeur du mot le plus long, car c'est le plus petit élément qui ne peut pas être rétréci davantage sans débordement. Voici un excellent article de BitsOfCode où vous pouvez voir comment le min-content
max-content
se comportent lorsque la cellule de la grille contient une chaîne de texte.
Utilisation de min-content
et max-content
ensemble
Si nous utilisons ensemble min-content
et max-content
dans la fonction minmax()
, nous obtenons une colonne de grille qui:
- est réactif
- n'a pas de débordement
- ne croît pas plus large que son élément le plus large
.container {grid-template-columns: minmax (min-contenu, max-contenu) 1fr 1fr; }Nous pouvons également utiliser les mots
max-content
clés min-content
et max-content
avec d'autres valeurs de longueur dans la fonction minmax()
, jusqu'à ce que la règle ait du sens. Par exemple, minmax(25%, max-content)
ou minmax(min-content, 300px)
seraient toutes les deux des règles valides. auto
Enfin, nous pouvons également utiliser le mot auto
clé auto
comme argument de la fonction minmax()
.
Lorsque auto
est utilisé au maximum, sa valeur est identique à max-content
.
Lorsqu'il est utilisé au minimum, sa valeur est spécifiée par la règle min-width/min-height
, ce qui signifie que auto
est parfois identique au min-content
, mais pas toujours .
Dans notre exemple précédent, min-content
est égal à auto
, car la largeur minimale de la première colonne de la grille est toujours inférieure à sa hauteur minimale. Donc, la règle CSS d'appartenance:
.container {grid-template-columns: minmax (min-contenu, max-contenu) 1fr 1fr; }
pourrait aussi être écrit comme ceci:
.container {grid-template-columns: minmax (auto, auto) 1fr 1fr; }
Le mot auto
clé auto
peut également être utilisé avec d'autres unités statiques et dynamiques (pixels, unités fr, pourcentages, etc.) à l'intérieur de la fonction minmax()
, par exemple minmax(auto, 300px)
serait une règle valide.
Vous pouvez tester la manière dont les mots auto
clés min-content
, max-content
et auto
fonctionnent avec la fonction minmax()
dans la démo Codepen suivante:
10 mythes technologiques communs, démystifiés
En tant que passionné de technologie, je suis habituellement la première personne à qui mes amis et ma famille ont recours pour leurs questions et leurs problèmes liés à la technologie. Et souvent, ils me disent des faits inexacts sur la technologie qui me fait vraiment sentir désolé pour eux.La tech
Transformez votre salle de classe en une machine à voyager dans le temps [infographie]
Les enseignants du monde entier se préparent à introduire la technologie dans les écoles, et nous ne parlons pas seulement de la réalité augmentée ou de l'impression 3D ici. Ces choses ne sont que des outils que les enseignants peuvent utiliser - c'est ce que l'éducateur fait avec lui pour aider à améliorer l'expérience d'apprentissage qui libère véritablement le potentiel de ces technologies, des appareils et de leurs contenus.Par exemple