Masonry packs items into columns. Each item drops into whichever column is shortest at that moment, so the bottom edge comes out ragged and there are no gaps inside the wall. A grid lays out rows instead, so one tall cell pushes down everything beside it and leaves space under the short ones.
Use it when the heights are uneven and you do not know them ahead of time: image galleries, note cards, log entries, a wall of quotes of different lengths.
- Use a Grid when the items are the same height, or should line up in rows. Anything a reader compares across (prices, stats, feature cards) belongs on a shared baseline, and a Grid is also the cheaper layout: no measuring, no absolute positioning, no reflow.
- Use a Listy when the order matters more than the packing. Masonry keeps the DOM in your array order but paints each item wherever the columns allow, so “first” and “next” stop being things the eye can follow. A ranked list, a feed or a set of steps wants one column and a real sequence.
- Use CSS columns (or grid-template-columns with a column flow) when you need none of this component: no per-item data, no typed render callback, no re-measure on resize. If a plain column-count already looks right, it is cheaper and it never reflows.