Landscape mWeb experiments - #102755
Landscape mWeb experiments#102755GCyganek wants to merge 5 commits into
Conversation
…scape On mobile web in landscape, replace the full-width bottom tab bar with a floating pill, extend screens to the bottom edge, and let the main screen headers (Inbox, Search, Home, Settings, Workspaces) scroll away with the content. Adds web soft-keyboard detection to hide the floating bar while typing.
On mobile web in landscape, hide the report header on scroll towards newer messages (with a floating back button that follows its progress), shrink the report and RHP header bars, drop the reserved typing-indicator row and footer slack, and hide page headers entirely while the soft keyboard is open so the focused input stays reachable.
|
@Expensify/design could you take a look at my experiments to make the mWeb landscape mode more usable? I mainly focused on two biggest issues here:
I tested many different things and only left these that seem to work the best or at least have some potential. I also focused on not affecting other platforms and portrait mode, as well as performance and complexity of the code in the used solutions. I used iOS Safari and Chrome, and Android Chrome for testing This PR is not meant to be reviewed in the current state in terms of code, I opened it to show you what I was able to achieve in current state with the lowest impact on the app possible and to discuss what we want to keep and what we do not want. All ideas and opinions on the ones I implemented here are welcome. cc: @mountiny for visibility. I especially wanted to avoid adding mechanisms that would result in big changes in the code only for mWeb landscape to work better as I feel like we need to keep balance here and not end up in a situation where we have a lot of new code that needs to be maintained only for mWeb landscape mode which is not used that often, to say it gently. Additionally, while I tested many different popular apps and their mWeb landscape versions working on this, I feel that it's hardly ever solid and, in some cases, not even as usable as our landscape mode currently without the changes on this PR. Full list of the visible changes: 1. Navigation tab bar and floating buttons
2. Main screens
3. Chat report screen
4. Create expense screen
5. Other
Please, take into consideration that not everything works 100% on this PR, for example not all screens with inputs work well when keyboard opens (focused inputs may be covered by something with open keyboard), I focused on the main and most used screens. My demos: chrome Android screen-20261001-160827-1790863640952.mp4.2.mp4and worst case scenario for me - iOS Safari with multiple tabs open (so we have browser chrome and tabs bar taking vertical space): ScreenRecording_10-01-2026.16-12-13_1.1.mp4 |
|
Love where a lot of this is going! For the tabs, just a heads up that we are going to implement new native tabs soon, in case that is helpful. We might want to see what options we have for native tabs now in these modes, perhaps even having the tabs go away on scroll, etc etc. |
|
The fixed header scrolling away feels really nice too. |
Explanation of Change
Improves mWeb phone landscape layout: floating pill tab bar, main tab headers scroll away with content, report header collapses on scroll with a floating back button, compact header/compose chrome, and headers/tabs hide while the soft keyboard is open.
Fixed Issues
$ #94042
PROPOSAL: N/A
Tests
Offline tests
N/A
QA Steps
Same as tests
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari