6 CSS Bento Grid Layouts
6 CSS bento grid layouts for the exact use cases developers build them for — an Apple keynote-style product feature showcase, a SaaS value-prop matrix, an analytics dashboard overview, a creative portfolio one-screen resume, an e-commerce category hub, and a mobile-first link-in-bio social hub. Scoped under .bgl-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.
Related15 CSS Card Grid Layouts30 CSS Grid Layouts31 CSS Hero Sections15 Tailwind Card Grid Layouts
Course pickPartner: Zero to Mastery
Affiliate linkWant to build responsive CSS Grid layouts from scratch?
You just browsed 6 CSS bento grid layouts. Learn Grid properly: templates, named areas, placement and alignment, so every layout starts in your head, not in a copy-paste.
Every ZTM course in one membership: $25/month, paid yearly at $299 · 30‑day money-back guarantee
Fundamentals of CSS Grid. We may earn a commission, at no extra cost to you.
02. SaaS Feature Value-Prop Matrix (opens in a new tab)
03. Analytics Dashboard Overview (opens in a new tab)
04. Creative Portfolio Bento Grid (opens in a new tab)
05. E-commerce Bento Category Hub (opens in a new tab)
06. Link-in-Bio Social Hub (opens in a new tab)
Frequently asked questions
What is a bento grid layout and why did it become the dominant marketing feature-grid pattern?
How do I build a CSS bento grid layout without any framework — just raw CSS Grid?
display: grid; grid-template-columns: repeat(12, 1fr); grid-auto-rows: minmax(150px, auto); gap: 16px. The 12-column track is standard because it factors cleanly into 1, 2, 3, 4, 6, and 12 — every span you might want is expressible without fractional columns. Second, on the hero card apply grid-column: span 8; grid-row: span 2 to make it occupy a 2×8 area at the top-left; smaller stat cards get grid-column: span 4 and take their default single-row height. Third, on mobile swap the grid to grid-template-columns: 1fr so every tile stacks vertically full-width. That's the entire bento pattern in three rules — no grid-template-areas string needed, no JavaScript, no framework. Demo 01 (Apple-Style Product Feature Showcase) ships this exact recipe with a conic-gradient border sweep on hover using registered @property --a (Chrome 85+, Safari 16.4+, Firefox 128+). For sites that need to support pre-container-query browsers, swap @container (max-width: 880px) for @media (max-width: 880px) — the inner rules are identical.Which topic maps to which real-world SaaS / e-commerce / creator use case?
:has() and zero JavaScript. Every topic is hand-coded CSS — copy the HTML + CSS panels, drop them into any stack, ship.How do these bento grids stay Core Web Vitals safe — CLS 0, INP-friendly, no jank?
Cumulative Layout Shift stays 0. Cards that animate their appearance on hover animate transform, opacity, and filter only — never width, height, margin, or padding in the containing-block sense — because those trigger the layout + paint pipeline on every frame and destroy Interaction to Next Paint scores on mid-tier mobile hardware. Second, container queries over media queries — every topic uses container-type: inline-size on the section root and @container rules to switch spans. The advantage over @media is that the layout responds to the grid's OWN width, not the viewport, so the same bento drops into a narrow sidebar without breaking. Chrome 105+, Safari 16+, Firefox 110+ support this natively — for older browsers the @container rules degrade to viewport-based @media queries with a 1-line swap documented in every demo's customization notes. Third, GPU-composited borders — the conic-gradient border sweep uses a registered @property --a angle driving a ::before ring cut into a 1px frame with mask-composite: exclude. It's pure compositor work: no layout, no paint of the underlying tile, only the ring texture rotates. On a mid-tier Android device this stays well under Google's 200ms INP threshold even with all 6 topics rendering on one gallery page.How do these bento grids meet WCAG 2.2 accessibility — asymmetric layouts are famously hard to get right for screen readers?
<section aria-labelledby> with a single <h2> per section and <article> for individual tiles. Interactive tiles use real <a> for navigation and real <button> for actions — not <div role='button'>. That means screen readers announce landmark structure correctly, TAB order follows DOM order (which follows visual reading order because the grid is defined by CSS spans over the natural DOM sequence), and every focusable tile ships a :focus-visible ring at 3px outline with 3px offset — the WCAG 2.4.7 requirement most bento templates skip. Second, motion — every animated variant respects @media (prefers-reduced-motion: reduce) with an appropriate calm-down block: the hover border sweep stops rotating, cursor-tracked spotlights disable pointer-following, and the sale-banner gradient animation freezes. Third, contrast — text sits on solid tile backgrounds (never on a translucent surface where the underlying content dictates contrast), and hero-tile display type stays above WCAG 1.4.3 AA (4.5:1 for normal, 3:1 for large). Every touch target hits the WCAG 2.5.5 44×44px minimum, so bento tiles remain usable one-handed on mobile. This is the accessibility floor Section 508 (US federal procurement), EN 301 549 (EU / DE public sector), AODA (Ontario), DDA (Australia), and the European Accessibility Act (June 2025) all require.What's the browser support story — container queries, @property, mask-composite, :has()?
@supports fallback so older browsers get a working version, not a broken one. Container queries (@container) — Chrome 105+, Safari 16+, Firefox 110+. Every topic uses container-type: inline-size so grids reflow by their own width instead of the viewport. Browsers without container query support fall back to viewport-based @media queries — the inner rules are identical, only the container name changes. Registered @property typed custom properties — Chrome 85+, Safari 16.4+, Firefox 128+. Used in Topic 01 (conic border sweep angle) and Topic 04 (cursor spotlight position). Without @property support the border ring still renders — it just doesn't rotate. :has() — Chrome 105+, Safari 15.4+, Firefox 121+. Used in Topic 06 (Link-in-Bio) to drive the dark-mode toggle state from a sibling checkbox without JavaScript. mask-composite: exclude for the border-ring pattern — Chrome 120+ standardized, Safari 15.4+, Firefox 120+. The one-line fallback is a solid border. backdrop-filter — Chrome 76+, Safari 14+ (with -webkit- prefix), Firefox 103+. Every glass surface includes the -webkit-backdrop-filter fallback. Tier-1 (US / UK / CA / AU / DE / NZ) traffic on evergreen browsers gets the full experience; the long tail on IE-era enterprise browsers gets the graceful degrade.How do these compare to Tailwind's grid utilities, shadcn bento, Aceternity UI bento, and Tremor dashboards — why not just use one of those?
grid grid-cols-12 gap-4) are excellent and this collection's demos map cleanly to Tailwind arbitrary values — but they don't ship the bento composition itself; you still have to write the span logic per tile. License and cost — Aceternity Pro is $299+/year for their full bento collection. Magic UI Pro is a subscription. shadcn is free but ties you to their dependency tree. Every demo here is MIT licensed, free forever, no attribution required (though a link back is always appreciated). Accessibility floor — many React bento libraries treat semantics as an afterthought. Every demo here ships with keyboard navigation, focus-visible rings, aria-current / aria-live where state changes, aria-label on icon-only controls, prefers-reduced-motion guards, and passes WCAG 2.2 SC 1.4.3 AA on realistic content. If you're already on React and don't need the accessibility floor or the zero-bundle guarantee, Aceternity is a reasonable choice for prototyping. This collection specifically serves the case where you want the bento aesthetic without the React wrapper, without the subscription cost, and without the WCAG shortcuts.Are these free to use in commercial projects, and do they work in React, Vue, Svelte, Next.js, Astro, and SvelteKit?
className instead of class), a Vue single-file component's template, a Svelte component, an Astro island, or a SvelteKit page — the CSS ships as a scoped module, an inline <style> block, or a Tailwind arbitrary-value paste. Server-side rendering — every demo renders correctly on the server without hydration flash. Topics that ship with vanilla JS handlers (Topic 02 cursor spotlight, Topic 03 dashboard interactions, Topic 04 portfolio widget) use plain event listeners with AbortController for cleanup or are pure event delegation — safe for React StrictMode double-mount. Content-Security-Policy — demos with strict CSP (script-src 'self' without 'unsafe-inline') work by default because no demo uses inline onclick handlers; the JS runs from external files that the CSP allowlist can permit. Vue 3 v-model bindings work on the demos with form controls (link-in-bio dark-mode toggle, e-commerce filters). Angular, Blazor, HTMX, Turbo, Rails ERB, Django, and Laravel Blade all work — the HTML + CSS + JS is framework-agnostic. If you're on Tailwind, the CSS ports cleanly: grid-cols-12, col-span-8, row-span-2, gap-4, and arbitrary values like [grid-template-columns:repeat(12,1fr)] cover most of the utility mapping; SVG filters, container queries, and named keyframes belong in tailwind.config.js under extend.keyframes + extend.animation.Related collections
15 CSS Aspect Ratio Demos
15 hand-coded CSS aspect-ratio demos for video embeds, product galleries, IAB ad slots, native dialogs, and CLS-safe placeholders: 16:9 iframe YouTube embed with click-to-load facade + up-next rail, 21:9 full-screen hero video with min-height/max-height:100svh guardrails + Ken Burns drift, 1:1 Instagram-style square grid with 2×2 feature tile, 4:3 magazine card image cover, 9:16 vertical stories rail (TikTok/Reels/Shorts pattern) with scroll-snap + segment bars, 4:5 apparel product image gallery with radio-driven state + 1:1 thumbnails, 1:1 zoom thumbnail carousel with pointer-tracked --zx/--zy magnifier, prevent-layout-shift placeholder with live PerformanceObserver CLS meter (before/after side-by-side lab), dynamic content fallback with three policies (bend/strict/auto) via :has() toggle, IAB ad banner slots (728×90 leaderboard, 300×250 medium rectangle, 300×600 half-page, 320×50 mobile) with skeletons + container-query mobile swap, responsive modal dialog sized min(92vw, 88svh×16/9, 1080px) with @starting-style animation, responsive OpenStreetMap iframe wrapper with 16:9 → 1:1 container-query narrow swap, media query orientation live HUD + resize:both container-ratio playground, object-fit logo cloud with contain/cover/fill switcher via :has(), and side-by-side padding-top hack (height:0 + padding-top:56.25%) → modern aspect-ratio migration comparison with live ratio picker. 11 truly Pure CSS + 4 with a tiny optional vanilla JS snippet (facade swap, pointer magnifier, CLS meter, native dialog). Every demo is scoped under a unique .car-NN prefix so it drops into any project without CSS collisions, ships prefers-reduced-motion guards, and is framework-agnostic (works as-is in React, Vue, Svelte, Astro, Next.js, Remix, or plain HTML).
20 CSS Blog Layouts
20 hand-coded CSS blog and editorial layouts for magazine homepages, news sites, personal archives, newsletter back-issues, recipe and podcast blogs, developer tutorials, and long-form journalism. Covers a magazine homepage with hero plus editor-picks rail, a news homepage with breaking-news ticker, blog archives with sticky year separators, Substack-style issue-numbered archives, recipe card grids with prep-time badges, podcast episode lists with waveforms, long-form articles with scroll-driven reading progress, drop caps and floated pull quotes via first-letter, Medium-style 65ch centred reader layouts, dev tutorials with a sticky code panel beside prose, interview transcripts with alternating speakers, case-study pages with stat counters, video blogs with an episode rail, full-bleed photo essays, news articles with sticky related-stories sidebars, documentation pages with prev/next chapter nav, a standalone blog post card, a scroll-snap category filter bar, an inline newsletter callout that breaks out of the prose column, and a horizontal featured-post rail. 12 are pure CSS with zero JavaScript. Every layout is scoped under a .bl-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.
15 CSS Card Grid Layouts
Card grids for blog archives, SaaS dashboards, pricing pages, and product catalogs, plus editorial and bento layouts. Covers auto-fit grids that add and drop columns via repeat(auto-fill), asymmetric Apple-style bento boxes, Pinterest-style fluid masonry, equal-height product cards, KPI dashboard tiles, three-tier pricing comparisons, testimonial walls, team directories, 3D hover flip cards, and glass bento tiles.





