Telegram小程序滚动回顶部出现白块问题求助
Telegram小程序滚动白块问题解决方案
问题重现
开发Telegram小程序时,为消除页面默认整体滚动,给body设置了overflow:hidden,同时创建高度为100vh的Page Wrapper组件,将滚动限制在组件内部。但在移动端,滚动至页面底部后缓慢向上滚动时,页面会出现白块;移除body的overflow:hidden虽能解决白块,但会导致Telegram窗口被滚动,不符合需求。
解决方案
1. 替换body的overflow:hidden为overflow:clip
overflow:clip和hidden同样会隐藏溢出内容,但不会保留滚动上下文,能避免移动端滚动回弹触发的白块问题,同时阻止页面整体滚动。
2. 用动态视口高度100dvh替代100vh
100vh在移动端会包含状态栏、底部导航栏高度,导致组件实际高度超出可视区域;100dvh是动态视口高度,会自动适配设备实际可视区域,确保组件高度准确。
3. 添加overscroll-behavior-y: contain限制滚动范围
该属性可阻止组件内部的滚动事件冒泡到Telegram窗口,即使滚动到组件边界,也不会触发外部窗口滚动。
4. 统一页面基础样式
确保html和body高度设置正确,避免出现高度塌陷或溢出。
修改后的代码示例
全局CSS(body部分)
html, body { margin: 0; padding: 0; box-sizing: border-box; font-size: 1.6rem; background: rgba(247, 246, 255, 1); width: 100%; background-size: cover; background-position: center; background-repeat: no-repeat; overflow: clip; position: relative; height: 100dvh; } * { box-sizing: inherit; /* 统一所有元素的盒模型 */ }
Page组件样式
.page { padding: 12px 16px 100px 16px; width: 100%; height: 100dvh; overflow-y: auto; background: rgba(247, 246, 255, 1); text-align: center; color: $white; margin: 0; display: flex; flex-direction: column; align-items: center; gap: 16px; overscroll-behavior-y: contain; }
额外排查点
- 检查子元素的
margin或padding是否超出Page组件范围,导致滚动异常 - 若Telegram小程序容器有默认内边距或样式,可通过开发者工具排查并覆盖
内容的提问来源于stack exchange,提问作者SnailCode
相关产品推荐
相关产品推荐

