Performance: Masonry-style grid with columns
This affects page load speed and rendering performance by how the grid items are arranged and how many reflows and repaints the browser must do.
<div style="column-count: 3; column-gap: 1rem;"> <div>Item 1</div> <div>Item 2</div> <div>Item 3</div> <!-- Items flow naturally in columns --> </div>
<div class="row"> <div class="col">Item 1</div> <div class="col">Item 2</div> <div class="col">Item 3</div> <!-- Items stacked vertically in each column --> </div>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Bootstrap row/col with JS masonry | High (many DOM reads/writes) | Multiple reflows per item | High paint cost due to repositioning | [X] Bad |
| CSS columns for masonry | Low (native flow) | Single reflow | Lower paint cost | [OK] Good |
row-cols-3 do in a masonry-style grid?row-cols-* classrow-cols-3 class in Bootstrap sets the number of columns per row to 3, making each column take equal width.row-cols-3 means 3 columns [OK]row-cols-2 sets default columns, and row-cols-lg-4 overrides on large screens.<div class='row row-cols-2 row-cols-lg-4'> uses row-cols-2 for small/default and row-cols-lg-4 for large screens, which is correct syntax.<div class='row row-cols-2 row-cols-lg-4'> [OK]<div class='row row-cols-3 g-3'> <div class='col'><div class='card'>Short</div></div> <div class='col'><div class='card'>A bit taller content</div></div> <div class='col'><div class='card'>Tallest card content here</div></div> </div>
row-cols-3 and g-3row-cols-3 class creates 3 equal columns. The g-3 adds consistent gaps between columns and rows.<div class='row row-cols-4'> <div class='col'>Item 1</div> <div class='col'>Item 2</div> <div class='col'>Item 3</div> </div>
row-cols-4 expects 4 columns per row. Here only 3 items exist, so the last column is empty, causing stretching or alignment issues.col items to fill 4 columns causes layout issues. -> Option Arow-cols-4 only works with cardscol with fixed width classes unnecessarilyrow-cols-1 for extra small, then override with larger breakpoints.row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 correctly lists classes from smallest to largest breakpoint: row-cols-1, row-cols-sm-2, row-cols-md-3, row-cols-lg-4.row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 [OK]Pass the test and this pattern moves unknown