Liquid

Un gabarit responsive en Grid Layout

Liquid est un agencement CSS Grid Layout. Il permet de gérer facilement des éléments qui s'étendent sur toute la largeur de la page (appelés full-bleed, breakout, hero ou splash), tout en maintenant un contenu principal centré et lisible.

Fonctionnalités

Un élément avec data-layout="splash" s'étend sur toute la largeur.

Son contenu interne reste aligné avec la zone de contenu principale.

Les variantes data-layout="splash-start" et data-layout="splash-end" permettent de positionner des éléments qui s'étendent sur une partie de la largeur de la page, en partant des bords.

Un élément avec data-layout="splash-start" s'étend du bord gauche jusqu'à la fin de la zone de contenu. Son contenu interne reste aligné avec la zone de contenu principale.

Un élément avec data-layout="splash-end" s'étend du début de la zone de contenu jusqu'au bord droit. Son contenu interne reste aligné avec la zone de contenu principale.

Les variantes data-layout="splash-half-start" et data-layout="splash-half-end" permettent de positionner des éléments sur une moitié de la page.

Un élément avec data-layout="splash-half-start" s'étend du bord gauche jusqu'au milieu de la page.

Un élément avec data-layout="splash-half-end" s'étend du milieu de la page jusqu'au bord droit.

une image aléatoire
/* Liquid */
[data-layout*="liquid"] {
  --liquid-min-margin: var(--spacing-16, 1rem);
  --liquid-content: var(--spacing-2xl, 1280px);

  display: grid;
  grid-template-columns:
    [liquid-start] minmax(var(--liquid-min-margin), 1fr)
    [content-start] minmax(0, calc(var(--liquid-content) / 2))
    [half] minmax(0, calc(var(--liquid-content) / 2))
    [content-end] minmax(var(--liquid-min-margin), 1fr)
    [liquid-end];

  :where(& > *) {
    grid-column: content;
  }
}

Comment ça marche ?

Pour bien visualiser, activez l'affichage de la grille via la case à cocher en bas de page.

Le système repose sur une grille CSS (display: grid) composée de quatre colonnes principales. Les lignes de séparation entre ces colonnes sont nommées pour faciliter le positionnement des éléments enfants :

Par défaut, les enfants directs du conteneur [data-layout="liquid"] se placent dans la zone de contenu (entre content-start et content-end). Les attributs spécifiques (data-layout="splash", data-layout="splash-start", etc.) utilisent la propriété grid-column pour indiquer sur quelles lignes de la grille elles doivent s'étendre. Par exemple, [data-layout="splash-start"] {grid-column: liquid-start / content-end;} signifie que l'élément commencera sur la ligne liquid-start et se terminera sur la ligne content-end.

Ressources

minmax(var(--liquid-spacer), 1fr) minmax(var(--liquid-spacer), 1fr)
minmax(auto, calc(var(--liquid-content) / 2)) minmax(auto, calc(var(--liquid-content) / 2))