Skip to content
Pinky UI

Polaroid Wall

Photos pinned to a wall rather than aligned to a grid. Each sits at a small deterministic angle; focusing one straightens and lifts it while its neighbours lean away. It solves the problem of a photo grid that feels too corporate for personal or editorial content.

Live example

Try the interaction before reading the recipe.

real component · keyboard-safe

  • Kyoto
  • Lisbon
  • Oslo
  • Taipei
  • Porto
  • Kobe

Purpose

Photos pinned to a wall rather than aligned to a grid. Each sits at a small deterministic angle; focusing one straightens and lifts it while its neighbours lean away. It solves the problem of a photo grid that feels too corporate for personal or editorial content.

Good for

  • editorial photo essays and personal galleries
  • team and event pages that should feel human
  • moodboards and creative portfolios

Avoid for

  • product grids, where rotation makes sizes hard to compare
  • large collections — use Masonry Gallery past about two dozen
  • images whose critical detail is small

How many items

Six to twenty-four. Below six the scatter looks accidental rather than composed; above twenty-four it reads as clutter.

Mobile

Drop to two columns and spread="tight". Overlap needs horizontal room that phones do not have, and rotated photos lose more of their edges on a narrow screen than you expect.

Motion intensity

rotation={6} is the default and close to the ceiling. Past about 10° the wall tips from "casually pinned" into "scrapbook". overlap above 0.2 makes neighbours visibly shove each other, which reads as a bug.

Accessibility

  • Items respond to focus as well as hover, so the wall is browsable by keyboard.
  • Rotation and offset are transforms; DOM and reading order never change.
  • Children keep their own semantics — make photos links or buttons if they act like them, and write real alt text. The layout will not invent it.

Performance

No pointer subscription; the wall listens on the items themselves. Scatter comes from a hash rather than measurement, so nothing reflows and the server and client agree. Give images explicit dimensions — the layout cannot prevent a jump you cause by omitting them.

Composes with

Plain image cards, or a light surface like Spotlight Card. Do not put Jelly or Tilt cards inside: the wall already rotates and lifts, and a second rotation system per item fights it.

Source: packages/skills/layouts/polaroid-wall.md