Grid / Bento

Système de grille flexible et layouts bento via classes CSS et attributs data-*. Responsive par défaut, zéro dépendance.

Grille simple

Ajoutez la classe grid et définissez le nombre de colonnes avec data-cols :

<div class="grid" data-cols="3" data-gap="md">
  <div>Colonne 1</div>
  <div>Colonne 2</div>
  <div>Colonne 3</div>
</div>
Colonne 1
Colonne 2
Colonne 3

Colonnes

Attribut / ClasseColonnes
data-cols="1" ou grid--11 colonne
data-cols="2" ou grid--22 colonnes
data-cols="3" ou grid--33 colonnes
data-cols="4" ou grid--44 colonnes
data-cols="5" ou grid--55 colonnes
data-cols="6" ou grid--66 colonnes

Gap (espacement)

Attribut / ClasseEspacement
data-gap="none" ou grid--gap-none0
data-gap="xs" ou grid--gap-xsvar(--space-2)
data-gap="sm" ou grid--gap-smvar(--space-4)
data-gap="md" ou grid--gap-mdvar(--space-6) — défaut
data-gap="lg" ou grid--gap-lgvar(--space-8)
data-gap="xl" ou grid--gap-xlvar(--space-12) grille / var(--space-10) bento

Alignement vertical

AttributEffet
data-align="start"Aligné en haut
data-align="center"Centré verticalement
data-align="end"Aligné en bas
data-align="stretch"Étiré (défaut)

Span (items)

Un élément enfant peut occuper plusieurs colonnes ou lignes :

<div class="grid" data-cols="3">
  <div data-col-span="2">Je prends 2 colonnes</div>
  <div>1 colonne</div>
  <div data-col-span="full">Toute la largeur</div>
</div>
Je prends 2 colonnes
1 colonne
Toute la largeur
AttributEffet
data-col-span="2" à "6"Occupe N colonnes
data-col-span="full"Toute la largeur
data-row-span="2" à "4"Occupe N lignes

Exemple concret : dans une grille de 3 colonnes, data-col-span="2" fait qu'un élément prend 2 colonnes sur 3 (les ⅔ de la largeur). data-row-span="2" le fait prendre 2 rangées de hauteur.

Bento

Le système bento est une grille 4 colonnes avec des tailles prédéfinies pour créer des layouts asymétriques rapidement :

<div class="bento" data-gap="md">
  <div class="bento__item" data-size="large">Grande carte</div>
  <div class="bento__item">Normal</div>
  <div class="bento__item">Normal</div>
  <div class="bento__item" data-size="wide">Large</div>
  <div class="bento__item" data-size="tall">Haute</div>
  <div class="bento__item">Normal</div>
</div>
Grande carte
Normal
Normal
Large
Haute
Normal

Tailles prédéfinies

AttributEffet
(aucun)1 colonne, 1 ligne
data-size="wide"2 colonnes, 1 ligne
data-size="tall"1 colonne, 2 lignes
data-size="large"2 colonnes, 2 lignes
data-size="full"Toute la largeur

Pour un contrôle plus fin, utilisez data-col-span et data-row-span directement sur les .bento__item.

Hauteur des lignes

AttributHauteur minimum
data-row-height="sm"120px
data-row-height="md"180px (défaut)
data-row-height="lg"240px
data-row-height="xl"320px

Layouts prédéfinis

Des layouts courants sont disponibles via data-layout :

LayoutDescription
data-layout="sidebar"2/3 + 1/3 (contenu + sidebar droite)
data-layout="sidebar-left"1/3 + 2/3 (sidebar gauche + contenu)
data-layout="feature"1 grande carte à gauche + 2 petites empilées à droite
<!-- Layout feature : 1 grande + 2 petites -->
<div class="bento" data-layout="feature" data-gap="md">
  <div class="bento__item">Mise en avant</div>
  <div class="bento__item">Détail 1</div>
  <div class="bento__item">Détail 2</div>
</div>
Mise en avant
Détail 1
Détail 2

Responsive

Toutes les grilles s'adaptent automatiquement selon 4 breakpoints :

BreakpointRangeGrille
Desktop≥ 992pxToutes les colonnes
Tablette≤ 991px5-6 cols → 3, bento → 3 colonnes
Mobile landscape≤ 767px3-6 cols → 2, bento → 2 cols, layouts → 1 col
Mobile≤ 478pxTout passe en 1 colonne

Les spans trop larges pour l'écran sont automatiquement réduits.

Responsive via data attributes

Pour contrôler le nombre de colonnes par breakpoint sans CSS, utilisez les attributs data-cols-tab, data-cols-mob-l et data-cols-mob :

AttributBreakpointRange
data-colsDesktop>= 992px
data-cols-tabTablette<= 991px
data-cols-mob-lMobile paysage<= 767px
data-cols-mobMobile<= 478px
<div class="grid" data-cols="4" data-cols-tab="2" data-cols-mob="1" data-gap="md">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
  <div>Item 4</div>
</div>

Les breakpoints héritent : si data-cols-mob n'est pas défini, il utilise la valeur de data-cols-mob-l, puis data-cols-tab, puis data-cols.

Le créateur de grilles génère automatiquement ces attributs quand vous configurez le responsive.

Responsive personnalisé (CSS)

Pour un contrôle encore plus fin (spans par item, layouts complexes), nommez votre grille et ajoutez des media queries :

<div class="grid grid-services" data-cols="4" data-gap="md">
  <div>Service 1</div>
  <div>Service 2</div>
  <div>Service 3</div>
  <div>Service 4</div>
</div>

<style>
@media (max-width: 991px) {
  .grid-services { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 478px) {
  .grid-services { grid-template-columns: 1fr; }
}
</style>

Inclure dans une page

<link rel="stylesheet" href="core/css/grid.css">

Aucun JavaScript nécessaire. Tout fonctionne en CSS pur.

Problèmes courants

  • Les colonnes ne s'affichent pas côte à côte : vérifiez que grid.css est bien chargé. L'attribut data-cols définit le nombre de colonnes.
  • Le bento est tout en une colonne : la grille bento passe à 1 colonne sous 478px. Testez sur un écran plus large ou réduisez le nombre de colonnes.
  • Un item déborde de la grille : un data-col-span supérieur au nombre de colonnes disponibles provoque un débordement. Le span est réduit automatiquement en responsive.

Créateur de grilles

Configurez visuellement vos layouts grille et bento, puis copiez le code généré. Le code utilise les attributs data-* du framework et fonctionne immédiatement avec grid.css.

Constructeur de grilles — colonnes, espacement et aperçu

Fonctionnalités

  • Deux modes : Grille flexible (nombre de colonnes libre, spans personnalisés) et Bento (tailles prédéfinies, layouts).
  • Responsive complet : nommez votre grille pour activer la barre de breakpoints et configurer colonnes et spans par breakpoint.
  • Aperçu adaptatif : la preview change de largeur selon le breakpoint sélectionné (Desktop = 100%, Tablette = 768px, Mobile L = 480px, Mobile = 375px).
  • Sortie HTML + CSS : le code généré inclut le HTML et, si un nom est défini, le CSS responsive complet avec media queries.

Barre de breakpoints

Dès qu'un nom de grille est renseigné (ex : grid-services), une barre de breakpoints style Webflow apparaît avec 4 niveaux :

BreakpointSeuilLargeur de preview
Desktop100%
Tablette≤ 991px768px
Mobile L≤ 767px480px
Mobile≤ 478px375px

Cliquez sur un breakpoint pour configurer le nombre de colonnes et les spans à ce niveau. Les breakpoints inférieurs héritent automatiquement des valeurs du breakpoint supérieur (système de cascade). Un bouton Auto permet de rétablir l'héritage si une valeur a été personnalisée.

Nom de la grille et classes auto

Quand un nom est défini, le créateur génère des classes CSS automatiques pour chaque item :

<!-- Avec nom "grid-services" -->
<div class="grid grid-services" data-cols="4">
  <div class="grid-services__item-1">Contenu 1</div>
  <div class="grid-services__item-2">Contenu 2</div>
  <div class="grid-services__item-3">Contenu 3</div>
  <div class="grid-services__item-4">Contenu 4</div>
</div>

Sans nom, le comportement classique avec data-col-span / data-row-span est utilisé.

CSS responsive généré

Le bloc CSS inclut les media queries complètes :

  • Desktop : les spans sont définis en CSS sans media query.
  • Breakpoints non-desktop : chaque niveau génère une @media (max-width: ...) avec le grid-template-columns et les spans par item.
/* Exemple de CSS généré */
/* Desktop */
.grid-services__item-1 {
  grid-column: span 2;
}

/* Tablette */
@media (max-width: 991px) {
  .grid-services {
    grid-template-columns: repeat(2, 1fr);
  }
  .grid-services__item-1 {
    grid-column: span 2;
  }
}

/* Mobile */
@media (max-width: 478px) {
  .grid-services {
    grid-template-columns: 1fr;
  }
}

Utilisation du créateur

  1. Choisissez le mode : Grille flexible ou Bento.
  2. (Grille) Renseignez un nom de grille pour activer le responsive personnalisé.
  3. Configurez les options globales (colonnes, gap, alignement).
  4. Si un nom est défini, naviguez entre les breakpoints pour ajuster colonnes et spans.
  5. Cliquez sur un item dans l'aperçu pour modifier son col-span et row-span (les valeurs héritées sont signalées par une bordure en pointillés).
  6. Copiez le code HTML et le CSS responsive générés.

Ouvrir le constructeur Grilles dans le configurateur →

Voir aussi