Skip to content

fix(pwa): bottom nav overlaps content on mobile scroll - #3

Merged
8tp merged 1 commit into
mainfrom
fix/mobile-bottom-nav
Jun 23, 2026
Merged

fix(pwa): bottom nav overlaps content on mobile scroll#3
8tp merged 1 commit into
mainfrom
fix/mobile-bottom-nav

Conversation

@8tp

@8tp 8tp commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Bug: On the mobile PWA, scrolling down made the bottom nav bar move up and cover ~half the page.

Cause: position: fixed; bottom: 0 on the nav, over a nested scroll container (<main overflow-y-auto> inside a height:100% shell). iOS standalone PWAs mis-position fixed elements in that setup.

Fix: No more position: fixed on mobile. The app shell is now exactly one dynamic viewport tall (.app-shell = 100dvh, 100vh fallback, overflow: hidden) and the bottom nav is a normal flex child (shrink-0) below the scroll area. <main> is the only scroller, so the nav is structurally pinned and can't overlap content. Safe-area inset padding is preserved.

Verified: typecheck + lint + web build green.

🤖 Generated with Claude Code

On iOS standalone PWAs a position:fixed bottom nav over a nested scroll
container (<main overflow-y-auto> inside a height:100% shell) jumps and
covers content as you scroll.

Make the shell exactly one dynamic viewport tall (.app-shell = 100dvh, 100vh
fallback, overflow hidden) and turn the bottom nav into a normal flex child
(shrink-0) below the scroll area instead of position:fixed. <main> is now the
only scroller and the nav is structurally pinned — no fixed-positioning quirks.
Drops the 72px bottom reserve that the fixed nav needed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@8tp
8tp merged commit da45a8e into main Jun 23, 2026
2 checks passed
@8tp
8tp deleted the fix/mobile-bottom-nav branch June 23, 2026 14:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant