CSS Grid Lanes
(webkit.org)- Une nouvelle fonctionnalité CSS, Grid Lanes, a été introduite dans Safari Technology Preview 234 pour implémenter des layouts masonry sur le Web
- La propriété
display: grid-lanespermet de créer une grille responsive sans media queries, avec une définition flexible des colonnes viagrid-template-columns - La propriété
item-tolerancepermet d’ajuster la sensibilité du placement des éléments, afin d’atténuer les déséquilibres visuels dus aux différences de taille des contenus - Prise en charge à la fois en direction des colonnes et des lignes, avec un flux déterminé automatiquement selon la définition de
grid-template-columnsougrid-template-rows - Le CSS Working Group discute encore de certains noms de propriétés de détail, tandis que l’équipe WebKit mène la standardisation et l’implémentation en parallèle pour encourager les expérimentations des développeurs
Présentation de CSS Grid Lanes
- Grid Lanes est un nouveau mode d’affichage destiné à implémenter en CSS natif des layouts de type masonry sur le Web
- Il se configure avec
display: grid-lanes, en utilisant une syntaxe proche degrid grid-template-columns: repeat(auto-fill, minmax(250px, 1fr))permet de créer des colonnes flexibles d’une largeur minimale de 250px
- Il se configure avec
- La propriété
gapdéfinit l’espacement entre les éléments, avec une adaptation à toutes les tailles d’écran sans media queries - Expérimentation possible dans Safari Technology Preview 234, avec une page de démos proposée par WebKit
Fonctionnement de Grid Lanes
- Le navigateur place automatiquement chaque élément dans la colonne la plus proche du haut
- Comme avec Masonry.js, l’élément suivant est ajouté à la colonne actuellement la plus courte
- Lors de la navigation au clavier avec Tab, l’utilisateur peut parcourir horizontalement le contenu actuellement visible
- En cas de chargement de contenu en défilement infini, l’alignement automatique peut se faire sans JavaScript
Extensions de CSS Grid
- Variation de la taille des lanes : la syntaxe
grid-template-*permet d’alterner colonnes étroites et colonnes larges- Exemple :
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr) minmax(16rem, 2fr)) minmax(8rem, 1fr)
- Exemple :
- Prise en charge de l’extension d’éléments (
span)- Il est possible d’étendre certains éléments sur plusieurs colonnes (
grid-column: span 4, etc.) - Démo d’exemple : un layout de type article de journal
- Il est possible d’étendre certains éléments sur plusieurs colonnes (
- Placement explicite possible
- Exemple :
header { grid-column: -3 / -1; }pour fixer le header dans les dernières colonnes
- Exemple :
Changement d’orientation
- Prise en charge des layouts basés sur les colonnes (waterfall) comme sur les lignes (brick)
- Si
grid-template-columnsest défini, l’orientation en colonnes est choisie automatiquement ; sigrid-template-rowsest défini, l’orientation en lignes l’est aussi automatiquement
- Si
grid-auto-flow: normalest la valeur par défaut, avec une décision automatique selon l’orientation définie- Le CSS Working Group discute actuellement de la dénomination de propriétés de contrôle du flux (
grid-lanes-direction, etc.)- Les échanges ont lieu dans une issue GitHub de CSSWG-drafts
Ajuster la sensibilité du placement : item-tolerance
item-tolerancedétermine à quel point les différences de taille entre éléments sont distinguées strictement lors du placement- La valeur par défaut est
1em; toute différence inférieure est considérée comme une même hauteur - Plus la valeur est élevée, moins les éléments se déplacent latéralement ; plus elle est faible, plus on obtient un ajustement fin de la position
- La valeur par défaut est
- Du point de vue de l’accessibilité, il faut définir une valeur adaptée pour minimiser les sauts visuels lors de la navigation avec Tab
- Le nom de la propriété est actuellement
item-tolerance, mais il pourrait être remplacé parflow-toleranceoupack-tolerance
Exemples d’expérimentation et d’usage
- Plusieurs démos sont proposées dans Safari Technology Preview 234
- Galerie photo, article au format journal, site de musée, layout de méga-menu, etc.
- Exemple de code :
.container { display: grid-lanes; grid-template-columns: repeat(auto-fill, minmax(max-content, 24ch)); column-gap: 4lh; } - Utile non seulement pour les images, mais aussi pour les footers ou menus riches en liens
Prochaines étapes
- Le CSS Working Group poursuit la détermination des noms de propriétés restants
- L’équipe WebKit travaille en parallèle sur l’implémentation et la standardisation depuis la mi-2022
- Les développeurs sont encouragés à créer des démos et à participer aux retours
- Jen Simmons recueille les avis via Bluesky et Mastodon
- La syntaxe de base est désormais stabilisée, et prête à être utilisée dans de vrais projets
2 commentaires
Donc il faut utiliser séparément Grid-lanes pour Safari et grid pour Firefox. Harmonisez un peu ça avec les standards du Web, s'il vous plaît...
Avis sur Hacker News
Bravo à l’équipe Safari. Leur remontée soudaine tout en haut du classement Interop 2025 en octobre est vraiment impressionnante
J’espère que la fonctionnalité CSS Gap Decorations arrivera vite. J’en ai assez de devoir continuer à utiliser des bidouillages inutiles pour créer de jolies séparations entre les éléments d’un flex ou d’une grille
J’ai utilisé une mise en page Masonry sur un projet récent : les performances sont correctes, mais comme c’est basé sur l’absolute positioning, c’est assez bancal. Il faut connaître à l’avance le ratio d’aspect des objets et tout recalculer lors d’un redimensionnement. J’attends donc avec impatience une prise en charge native
Ces annonces sont intéressantes, mais il y a un côté comédie tragique. Comme Apple ne met pas à jour son navigateur en continu, il faut attendre longtemps avant de pouvoir réellement faire confiance à ces nouvelles fonctionnalités et les utiliser
Les mises en page Masonry sont jolies, mais je trouve qu’elles rendent plus difficile la perception d’ensemble des images
Je me demande pourquoi ils ne l’ont pas appelé Masonry. Cela dit, le nom grid-lanes est descriptif, donc facile à comprendre
Je me demande combien de temps il faudra aux LLM pour assimiler correctement cette nouvelle syntaxe CSS
Si je devais regarder une page web composée d’une grille de textes avec des tailles et positions arbitraires, je préférerais presque qu’on m’abatte
Image de démonstration d’une grille façon journal
Personnellement, je n’aime pas les mises en page en lanes. Il est difficile de parcourir tous les éléments d’une liste dans l’ordre, et le regard saute de haut en bas, ce qui provoque une forte fatigue cognitive
Je pense qu’Apple devrait permettre de télécharger Safari de manière fiable sur toutes les plateformes