Cartes✨ Premium

Bento with Images

Grille CSS asymétrique 4×3 avec six cellules à fond dégradé et overlay de texte glissant qui s'active au survol.

CSSImagesOverlay

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Cartes comprend 41 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Portfolio créatif — navigation par discipline — Bento with Images exemple 1

① Portfolio créatif — navigation par discipline

QuandLa page d'accueil d'un studio ou d'un freelance présente ses domaines d'expertise sous forme de grille visuelle.
PourquoiLes cellules de tailles inégales créent une hiérarchie sans texte supplémentaire ; l'overlay révèle le label au survol — l'image ou le dégradé reste le sujet principal.
Réglages6 cellules, gap 12 px, cell-1 en 2×2 pour la discipline phare ; background-image: url(…) par cellule (background-size: cover déjà présent) ; overlay rgba(0,0,0,0.45) ; transition 0,4 s.
SaaS landing — grille de fonctionnalités — Bento with Images exemple 2

② SaaS landing — grille de fonctionnalités

QuandUne section de page de vente présente 6 fonctionnalités clés du produit sous forme de tuiles colorées.
PourquoiLa cellule 2×2 met en avant la feature principale ; les dégradés par couleur identifient chaque catégorie ; l'overlay au survol livre la description sans alourdir le layout au repos.
RéglagesDégradés remplacés par couleurs brand (indigo pour IA, vert pour sécurité) ; overlay rgba(0,0,0,0.55) pour la lisibilité ; --radius-lg: 1rem pour des coins plus doux ; gap 16 px.
Magazine en ligne — grille de rubriques — Bento with Images exemple 3

③ Magazine en ligne — grille de rubriques

QuandLa une d'un site éditorial présente 6 rubriques thématiques avec une vignette photo par catégorie.
PourquoiLa grille asymétrique rompt la monotonie des listes d'articles ; l'overlay glissant attire l'œil sur la rubrique survolée sans masquer les photos de fond.
RéglagesCellules dans des <a href> ; background-image par rubrique ; gap réduit à 8 px pour un aspect magazine serré ; overlay rgba(0,0,0,0.35) pour laisser davantage transparaître les photos.

Comment ça marche

La mise en page repose sur un CSS Grid 4×3 (4 colonnes, 3 rangées) dans lequel six cellules occupent des surfaces inégales grâce à grid-area: span N / span M — la cellule principale couvre 2×2, d'autres s'étirent sur 1 ou 2 colonnes. Aucun calcul de largeur manuel n'est nécessaire : le navigateur répartit l'espace automatiquement via repeat(4, 1fr).

Chaque cellule porte un dégradé linéaire 135° unique défini dans les sélecteurs .cell-1 à .cell-6 (violet-indigo, rose-rouge, bleu-cyan, vert-turquoise, rose-jaune, lavande-rose). La propriété background-size: cover est déjà en place sur .bento-images .bento-cell, ce qui permet de remplacer les dégradés par de vraies images sans toucher à la structure.

L'overlay est un <div class="overlay"> en position: absolute; inset: 0, fond rgba(0,0,0,0.4) et opacity: 0 au repos. Le sélecteur .bento-images .bento-cell:hover .overlay porte l'opacité à 1 en 0,4 s de transition CSS. L'effet est 100 % CSS : aucun écouteur d'événement JavaScript ne gère ce hover.

Le <span> à l'intérieur de l'overlay démarre à transform: translateY(20px) et glisse vers translateY(0) au hover via transition: transform 0.4s — le label surgit du bas de la cellule en même temps que l'overlay s'assombrit.

Accessibilité

  • prefers-reduced-motion absent : le code ne contient pas de @media (prefers-reduced-motion: reduce) — les transitions opacity et translateY (0,4 s) s'exécutent même si l'OS demande à réduire le mouvement. Ajoutez un bloc @media (prefers-reduced-motion: reduce) { .bento-images .bento-cell .overlay, .bento-images .bento-cell .overlay span { transition: none !important; } } pour se conformer à WCAG 2.3.3.
  • Contraste du texte overlay : blanc sur fond rgba(0,0,0,0.4) au-dessus d'un dégradé → ratio ≥ 4,5:1 dans tous les cas — conforme WCAG AA.
  • Navigation clavier : les cellules ont cursor: pointer mais aucun tabindex ni gestionnaire clavier — l'overlay ne s'active pas avec Tab/Entrée. Ajoutez tabindex="0" et une règle :focus-within .overlay si les cellules doivent être atteignables.
  • Aucun attribut ARIA sur la grille ou les cellules (ni role, ni aria-label). Si les cellules servent de liens ou boutons, enveloppez-les dans des <a> ou <button> et ajoutez des libellés accessibles.
  • Les textes des overlays (Design, Photo…) sont dans le flux DOM normal et lisibles par les lecteurs d'écran sans configuration ARIA supplémentaire — ils ne sont masqués que visuellement par opacity: 0.

Compatibilité navigateur

Nécessite CSS Grid Level 1 et la pseudo-classe :hover — supportés universellement depuis 2017.

Chrome 57+✓ Complet
Firefox 52+✓ Complet
Safari 10.1+✓ Complet
Edge 16+✓ Complet
Mobile iOS 10.3+✓ Tap OK
Android Chrome✓ Complet

Sans CSS Grid (IE 10 non supporté), les cellules s'empilent verticalement en blocs pleine largeur — le contenu reste lisible. Sur écrans tactiles, le :hover ne se déclenche pas ; l'overlay reste caché. Ajoutez un gestionnaire touchstart ou une règle :focus-within pour basculer l'overlay au tap.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="bento-container">
  <div class="bento-grid bento-images">
    <div class="bento-cell cell-1"><div class="overlay"><span>Design</span></div></div>
    <div class="bento-cell cell-2"><div class="overlay"><span>Photo</span></div></div>
    <div class="bento-cell cell-3"><div class="overlay"><span>Video</span></div></div>
    <div class="bento-cell cell-4"><div class="overlay"><span>3D</span></div></div>
    <div class="bento-cell cell-5"><div class="overlay"><span>Motion</span></div></div>
    <div class="bento-cell cell-6"><div class="overlay"><span>Art</span></div></div>
  </div>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
--radius-lg 0.75rem Rayon des coins de toutes les cellules. 0 = angles francs, 1.5rem = cases très arrondies.
--border rgba(255,255,255,0.08) Couleur de la bordure de chaque cellule. Augmentez l'alpha ou changez la couleur pour marquer davantage la séparation.
gap (sélecteur .bento-grid) 12px Espacement entre cellules. 8 px = aspect magazine serré, 20 px = layout aéré.
Dégradés .cell-1 à .cell-6 6 dégradés 135° distincts Chaque sélecteur porte un background: linear-gradient(…) indépendant. Remplacez-le par background-image: url(…) pour de vraies photos — background-size: cover est déjà en place.
overlay background (sélecteur .overlay) rgba(0,0,0,0.4) Opacité et couleur du voile au survol. Augmentez l'alpha pour une meilleure lisibilité sur fonds clairs, diminuez-le pour laisser transparaître davantage le fond.
transition durée (sélecteur .overlay) 0.4s Durée de l'apparition de l'overlay. 0.2 s = réactif et vif, 0.7 s = fondu doux.
translateY initial (sélecteur .overlay span) translateY(20px) Décalage initial du texte avant le survol. Augmentez à 40 px pour un glissement plus marqué, passez à translateX pour une direction latérale.

FAQ

Oui. La propriété background-size: cover est déjà présente sur .bento-images .bento-cell. Remplacez simplement background: linear-gradient(…) par background-image: url(votre-image.jpg) dans chaque sélecteur .cell-N — aucune autre modification nécessaire.
Oui, entièrement. L'overlay et le glissement du texte sont gérés par des transitions CSS pures (:hoveropacity + transform). Le JS inclus dans l'effet gère d'autres variantes Bento (animated, interactive, stats) et ne touche aucune cellule .bento-images.
Modifiez grid-template-columns et grid-template-rows dans le sélecteur .bento-images, puis ajustez les grid-area: span N / span M dans .cell-1 à .cell-6. Pour 5 cellules, supprimez .cell-6 et redistribuez les spans pour remplir la grille sans case vide.