怎么解决手机浏览器上设置为 position:fixed 的层滚动的时候会带动下层页面滚动?

发布于 2021-11-25 12:35:59 字数 369 浏览 945 评论 2

标题可能比较难以明白吧,举个例子:

bootstrap 做的页面,在手机上打开一个 modal,在滚动 modal 的时候,下层的页面也会跟着滚动,目前测试下来android chrome、iPhone safari 都存在这个问题。

在 stackoverflow 查到一个解决办法是临时设置(在打开 modal 的时候设置,关闭则取消)下层页面为positon:fixed。事实上效果不好,例如 body 设置了这个属性之后不管原来位置在哪都会自动滚动到顶部。

随机在手机上访问了几个页面,发现大家基本上均对此采取了视而不见的策略:( 

所以到目前一直没找到什么比较好的解决办法,不知哪位仁兄解决了此问题啊?希望不吝赐教,谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

噩梦成真你也成魔 2021-11-27 01:57:42

不对,这种方式还是不行

夜无邪 2021-11-26 21:10:20

我找到办法了。

<body class="sidebar-open">
<div class="sidebar">
  <div class="sidebar-inner">这是侧边栏</div>
</div>
<div class="main-content">
  这是主体内容块
</div>
</body>

上面也页面结构,注意在手机上点开侧边栏的时候会在 body 上设置个 sidebar-open 的 class(当然,也不一定非要是 body,看情况吧)。

.ok-sidebar {
	position: fixed;
	top: 0;
	left: -100%;
	bottom: 0;
	width: 240px;
	z-index: 9999;
	overflow: hidden;

	.transition(all 0.5s ease-in-out);
	.translate3d(-100%, 0, 0);

	// 为解决侧边栏出现后滑动会导致后面的主页面也跟着滑动的问题
	// 所以这儿需要在内部加个 inner,在这个 class 上面设置如下属性
	// 另外还需要设置主体内容的 overflow-y: auto;
	.ok-sidebar-inner {
		overflow-y: auto;
		position: absolute;
		top: 0;
		bottom: 0;
		left: 0;
		right: 0;
	}

}
// 配合 .ok-sidebar-inner 使用
.sidebar-open {
	overflow: hidden;

	.ok-sidebar {
		// overflow: scroll;
		// visibility: visible;
		left: 0;
		.translate3d(0, 0, 0);
	}

       .ok-content-wrap {
	   overflow-y: auto;
        }
}

至于 modal 窗口,也同样处理,因为打开modal的时候在body 上会添加个 modal-open 的class:

.sidebar-open,
.modal-open {
	// 防止底层页面滚动
	.ok-content-wrap {
		overflow-y: auto;
	}
}

收工……

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文