css - 移动端 绝对定位 超出无法隐藏 导致body可以滚动

查看:755
本文介绍了css - 移动端 绝对定位 超出无法隐藏 导致body可以滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

目前在弄公司移动端改版问题中,本人css菜鸟,对移动端更是不熟悉,遇到这种PC上无问题,移动端出问题时真心无力。

测试连接: body滚动问题地址

测试浏览器: android手机 上 QQ浏览器 UC 浏览器 或者微信扫描打开

二维码地址:

问题起因:

想要实现点击按钮,右侧进入菜单,菜单整体宽度是和body宽度一致,从而遮住整个屏幕。
目前实现方案是 菜单绝对定位 宽度100% left:100% 从而整个菜单超出屏幕,并设置body overflow-x 为hidden ,从而实现默认情况下菜单不可见, 点击按钮 激活菜单,添加active之类的class 变更left 从而实现右侧动画进入效果。

PS:默认情况下没有让菜单display none 是考虑 使用display 从none到block 导致没有渐变过程。

问题描述如下:

现在出现的问题是,在手机上 左右可以滚动,从而可以把屏幕最右边的菜单给滚进来, PC 上没有此问题。尝试各种方法没有解决,求大神帮忙。

问题截图:

打开页面后看到的是上面的效果

左右触摸滚动 可以把右边的菜单栏位给滚动进来,但是我设置了overlfow-x hidden的,还是可见,求教如何隐藏。

解决方案

因为以前都把浏览器默认行为取消掉了,没出现过这种问题,所以做了一下午测试。吐槽一下vivo和华为上的浏览器真的有很多兼容性问题。
从别的论坛上找到一句话传送门

一个绝对定位的子孙元素,部分内容在盒子外。但超出的部分不是总会被剪裁。子孙元素的内容就不会被子孙元素和其包含块之间的祖先元素的overflow的设置所剪裁。
解释:元素的子孙元素的包含块(Containing blocks)是整个视窗(viewport)或是该元素的祖先元素,内容将不会被剪裁。

但是代码中菜单块的直接父级即body开启了相对定位,且body设置了overflow-x:hidden,按照道理说是会被隐藏掉的。但是由于以前遇到的问题,我猜想是不是浏览区对viewport的处理不一样,导致body也属于根一级的包含块?(没做验证)所以希望通过再包一层div来解决。
html结构如下

<body>
    <div id='wrap'>
    这里写原有内容
    </div>
</body>

样式部分其他不做修改

#wrap{
        overflow-x: hidden;
        position: relative;    
    }

其他:你的样式表里好像有重复样式,还得优化下。
先答这么多。等下补充别的移动端的一般处理。

这篇关于css - 移动端 绝对定位 超出无法隐藏 导致body可以滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆