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>
1
2
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>
Span 2
1
Full width
AttributEffet
data-col-span="2" à "6"Occupe N colonnes
data-col-span="full"Toute la largeur
data-row-span="2" à "4"Occupe N lignes

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>
Large
Normal
Normal
Wide
Tall
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 personnalisé

Pour un contrôle fin du nombre de colonnes par breakpoint, nommez votre grille avec une classe CSS et ajoutez des media queries dans votre feuille de style :

<!-- HTML -->
<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>

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

Le créateur de grilles ci-dessous génère automatiquement ce CSS quand vous configurez le responsive.

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.