Patterns / advanced

Dashboard layouts that stay stable under dense content

Dashboards need explicit content boundaries more than decorative card grids.

Dashboards fail when every widget assumes it can grow forever. Tables widen, charts need minimum dimensions, filters wrap, and a single metric label can push the main column out of view.

The layout should make boundaries explicit.

.dashboard {
  display: grid;
  grid-template-columns: minmax(14rem, 18rem) minmax(0, 1fr);
  min-block-size: 100svh;
}

.dashboard__main {
  min-inline-size: 0;
  overflow: clip;
}

The sidebar has a bounded range. The main area can shrink. The main content owns clipping and internal overflow, not the whole page.

Give widgets stable jobs

.widget-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: 1rem;
}

.widget {
  display: grid;
  gap: 0.75rem;
  min-block-size: 14rem;
}

The widget grid can adapt, but each widget has a stable minimum block size. This prevents hover states, labels, or loading text from resizing the whole dashboard.

Tables need their own scroll boundary

.table-region {
  max-inline-size: 100%;
  overflow-x: auto;
}

.table-region table {
  min-inline-size: 48rem;
}

Do not let a table decide the page width. Give it a scroll boundary and preserve a readable minimum table width.

Dashboard spacing should be quiet

Operational screens are scanned repeatedly. Use restrained spacing, clear grouping, and predictable alignment. A dashboard does not need an oversized hero or decorative layout flourishes. It needs dense information that does not break when the data is real.

References