use UI

Bento Grid

Also called mosaic grid, feature grid, masonry, dashboard grid

A grid of unequal cells where each cell's size signals its relative importance.

Example

  • Design tokens

    One source for colour, spacing and type, exported to every platform that has to agree with the others.

  • Palette

    Scales generated in OKLCH, so the lightness steps stay even.

  • Contrast

    Every foreground and background pair checked against WCAG.

  • Easing

    Curves you can feel.

  • Shadows

    Layered, not blurred once.

  • Motion

    Duration matches distance.

6 of 6 cells are on screen. Nothing is behind a control. Importance is carried by area and type size, so the largest cell is read first by eye — and, because it is also first in the markup, by a screen reader and by the Tab key.

The small numbers are DOM order. Follow them around the grid: they never jump backwards. That is the whole discipline — write the cells in reading order, then size them, never the reverse.

When to use it

  • A set of features, metrics or highlights should all be visible without interaction.
  • The items are genuinely unequal, and the biggest one deserves to be read first.
  • The page is being scanned rather than read — a landing section, a dashboard, an overview.

When not to

  • The items are equal. Unequal boxes then claim a hierarchy that does not exist, and readers spend effort deciding it does not matter.
  • There are more than about eight cells. Past that the sizes stop reading as ranking and start reading as noise.
  • The content is a list to compare item by item. Aligned rows beat an artful mosaic every time.

Trade-offs

  • Nothing is hidden, so nothing depends on a user pressing anything.
  • Hierarchy is legible before a single word is read.
  • Collapses honestly on narrow screens: the same cells, stacked in the same order.
  • Tempting to place cells by eye, which detaches visual order from DOM order and scrambles the keyboard path.
  • Cell contents differ in length, so a beautiful arrangement at one width breaks at another.
  • Uneven density makes it hard to add a ninth item later without redesigning the whole block.

Accessibility

What this pattern needs in order to work for everyone.

Keyboard
  • Tab order follows the DOM, not the picture. If `order`, `grid-area` or dense packing moves a cell visually, the keyboard still goes the old way.
  • Test by tabbing through once: if focus jumps backwards across the screen, the layout and the markup disagree and the markup should change.
  • One tab stop per interactive cell. A card-sized cell with four links inside it is four stops before the next cell.
Roles and state
  • Cells are not a `grid` in the ARIA sense — that role is for spreadsheet-like widgets with cell navigation. A bento grid is a `<ul>` of items or plain sections.
  • Give each cell a heading if it has one visually, and keep the heading levels sequential — the sizes are visual weight, not document structure.
  • Do not encode the ranking only in size. The most important cell should also read first.
Focus
Focus rings must survive the layout: cells with `overflow: hidden` clip the ring on edge cells unless there is room for the offset.

In the wild

  • Apple product pages The layout the pattern is named after: unequal tiles, largest claim first, everything on one screen.
  • Linear's marketing site Feature bento with one dominant cell and smaller supporting ones, stacking in the same order on mobile.

Compared with

Side-by-side breakdowns of patterns that solve a similar problem.