Disposition de maçonnerie CSS native dans la grille CSS
Un Niveau 3 de la spécification CSS Grid a été publié en tant que brouillon de l'éditeur , ce niveau décrit une façon de faire la mise en page de maçonnerie en CSS. Dans cet article, je vais vous expliquer le projet de spécification, avec des exemples que vous pouvez essayer dans Firefox Nightly. Bien qu'il s'agisse d'une fonctionnalité que vous ne pourrez pas utiliser en production pour le moment, vos commentaires seraient précieux pour vous assurer qu'elle répond aux exigences que vous avez pour ce type de mise en page. Alors jetons un œil.
Qu'est-ce qu'une disposition de maçonnerie?
Une disposition de maçonnerie est celle où les éléments sont disposés les uns après les autres dans le sens en ligne. Lorsqu'ils passent à la ligne suivante, les éléments remontent dans les espaces laissés par les éléments plus courts de la première ligne. C'est similaire à une disposition de grille avec placement automatique, mais sans coller à une grille stricte pour les rangées.
L'exemple le plus connu de maçonnerie est sur Pinterest et vous entendrez parfois des gens se référer à la mise en page en tant que «mise en page Pinterest».
Il existe un certain nombre d'outils JavaScript pour vous aider à créer ce type de mise en page, comme celui de David DeSandro Plugin de maçonnerie .
Ne pouvons-nous pas déjà le faire en CSS?
Nous pouvons nous approcher d'une disposition de maçonnerie de plusieurs façons. Le moyen le plus proche d'obtenir l'apparence de ce type de mise en page est d'utiliser la mise en page multi-colonnes. Dans l'exemple ci-dessous, vous voyez quelque chose qui ressemble visuellement à une disposition de maçonnerie. Cependant, l'ordre des cases descend dans les colonnes. Par conséquent, si les premiers éléments ont la priorité la plus élevée (par exemple, s'il s'agissait de résultats de recherche), alors les premiers éléments apparents dans la rangée supérieure ne sont pas réellement ceux qui sont revenus en premier.
Lorsque les concepteurs ont vu la mise en page Grille pour la première fois, ils ont souvent pensé que l'auto-placement avec le mode d'emballage dense pouvait réaliser la maçonnerie. Bien que vous puissiez combler tous les espaces de cette manière, la mise en page est toujours une grille et il n'y a donc aucun moyen de faire remonter les éléments dans les espaces laissés par les éléments plus courts.
Par conséquent, pour réaliser la maçonnerie, il faut toujours JavaScript. Faire de la mise en page avec JavaScript – en particulier avec le grand nombre d'éléments qui bénéficient souvent de ce type de mise en page – ne fonctionnera jamais bien. J'ai initialement noté que les développeurs Web demandaient la fonctionnalité en janvier 2017 et même si j'ai quelques inquiétudes quant à savoir s'il s'agit vraiment d'une grille (et aussi du potentiel de problèmes d'accessibilité dus à la réorganisation du contenu)
La fonction de maçonnerie de la disposition de la grille
Ceci est une nouvelle spécification, donc les choses pourraient bien changer avant que cela ne soit disponible dans plus de navigateurs. Cependant, nous sommes dans une bonne position dans la mesure où il existe déjà une implémentation de Masonry dans Firefox. Obtenez une copie de Firefox Nightly et activez le drapeau layout.css.grid-template-masonry-value.enabled
dans about: config
pour jouer avec. Une fois que vous avez fait cela et que vous êtes revenu sur cette page en utilisant Firefox, toutes les démos fonctionneront.
Pour utiliser la disposition de maçonnerie, l'un de vos axes de grille doit avoir la valeur maçonnerie
. On appellera alors cet axe maçonnerie
l'autre axe aura des lignes ou des pistes de colonnes définies comme normales, ce sera l'axe de la grille. Le CSS ci-dessous crée une grille à quatre colonnes, avec les lignes définies sur maçonnerie
. Les éléments de maçonnerie seront affichés dans les quatre colonnes de mon axe de grille.
.container {
affichage: grille;
grille-modèle-colonnes: répéter (4, 1fr);
grid-template-rows: maçonnerie;
}
C'est tout ce que vous devez faire pour obtenir une disposition de maçonnerie simple. En utilisant Firefox, vous pouvez le voir dans l'exemple CodePen ci-dessous.
Nous pourrions nous arrêter là, cependant, en ajoutant de la maçonnerie dans CSS Grid signifie que nous pouvons nous attendre à ce que d'autres éléments de la grille fonctionnent même lorsque nous sommes dans une disposition en maçonnerie. Par conséquent, la spécification doit définir ces choses.
Comportement sur l'axe de la grille
L'axe qui a défini des traces se comporte exactement de la même manière qu'une grille régulière. Par conséquent, vous pouvez dimensionner les pistes, nommer les lignes et utiliser l'alignement de la même manière que vous le feriez dans une grille normale.
Vous pouvez également positionner des éléments en utilisant le placement basé sur des lignes sur cet axe. Ceux-ci seront placés en premier avant les éléments de maçonnerie. Dans l'exemple suivant, j'ai placé l'image avec une légende de 5 entre la ligne nommée box-start
et la ligne nommée box-end
. Les éléments de maçonnerie sont placés autour.
Il est également possible de franchir les voies normalement sur l'axe de la grille . Dans l'exemple suivant, j'ai quelques éléments qui ont une classe de paysage
. Ces éléments s'étendent sur deux pistes de colonne lorsqu'ils sont placés dans la disposition de maçonnerie.
Le masonry-auto-flow
propriété
La spécification de maçonnerie ajoute des propriétés supplémentaires à la disposition de la grille. La propriété masonry-auto-flow
n'est pas encore dans l'implémentation Firefox. Une fois implémentée, cette propriété vous donnera le contrôle sur le flux des éléments dans la disposition de la maçonnerie.
En utilisant masonry-auto-flow: next
placera l'élément à l'emplacement suivant sur l'axe de la grille plutôt que de l'emballage dans la colonne avec le plus d'espace comme cela se produit par défaut.
En utilisant maçonnerie-auto-flux: ordonné
la maçonnerie ignorera les éléments avec un emplacement défini et disposera les éléments en utilisant order -commande de document modifiée ; c'est-à-dire dans l'ordre dans lequel ils sont dans le document, sauf s'ils sont commandés avec la propriété order
.
Les propriétés justify-tracks
et align-tracks
propriétés [19659031] Ces propriétés fonctionnent dans une certaine mesure dans Firefox Nightly au moment de la rédaction. Ce sont des propriétés d'alignement supplémentaires pour les dispositions de maçonnerie. Si vous avez de la maçonnerie dans le sens du bloc, vous pouvez utiliser align-tracks
si vous avez de la maçonnerie dans le sens en ligne, utilisez justify-tracks
.
Si vous avez de l'espace supplémentaire dans votre conteneur de grille dans la dimension en cours de disposition en maçonnerie, vous découvrirez alors que les éléments s'alignent sur le début du conteneur. La valeur initiale de align-tracks
(dans notre cas, la maçonnerie étant créée pour les rangées) est start
.
Ces propriétés fonctionnent avec align-content
et justify-content
. Pour montrer comment, j'ai un exemple où le conteneur de grille a une hauteur de 200vh. J'ai défini la valeur align-tracks
sur end
.
Si align-content
est normal
(ce que ce sera si Je n'ai pas ajouté la propriété), alors les pistes de maçonnerie finiront au bout du conteneur.
Source link