根因(两层): 1. popup.js positify_tl 用 body rect 高算内联 px 高:手机上文档滚动后 body 高于可视屏,百分比换算随之超屏; 2. CSS 100vh 在手机浏览器是 large viewport(含地址栏遮挡区)>innerHeight, 且只有 .popupwindow 被钳制,普通 .popup(消息/下拉等弹出控件)无钳制。 修法(框架层,应用零改动): - popup.js 新增 _mobile_clamp():手机视口下以 window.innerHeight 实测 钳制——PopupWindow 恒等于可视高-TabBar实测高(setProperty important 覆盖CSS !important,不依赖dvh支持,老微信X5兜底);普通 Popup 仅超屏时 钳高并回拉 top。positify_tl/popup_from_widget/stop_moving 各出口接入; - visualViewport+window resize 监听:转屏/软键盘弹出收起时重钳(100ms 防抖),destroy 时清理防泄漏; - bricks.css 手机媒体查询:.popup:not(.popupwindow) 补 max-height 100vh/dvh 钳制+overflow-y:auto;@supports dvh 优先(随地址栏收缩), JS 实测内联 important 是权威,CSS 只是首帧静态兜底。
Description
Languages
JavaScript
98.7%
CSS
1.2%