SolutionsCase StudiesAI ToolsResourcesAboutContact
Get Your Free AI Automation Audit Book a Free 30-Minute Strategy Call
Playground~/frontend Open editor

~/css/bento-grids

7 CSS Bento Grid Layouts

7 Pure CSSPublished 2026-10-05Free · no sign-up

Seven bento box layouts: the classic mix of big and small tiles, a product feature section, a link-in-bio page, key numbers as tiles, dark tiles with coloured glows, a bento described with named grid areas and clickable tiles that lift on hover.

01. Classic Four-Column Bento

BentoGrid

The bento box grid: one large tile, a tall one and several small ones in a four-column grid, each tile placed with column and row spans. Under 440px of container width it collapses to two columns with the spans reduced, so no tile is ever squeezed.

View code
<div class="bt1"><ul><li class="a">Big idea</li><li class="b">Tall</li><li>Small</li><li>Small</li><li class="c">Wide</li></ul></div>
.bt1 { width: 600px; max-width: 100%; container-type: inline-size; font: 700 14px Inter, system-ui, sans-serif; }
.bt1 ul { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 80px; gap: 8px; margin: 0; padding: 0; list-style: none; }
.bt1 li { display: grid; place-items: center; border-radius: 16px; background: #f2f4f7; color: #344054; }
.bt1 .a { grid-column: span 2; grid-row: span 2; background: #101828; color: #fff; }
.bt1 .b { grid-row: span 2; background: #f4ebff; color: #53389e; }
.bt1 .c { grid-column: span 2; background: #ecfdf3; color: #054f31; }
@container (min-width: 440px) { .bt1 ul { grid-template-columns: repeat(4, minmax(0, 1fr)); } .bt1 .c { grid-column: span 2; } }

02. Product Feature Bento

BentoFeatures

A product page section where each tile explains one feature with a heading, a line of text and a small visual. Tiles have different spans to give the main feature more room, and they are list items in reading order.

View code
<div class="bt2"><ul><li class="big"><h3>Offline first</h3><p>Everything works on a plane.</p><span class="vis" aria-hidden="true"></span></li><li><h3>Sync</h3><p>Instant across devices.</p></li><li><h3>Encrypted</h3><p>Only you hold the key.</p></li><li class="wide"><h3>Share links</h3><p>Send a read-only link in a click.</p></li></ul></div>
.bt2 { width: 600px; max-width: 100%; container-type: inline-size; font: 13px/1.45 Inter, system-ui, sans-serif; }
.bt2 ul { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.bt2 li { padding: 16px; border: 1px solid #263048; border-radius: 16px; background: #111727; color: #94a3b8; }
.bt2 h3 { margin: 0 0 2px; color: #fff; font-size: 16px; } .bt2 p { margin: 0; }
.bt2 .big { background: linear-gradient(160deg, #1e1b4b, #111727); }
.bt2 .vis { display: block; height: 70px; margin-top: 12px; border-radius: 10px; background: repeating-linear-gradient(90deg, #6366f1 0 18px, transparent 18px 26px); opacity: .6; }
@container (min-width: 440px) { .bt2 ul { grid-template-columns: repeat(3, minmax(0, 1fr)); } .bt2 .big { grid-column: span 2; grid-row: span 2; } .bt2 .wide { grid-column: span 3; } }

03. Link-in-Bio Bento

BentoProfile

A personal page made of tiles: a profile tile, a latest post, social links and a newsletter tile, the bento style popular for link-in-bio pages. Each tile is a link or a section with a heading, so the page is still a sensible list.

View code
<div class="bt3"><ul><li class="me"><span class="av" aria-hidden="true">LS</span><b>Lena Sato</b><span>Illustrator · Osaka</span></li><li><a href="#post"><b>Latest post</b><span>Sketching in winter light</span></a></li><li class="ig"><a href="#instagram"><b>Instagram</b></a></li><li class="sh"><a href="#shop"><b>Print shop</b></a></li><li class="nl"><a href="#letter"><b>Monthly letter</b><span>2,400 readers</span></a></li></ul></div>
.bt3 { width: 480px; max-width: 100%; font: 13px Inter, system-ui, sans-serif; }
.bt3 ul { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin: 0; padding: 0; list-style: none; }
.bt3 li { border-radius: 18px; background: #fff; border: 1px solid #e4e7ec; overflow: hidden; }
.bt3 li > *, .bt3 .me { display: grid; gap: 2px; align-content: end; min-height: 90px; padding: 14px; box-sizing: border-box; color: #475467; text-decoration: none; }
.bt3 b { color: #101828; font-size: 14px; }
.bt3 .me { grid-column: span 2; grid-template-columns: auto 1fr; column-gap: 12px; align-items: center; min-height: 0; }
.bt3 .av { grid-row: span 2; display: grid; place-items: center; width: 48px; height: 48px; border-radius: 50%; background: #fde68a; color: #78350f; font-weight: 800; }
.bt3 .ig { background: linear-gradient(135deg, #f97316, #db2777); } .bt3 .ig b { color: #fff; }
.bt3 .sh { background: #ecfdf3; } .bt3 .nl { grid-column: span 2; background: #101828; } .bt3 .nl b { color: #fff; } .bt3 .nl span { color: #98a2b3; }
.bt3 a:focus-visible { outline: 3px solid #84adff; outline-offset: -3px; border-radius: 18px; }

04. Stats Bento

BentoNumbers

Key numbers arranged as a bento, with the most important stat in the biggest tile. Each tile pairs the number with its label as a description list group, so the figures make sense out of their visual context.

View code
<dl class="bt4"><div class="big"><dt>Monthly revenue</dt><dd>$128k</dd></div><div><dt>Orders</dt><dd>3,410</dd></div><div><dt>Return rate</dt><dd>2.1%</dd></div><div class="wide"><dt>Customers who came back</dt><dd>41%</dd></div></dl>
.bt4 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; width: 460px; max-width: 100%; margin: 0; font-family: Inter, system-ui, sans-serif; }
.bt4 div { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 2px; padding: 14px; border-radius: 16px; background: #151b2e; }
.bt4 dt { color: #94a3b8; font-size: 12px; } .bt4 dd { margin: 0; color: #fff; font-size: 24px; font-weight: 800; }
.bt4 .big { grid-column: span 2; background: linear-gradient(135deg, #065f46, #064e3b); } .bt4 .big dd { font-size: 40px; } .bt4 .big dt { color: #a7f3d0; }
.bt4 .wide { grid-column: span 2; }

05. Dark Bento with Glow Accents

BentoDark

A dark bento where each tile has a faint coloured glow in one corner, the look of many modern product pages. The glow is a radial gradient in the tile's background, positioned differently per tile with a custom property.

View code
<ul class="bt5"><li style="--c:#6366f1;--p:0 0" class="a">Automations</li><li style="--c:#ec4899;--p:100% 0">Forms</li><li style="--c:#22d3ee;--p:100% 100%">Webhooks</li><li style="--c:#f59e0b;--p:0 100%" class="w">Analytics</li></ul>
.bt5 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 90px; gap: 8px; width: 460px; max-width: 100%; margin: 0; padding: 0; list-style: none; font: 700 15px Inter, system-ui, sans-serif; }
.bt5 li { display: grid; align-items: end; padding: 14px; border: 1px solid #1f2937; border-radius: 16px; background: radial-gradient(180px circle at var(--p), color-mix(in srgb, var(--c) 35%, transparent), transparent 70%), #0b1020; color: #f1f5f9; }
.bt5 .a { grid-row: span 2; } .bt5 .w { grid-column: span 2; }

06. Bento with Named Areas

BentoGrid areas

The bento layout written as grid-template-areas, which makes the arrangement easy to read and to rearrange: a different areas map in a container query reorganises the tiles for narrow spaces without touching any tile.

View code
<div class="bt6"><div class="in"><section class="h">Hero</section><section class="s">Speed</section><section class="p">Privacy</section><section class="t">Teams</section><section class="c">Call to action</section></div></div>
.bt6 { width: 600px; max-width: 100%; container-type: inline-size; font: 700 14px Inter, system-ui, sans-serif; }
.bt6 .in { display: grid; gap: 8px; grid-template-columns: 1fr 1fr; grid-template-areas: "h h" "s p" "t t" "c c"; }
.bt6 section { display: grid; place-items: center; min-height: 70px; border-radius: 16px; background: #f2f4f7; color: #344054; }
.bt6 .h { grid-area: h; min-height: 120px; background: #101828; color: #fff; } .bt6 .s { grid-area: s; } .bt6 .p { grid-area: p; } .bt6 .t { grid-area: t; background: #eef4ff; color: #1e3a8a; } .bt6 .c { grid-area: c; background: #7f56d9; color: #fff; }
@container (min-width: 460px) { .bt6 .in { grid-template-columns: 2fr 1fr 1fr; grid-template-areas: "h s p" "h t t" "c c c"; } }

07. Bento Tiles with Hover Lift

BentoHover

Clickable bento tiles that lift and gain a shadow on hover or focus, with an arrow that nudges forward. The whole tile is the link, so the target is large, and the hover state is mirrored on :focus-visible.

View code
<ul class="bt7"><li class="a"><a href="#guides"><b>Guides</b><span>Step-by-step tutorials →</span></a></li><li><a href="#api"><b>API</b><span>Reference →</span></a></li><li><a href="#community"><b>Community</b><span>Forum →</span></a></li></ul>
.bt7 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; width: 460px; max-width: 100%; margin: 0; padding: 0; list-style: none; font: 13px Inter, system-ui, sans-serif; }
.bt7 .a { grid-column: span 2; }
.bt7 a { display: grid; gap: 4px; align-content: end; min-height: 90px; padding: 14px; box-sizing: border-box; border: 1px solid #e4e7ec; border-radius: 16px; background: #fff; color: #475467; text-decoration: none; transition: transform .25s ease, box-shadow .25s ease; }
.bt7 .a a { min-height: 120px; background: linear-gradient(135deg, #fef3c7, #fff); }
.bt7 b { color: #101828; font-size: 16px; }
.bt7 a:hover, .bt7 a:focus-visible { transform: translateY(-3px); box-shadow: 0 14px 24px -14px rgba(16,24,40,.4); }
.bt7 a:focus-visible { outline: 3px solid #84adff; outline-offset: 2px; }
@media (prefers-reduced-motion: reduce) { .bt7 a { transition: box-shadow .25s; } .bt7 a:hover, .bt7 a:focus-visible { transform: none; } }

About these CSS Bento Grid Layouts

Spans make the bento

A bento is a regular grid where some tiles span two columns or two rows. Set grid-auto-rows to a fixed height so spans produce predictable shapes.

Most important, biggest

Give the largest tile to the main message and keep the rest secondary. A bento where every tile shouts looks like a collage, not a layout.

Plan the narrow version

Four columns of tiles do not fit a phone. Reduce to two columns in a container query and shrink the spans, or redraw the layout with a different areas map.

Tiles are still content

Each tile should have a heading or label in text, not only an image, and the tiles should be in a sensible reading order in the HTML.

Frequently asked questions

Where does the name bento come from?

From Japanese lunch boxes with compartments of different sizes.

Grid spans or named areas?

Spans for flexible tile lists; named areas when the layout is fixed and you want it readable.

Can tiles contain video or charts?

Yes. Give media tiles an aspect ratio so they keep their shape.