Responsive grid layout: fixed TopBar/Sidebar with document scroll#3178
Responsive grid layout: fixed TopBar/Sidebar with document scroll#3178benjaminleonard wants to merge 9 commits intomainfrom
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
90eb34e to
d22f1fe
Compare
Switch from a CSS grid layout (where TopBar and Sidebar occupied grid cells alongside ContentPane) to fixed-position TopBar and Sidebar with document-level scroll. This is the foundation for mobile/tablet support. Key changes: - viewport meta tag: proper responsive instead of fixed 1050px - CSS: add --sidebar-width var, responsive --content-gutter, remove body overflow-y-hidden, set html/body/#root height: 100% - TopBar: single fixed element (was two grid cell fragments) - Sidebar: fixed position with overflow scroll - ContentPane: margin-left for sidebar on desktop, document scroll - Scroll restoration: window.scrollY instead of container scrollTop - PageSkeleton: match new fixed layout structure Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
85918cc to
ecf1870
Compare
| <Block className="h-6 w-16" /> | ||
| <Block className="h-6 w-32" /> | ||
| {/* TopBar */} | ||
| <div className="bg-default border-secondary fixed inset-x-0 top-0 z-(--z-top-bar) grid h-(--top-bar-height) grid-cols-[var(--sidebar-width)_1fr] border-b"> |
There was a problem hiding this comment.
There's an argument to say we should define the shared classes between the skeleton and regular layout to avoid drift but the juice might not be worth the squeeze.
| * different points in the history stack will not share the same scroll position. | ||
| */ | ||
| export function useScrollRestoration(container: React.RefObject<HTMLElement | null>) { | ||
| export function useScrollRestoration() { |
There was a problem hiding this comment.
Do we even need this hook now? Since we're using a regular window scroll, perhaps we can use the built-in react-router one.
There was a problem hiding this comment.
Similar to #2450 if I remove it I was unable to get react-router ScrollRestoration to work
| import { classed } from '~/util/classed' | ||
|
|
||
| export const PageContainer = classed.div`grid h-screen grid-cols-[14.25rem_1fr] grid-rows-[var(--top-bar-height)_1fr]` | ||
| export const PageContainer = classed.div`min-h-full pt-(--top-bar-height)` |
There was a problem hiding this comment.
Top bar is fixed, this leaves space for it. Alternatively we use sticky for the top bar but the sidebar would still be fixed and this feels marginally cleaner.
|
PR is visually identical to main with expanded visual regression tests. Haven't figured out an easy way to test it scrolled since the baseline would require a different scroll pattern to this new PR. I'd suggest we err on merging sooner so it can be tested for longer. |
Refactor of #2087
Switch from a CSS grid layout (where TopBar and Sidebar occupied grid cells alongside ContentPane) to fixed-position TopBar and Sidebar with document-level scrolling. This is the foundation for mobile/tablet support and likely the place that has the potential to cause the most issues so I'm separating the two.
This PR should produce a console that is visually identical to the current one.
Broader responsive changes will come in another PR, and are not a blocker for this.
Todo