New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
移动Web开发实践——解决position:fixed自适应BUG #11
Comments
也用fixed,没遇到这样,坐标问题倒是经常遇到,QQ浏览器 |
@hkongm 大概是什么样的坐标问题呢? |
使用-webkit-transform也会影响到fixed的定位,我是在做侧边栏滑出效果的时候发现这个bug的,-webkit-transform动过以后,fixed就不再fixed了。 |
@junjunhuahua 可以大致形容下,看看我能不能帮你解决。 |
@maxzhang 就比如我的header是fixed在顶上的,我做了一个抽屉式的滑出效果,是用-webkit-transform实现的,等抽屉展开再收回的时候,header就不再固定了,没有fixed的效果了,然后我改用left去实现这个效果,就没有这个问题,这个估计也是ios下的bug。 |
@junjunhuahua iOS下fixed的问题异常明显,从iOS5一直到7都没有任何改善。基本表现就是,client width or height 改变时,比如软键盘收起时,fixed元素定位就会异常。 |
@maxzhang 嗯,键盘的问题我也遇到过。移动web现在坑太多了,遇到了很多比IE6还坑爹的bug。 |
使用position fixed header 时在移动浏览器下scrollbar会盖到header上,想把它隐藏也隐藏不掉,楼主有什么方法解决吗 |
@rentj1 无解。scrollbar在没有滚动动作时,会自动隐藏吧 |
@maxzhang 嗯,看来只有让客户端去隐藏webview的滚动条了 |
呃,坐标就是maxzhang另一篇文章提到的,貌似真的没什么好办法。 |
@hkongm 软键盘的出现和收起可以监听 window.onresize事件 |
@hkongm Android上onresize也不靠谱啊 |
resize。。。也算hack了。。。如果里面有DOM重绘的话,性能又是问题,唉 |
请问博主,DEMO:http://jsbin.com/omaCOSir/latest 是否解决了IOS5-7下fixed的问题? |
@deiphi iOS是的fixed是个无法调和的问题,暂时无法解决。如果你有好的解决方案,可以跟我分享,谢谢! |
请问博主 有遇到这种情况吗?就是有个遮罩层 position:fixed,z-index:2;有个div position:relative;z-index:5;在QQ浏览器下,一开始还正常,但是操作几次 遮罩层 就把div给覆盖了 |
@say-hello 有遇到过,在某些特定的 浏览器 和Andorid2.2-2.3环境下,比如note1,position:fixed会将 position:absolute 覆盖掉,z-index会失效。 |
这个到没有遇到,兼容性问题有没有好的方案解决? |
这是神马社区是中国人的网站? |
@deiphi 你把fixed里面放个input或者textarea试试看,应该就出问题了! |
@maxzhang 请问一下楼主采用了新旧flex语法混合,是移动端flex兼容最佳的解决方案吗? flex一共有3次修订,楼主在使用flex的时候移动端的兼容如何? display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
display: -ms-flexbox; /* TWEENER - IE 10 */
display: -webkit-flex; /* NEW - Chrome */
display: flex; /* NEW, Spec - Opera 12.1, Firefox 20+ */ |
mark |
DEMO:http://jsbin.com/omaCOSir/latest 如果嵌套在iframe里面,底部发fixed不会不失效 |
m |
这个解决方案,加个input就炸了。 |
safari 浏览器 ios10 手机版本 遇到带输入框fixed,输入框focus时,弹起软键盘,页面滚动到底部,fixed失效随页面滚动。 |
求解: fixed吸底按钮在页面快速滑动时闪烁的原因 |
1 similar comment
求解: fixed吸底按钮在页面快速滑动时闪烁的原因 |
@maqing01 给需要 fixed 定位的元素加上样式:transform: translate3d(0, 0, 0); 或者 transform: translateZ(0); |
我是头部的设置一个div,让这个div:postion:fiexd,这个自适应到手机端就失效了 |
移动Web开发实践——解决position:fixed自适应BUG
在移动web中使用position:fixed,会踩到很多坑,在我之前的一篇文章《移动端web页面使用position:fixed问题总结》中已经总结了很多bug,但是在后续的开发中有关fixed的未知bug越来越多,我也在尽量的寻找解决方案。
这篇文章就来先解决一个坑,fixed元素的宽度自适应。
当横屏时,fixed元素不能自适应横屏的宽度,bug表现如下:
这个bug主要在android自带浏览器下出现,与手机型号和系统版本无关,几乎所有android都无法幸免,在不同的手机下可能表现会有一点点差异,但都是同样的bug。
导致bug的原因我不清楚,如有高人请指点。
下面这个解决方案在12款主流手机上测试通过(三星、小米、魅族、华为、中心等),如果还未完全解决可以回复这篇文章。
解决问题的关键就是:fixed元素内部必须嵌套一个
position:absolute
元素,用来装载内容,目的就是为了让内容脱离fixed文档流,屏蔽一些fixed的坑别问我为什么,我也不知道为什么,但是这样写竟然神奇的好使了,如有高人请指点迷津。
我在下面的例子中声明了两种最常用的fixed元素:header和footer
position fixed header
header中我使用了float来定位左右两边的icon。右侧icon一定不能使用
position:absolute
定位,如果使用了absolute,在一些android自带浏览器下横屏时,右侧icon无法自适应到右侧,会出现与上面第二幅图中差不多的bug。position fixed footer
footer中是一个flex的布局,'display:flex'容器一定不要直接声明到fixed元素下,必须使用'position:absolute'容器包装一层。
解决方案DEMO:http://jsbin.com/omaCOSir/latest
题外话
一个placeholder自适应bug,页面中使用
<input>
标签并且有属性placeholder
,在页面横屏再转回竖屏时,会导致页面无法自适应,无论是android还是ios都会中招。解决方法是,在
<input>
外层容器中加overflow:hidden
,这个bug我没有截图,大家可以自测。The text was updated successfully, but these errors were encountered: