La propriété gap dans CSS est un raccourci pour row-gap
et column-gap
, spécifiant la taille des gouttières, qui est l'espace entre les lignes et les colonnes dans les mises en page grille, flex et multi-colonnes.
/* Grid layout */ .container ( display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: 1fr 2fr 1fr; gap: 30px 20px; ) /* Flex layout */ .container ( display: flex; gap: 10%; ) /* Multi-column layout */ .container ( column-count: 5; gap: 20px; )
![](8489426/gap_css-tricks_2.png.webp)
![](8489426/gap_css-tricks_2.png.webp)
Utilisez le curseur dans la démo ci-dessous pour voir la gap
propriété en action:
Syntaxe
gap
accepte une ou deux valeurs:
- Une seule valeur définit les deux
row-gap
etcolumn-gap
par la même valeur. - Lorsque deux valeurs sont utilisées, la première définit le
row-gap
et le second définit lecolumn-gap
.
.container ( gap: 1rem; /* Is equivalent to: * row-gap: 1rem; * column-gap: 1rem */ gap: 10px 15%; /* Is equivalent to: * row-gap: 10px; * column-gap: 15%; */ )
La spécification du module CSS Grid Layout a défini l'espace entre les pistes de la grille à l'aide de la grid-gap
propriété. gap
est destiné à le remplacer afin que les espaces puissent être définis dans plusieurs méthodes de mise en page CSS, comme flexbox, mais grid-gap
doivent toujours être utilisés dans les cas où un navigateur peut avoir implémenté grid-gap
mais n'a pas encore commencé à prendre en charge la nouvelle gap
propriété.
Valeurs
gap
accepte les valeurs suivantes:
normal
: (Par défaut) Le navigateur spécifiera une valeur utilisée de 1em pour la mise en page multi-colonnes et 0px pour tous les autres contextes de mise en page (c.-à-d. Grille et flex).: Toute longueur CSS valide et non-négatifs, tels que
px
,em
,rem
et%
, entre autres.: La taille de l'écart sous forme de valeur de pourcentage non négative par rapport à la dimension de l'élément. (Voir ci-dessous pour plus de détails.)
initial
: Applique le paramètre par défaut de la propriété, à savoirnormal
.inherit
: Adopte la valeur de l'écart du parent.unset
: Supprime le courantgap
de l'élément.
Pourcentages dans les propriétés de l'écart
Lorsque la taille d'un conteneur dans la dimension d'espace est définie, gap
résout les pourcentages par rapport à la taille de la zone de contenu du conteneur dans tous les types de mise en page.
![](8489426/gap_css-tricks.jpg.webp)
![](8489426/gap_css-tricks.jpg.webp)
En d'autres termes, lorsque le navigateur connaît la taille du conteneur, il peut calculer la valeur en pourcentage du gap
. Par exemple, lorsque la hauteur du conteneur est de 100px et que le gap
est défini sur 10%, le navigateur sait que 10% de 100px équivaut à 10px.
Mais lorsque le navigateur ne connaît pas la taille, il se demandera "10% de quoi?" Dans ces cas, gap
se comporte différemment en fonction du type de mise en page.
Dans une disposition en grille, les pourcentages sont résolus par rapport à zéro pour déterminer les contributions de taille intrinsèque, mais résolus par rapport à la zone de contenu de l'élément lors de la présentation du contenu de la boîte, ce qui signifie qu'il mettra de l'espace entre les éléments mais que l'espace n'affectera pas la taille du conteneur.
Dans cette démo, la hauteur du conteneur n'est pas définie. Voyez ce qui se passe lorsque vous augmentez la gap
taille. Ensuite, définissez les gap
unités en pixels et réessayez:
Dans une mise en page flexible, les pourcentages sont résolus par rapport à zéro dans tous les cas, ce qui signifie que les espaces ne s'appliqueront pas lorsque la taille du conteneur n'est pas connue du navigateur:
Utilisation de la fonction calc () avec gap
Vous pouvez utiliser la calc()
fonction pour spécifier la taille du gap
mais, au moment de la rédaction de cet article, il n'y a pas de support pour cela sur Safari et iOS.
.flex-layout ( display: flex; gap: calc(5vh + 5px) calc(5vw + 5px); )
.grid-layout ( display: grid; grid-template-columns: repeat(3, 1fr); gap: calc(5vmin + 5px); )
Exemples
La gap
propriété est conçue pour être utilisée dans les mises en page grille, flex et multi-colonnes. Voyons quelques exemples.
Disposition de la grille
Dans la démo suivante, vous pouvez voir gap
être utilisé pour spécifier les propriétés row-gap
et column-gap
sur un conteneur de grille, définissant les gouttières entre les lignes de la grille et les colonnes de la grille, respectivement:
Disposition flexible
L'application d'un espace à l' axe principal d'un conteneur flexible indique l'espacement entre les éléments flexibles sur une seule ligne de la disposition flexible.
Voici column-gap
utilisé dans une direction de ligne:
Voici row-gap
utilisé dans une direction de colonne:
L'application gap
à l' axe transversal d'un conteneur flexible indique l'espacement entre les lignes flex de la disposition flexible.
Voici row-gap
dans une direction de ligne:
Voici column-gap
dans une direction de colonne:
Disposition multi-colonnes
column-gap
apparaît dans les mises en page à plusieurs colonnes pour créer des espaces entre les zones de colonne, mais notez que cela row-gap
n'a aucun effet puisque nous ne travaillons que dans des colonnes. gap
peut toujours être utilisé dans ce contexte, mais seul le column-gap
sera appliqué.
Comme vous pouvez le voir dans la prochaine démo, bien que la gap
propriété ait une valeur de 2rem, elle ne sépare les éléments que horizontalement au lieu des deux directions puisque nous travaillons en colonnes:
Plus vous en savez…
Il y a quelques points à noter à propos du travail avec l' gap
établissement.
C'est un bon moyen d'éviter les espacements indésirables
Avez-vous déjà utilisé des marges pour créer un espacement entre les éléments? Si nous ne faisons pas attention, nous pouvons nous retrouver avec un espacement supplémentaire avant et après le groupe d'éléments.
Pour résoudre ce problème, il faut généralement ajouter des marges négatives ou recourir à des pseudo-sélecteurs pour supprimer la marge d'éléments spécifiques. Mais l' gap
avantage d' utiliser des méthodes de mise en page plus modernes est que vous ne disposez que d'espace entre les éléments. La cruauté supplémentaire au début et à la fin n'est jamais un problème!
Mais, hé, si vous voulez avoir de l'espace autour des éléments lors de l'utilisation gap
, placez padding
le conteneur comme ceci:
.container ( display: flex; gap: 1rem; padding: 1rem; )
La taille de la gouttière n'est pas toujours égale à la valeur de l'écart
La gap
propriété n'est pas la seule chose qui peut mettre de l'espace entre les éléments. Les marges, les rembourrages justify-content
et align-content
peuvent également augmenter la taille de la gouttière et affecter la gap
valeur réelle .
Dans l'exemple suivant, nous définissons un 1em gap
mais, comme vous pouvez le voir, il y a beaucoup plus d'espace entre les éléments, causé par l'utilisation d'alignements distribués, comme justify-content
et align-content
:
Prise en charge du navigateur
Les requêtes de fonctionnalités sont généralement un bon moyen de vérifier si un navigateur prend en charge une propriété spécifique, mais dans ce cas, si vous vérifiez la gap
propriété dans flexbox, vous pouvez obtenir un faux positif car une requête de fonctionnalité ne fera pas la distinction entre les modes de disposition. En d'autres termes, il peut être pris en charge dans une mise en page flexible, ce qui donne un résultat positif, mais il n'est en fait pas pris en charge s'il est utilisé dans une mise en page en grille.
Disposition de la grille
C'EST À DIRE | Bord | Firefox | Chrome | Safari | Opéra |
---|---|---|---|---|---|
Non | 16+ | 61+ | 66+ | 12+ | 53+ |
Safari sur iOS | Opera Mobile | Navigateur Android | Chrome pour Android | Firefox pour Android |
---|---|---|---|---|
12+ | Non | 81+ | 84+ | 68+ |
Disposition de la grille avec des valeurs calc ()
C'EST À DIRE | Bord | Firefox | Chrome | Safari | Opéra |
---|---|---|---|---|---|
Non | 84+ | 79+ | 84+ | Non | 69+ |
Safari sur iOS | Opera Mobile | Navigateur Android | Chrome pour Android | Firefox pour Android |
---|---|---|---|---|
Non | Non | 81+ | 84+ | 68+ |
Disposition en grille avec valeur en pourcentage
C'EST À DIRE | Bord | Firefox | Chrome | Safari | Opéra |
---|---|---|---|---|---|
Non | 84+ | 79+ | 84+ | Non | 69+ |
Safari sur iOS | Opera Mobile | Navigateur Android | Chrome pour Android | Firefox pour Android |
---|---|---|---|---|
Non | Non | 81+ | 84+ | 68+ |
Disposition flexible
La spécification d'utilisation gap
avec flexbox est actuellement en état de brouillon de travail.
Ces données de support de navigateur proviennent de Caniuse, qui contient plus de détails. Un nombre indique que le navigateur prend en charge la fonctionnalité dans cette version et plus.
Bureau
Chrome | Firefox | C'EST À DIRE | Bord | Safari |
---|---|---|---|---|
84 | 63 | Non | 84 | TP |
Mobile / tablette
Chrome Android | Android Firefox | Android | Safari sur iOS |
---|---|---|---|
88 | 85 | Non | Non |
Disposition multi-colonnes
C'EST À DIRE | Bord | Firefox | Chrome | Safari | Opéra |
---|---|---|---|---|---|
Non | 84+ | 79+ | 84+ | Non | 69+ |
Safari sur iOS | Opera Mobile | Navigateur Android | Chrome pour Android | Firefox pour Android |
---|---|---|---|---|
Non | Non | 81+ | 84+ | 68+ |
Plus d'information
- Module d'alignement de boîtes CSS niveau 3
- Chrome atterrit un espace Flexbox (Ticket # 761904)
- État de la fonctionnalité CSS WebKit
En rapport
- Disposition de la grille
- Disposition Flexbox
- Disposition multi-colonnes