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.