Skip to content

移动端,侧边栏高度未随浏览器底部栏动态伸缩实时更新 #2

@san-ren

Description

@san-ren
  • 问题描述:
    在移动端浏览器中,当侧边栏开启时,滑动页面背景(蒙层区域)会触发浏览器底部工具栏的自动显隐,导致视口高度变化,从而引发以下UI异常:
  1. 上滑(工具栏隐藏): 侧边栏高度未及时填充增大的视口区域,底部出现渲染空白,直至手指松开后才完成适配。
  2. 下滑(工具栏显示):侧边栏未及时收缩,底部被工具栏遮挡,直至手指松开后才恢复正常。

  • 最近用gemini搞了个导航网站玩,期间发现了这个问题。已通过禁止滑动解决,下面是gemini的回答

根本原因:
仅仅设置 body { overflow: hidden } 在 iOS Safari 和部分安卓浏览器上是无效的。因为移动端的滚动机制是基于触摸事件(Touch Events)的,当你在“遮罩层”上滑动时,浏览器默认会将这个滑动事件“透传”给底下的 Body,导致页面滚动和地址栏缩放。

终极解决方案(双管齐下):

  1. 物理屏蔽:直接监听遮罩层(Overlay)的 touchmove 事件,并强制禁止默认行为 (e.preventDefault())。这就像在遮罩层上放了一块玻璃,手指滑得再快也影响不到下面。
  2. 双重锁定:同时给 <html><body> 加上锁定样式,并限制高度。

(本来是要在这里jaywhj/mkdocs-materialx提的,但有5个框框要填😱)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions