
Android 2.x和IOS5以下都不支持overflow:auto属性(position:fixed也不支持)。
移动端浏览器兼容性和PC端相比,有过之而无不及。操作系统版本及各式浏览器和各式的屏幕大小排列组合,你永远也无法预测到你的应用会在哪部手机上冒出什么样的问题。
测试过各种浏览器(chrome手机浏览器、百度手机浏览器、手机QQ浏览器、UC浏览器、UC浏览器HD、safari浏览器、firfox手机浏览器、WinPhone系统上的各浏览器,终端包括手机、ipad及PC android模拟器、PC IOS模拟器)
其中有几个比较明显的问题:
1、一些手机对position:fixed支持不完善(跟着手势滚动后再弹回到固定位置,怀疑是否手机或是浏览器性能问题,渲染速度跟不上导致这种“卡”的效果)
2、一些手机或浏览器对overflow:auto支持不完善,在小米自带的浏览器中,对固定高度的容器设置overflow:auto后,容器内容超过容器高度后,直接被隐藏,无论怎么拖动都无法显示。特别是iframe中的overflow情况更为复杂。
3、WinPhone更为恐怖,显示效果和IE7差不多了,不支持CSS3的gradient,线性背景直接显示灰白色。
由此可见,要做到兼容各系统版本,各浏览器,各屏幕大小也着实不易。
4、基本都支持min-height属性
对于某些手机不支持overflow:auto情况,最佳解决方案就是:不去用overflow:auto属性,即不要去设置一个固定的高度。后续会讲到其它解决方案。
话说是在做APP的点击题号跳转功能时出现的这个问题,预想中的功能是这样的:点击题号列表按钮,弹出全屏题号列表
(position:fixed;top:20px
/*空出APP的header*/;bottom:0px;overflow;auto;),当题目很多时,就可以滑动显示题号点击跳转。测试时小米自带
浏览器根本无法滑动,三星中的浏览器可以滑动部分,但显示不全。
调试方案一
于是想,既然Android和IOS高版本支持overflow属性,那就写个兼容的方法:
| 1 | .box{position:absolute;top:20px /*空出APP的header*/;min-height:500px /*box需遮住整个页面*/;} | 
 
| 2 | @media all and (-webkit-transform-3d){/* Android4.0下不识别该-webkit-transform-3d,使用它可做Android4.0下版本兼容 */ | 
 
| 3 |     .box{position:fixed;top:20px;bottom:0px;overflow;auto;min-height:0px;} | 
 
 
 
[注:hack来源及分析请参考:【原】webapp开发中兼容Android4.0以下版本的css hack]
但测试效果却并不尽如人意,在Android4.x的QQ浏览器中,根本未识别这个hack,百度浏览器中成功识别,但滑动后题号还是显示不全,chrome浏览器相对支持较好。
调试方案二(1)
经过查找,德问上也有人提出这个问题,根据参考答案测试了一下
安卓2.3系统webview不支持网页的div滚动条,各位有解决方法么
android2.3的不支持滚动条,并且scrollTop也不支持的。(设置overflow未hidden就可以支持)。
给你个方法保准OK,望采纳:
| 01 | functionnoBarsOnTouchScreen(arg) | 
 
| 05 |   if('ontouchstart'indocument.documentElement ) { | 
 
| 06 |           if(elem = document.getElementById(arg)) { | 
 
| 07 |               elem.style.overflow = 'hidden'; | 
 
| 08 |               elem.ontouchstart = ts; | 
 
| 09 |               elem.ontouchmove = tm; | 
 
| 17 |     if(  e.touches.length == 1 ) | 
 
| 30 |     if(  e.touches.length == 1 ) | 
 
| 35 |       this.scrollTop +=  ty - tch.pageY; | 
 
| 42 | noBarsOnTouchScreen(divId); | 
 
 
 
对于iframe中的容器overflow支持却并不怎么好,首先反应比较慢,其次操作控制不准,有时候滑动的iframe的滚动条,有时候又滑动容器的滚动条,每滑动一下就得卡两下(三星glaxay双核及小米,性能不是问题)。
调试方案二(2)
相同原理的应该还有如下这个方案:
[方案来源:mobile safari 下overflow:auto的解决方法 ]
| 01 | functionisTouchDevice(){ | 
 
| 03 |         document.createEvent("TouchEvent"); | 
 
| 10 | functiontouchScroll(id){ | 
 
| 11 |     if(isTouchDevice()){ //if touch events exist... | 
 
| 12 |         varel=document.getElementById(id); | 
 
| 15 |         document.getElementById(id).addEventListener("touchstart", function(event) { | 
 
| 16 |             scrollStartPos=this.scrollTop+event.touches[0].pageY; | 
 
| 17 |             event.preventDefault(); | 
 
| 20 |         document.getElementById(id).addEventListener("touchmove", function(event) { | 
 
| 21 |             this.scrollTop=scrollStartPos-event.touches[0].pageY; | 
 
| 22 |             event.preventDefault(); | 
 
| 27 | 最后使用touchScroll("MyElement"); 将你需要overflow:auto的元素id调用这个方法即可。 | 
 
 
 
未做测试,暂保留意见,猜想和上个一样的效果,有测试过的可反馈一下。
调试方案三:
最受大家追捧的就是如下这个方案:
使用iScroll框架(http://cubiq.org/iscroll-4),iScroll可以说是解决以前提到的各种bug的一剂万能良药:
- 拉动刷新(Pull up/down to refresh)
使用方法参考:
Android 设备页面内 div(容器,非页面)overflow:scroll; 失效解决
iScroll框架解析——Android 设备页面内 div(容器,非页面)overflow:scroll; 失效解决
web app开发利器 - iscroll4 解决方案
【原】使用iScroll.js解决ios4下不支持position:fixed的问题
大都使用JS的解决方案都会涉及到性能问题,有些卡顿是很正常的事,毕竟浏览器的性能都参差不齐(Chrome和Firefox手机版浏览器安装文件都有
23M左右,QQ、百度、UC等都只有三、五M左右,所以相比chrome和Firefox完美的性能,其它浏览器不正常才正常的。)
综上:最佳的兼容方案就是,不使用容器固定高度+overflow:auto这种结合。顺其自然,高度是多少就给它显示多少,让浏览器自己处理滑动显示的问题。
												
												
						- 解决ios、微信移动端的position: fixed; 支持性不好的问题 && 禁用下拉暴露黑底的功能
		解决ios.微信移动端的position: fixed; 支持性不好的问题 在chrome中的多个部分使用了position: fixed之后,都可以正常的布局,但是放在微信上却出现了不能正常显示的问 ... 
- 移动端position:fixed 解决方案
		相信不少人做移动端项目的时候都会遇到position:fixed 的坑. 下面提供一个解决方法,不用引入任何其他的js库,纯css解决. 解决问题的关键就是:fixed元素内部必须嵌套一个positi ... 
- css解决IE6、Chrome、ff 浏览器position:fixed;和闪动问题
		首先说下开发模式,刚刚开始接触,基本沿用web端开发方式,目前开发模式上没有找到的适合的,现在基本这样:1,电脑nginx配置服务器3,电脑和手机连同一个局域网,2,android root 和 ip ... 
- 解决 scroll() position:fixed 抖动、导航菜单固定头部(底部)跟随屏幕滚动
		一.导航栏或者页脚正常情况下固定在页面的相应位置,当页面滚动后,导航栏或者页脚固定在页面的顶部或者底部的情景 一般就是将该块的代码样式的position设置为fixed.固定在顶部的话,将top设置为 ... 
- 解决IE6不支持position:fixed属性
		最近在优化网站浮动广告时候遇见了IE6不支持position:fixed属性.上网收集了一下解决方案 比较好的方案就是利用css表达式进行解决 补充:CSS Expression (CSS 表达式), ... 
- 解决IOS safari在input focus弹出输入法时不支持position fixed的问题
		该文章为转载 我们在做移动web应用的时候,常常习惯于使用position:fixed把一个input框作为提问或者搜索框固定在页面底部.但在IOS的safari和webview中,对position ... 
- 苹果手机对网页上样式为position:fixed的弹窗支持不好的解决办法
		在Web页面上,如果想模拟对话框效果,一般会给div元素添加position:fixed的样式来实现,然后给背景添加一个半透明的遮罩.如: .fixedDiv { position: fixed; t ... 
- 完美解决IE6不支持position:fixed的bug
		示例代码: <!DOCTYPE html><html><head><meta http-equiv="Content-Type" cont ... 
- 解决ie6不支持position: fixed;导致无法滚动的办法
		<div id="im" style="top: 100px; position: fixed; left: 5px; border: 3px solid #006 ... 
随机推荐
	
									- 使用git和gitlab进行协同开发流程
			一.基本概念 1.仓库(Repository) ①源仓库(线上版本库) 在项目的开始,项目的发起者构建起一个项目的最原始的仓库,称为origin. 源仓库的有两个作用: 1.汇总参与该项目的各个开发者 ... 
- display属性的表格布局相关属性
			基于CSS属性display:table的表格布局的使用   项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的tabl ... 
- PhotoSwipe中文API(一)
			入门 您应知道之前先做起事情: 1. PhotoSwipe不是一个简单的jQuery插件,至少基本的JavaScript知识才能安装. 2. PhotoSwipe需要预定义的图像尺寸(更多关于这一点) ... 
- PAT 1100 Mars Numbers[难]
			1100 Mars Numbers (20 分) People on Mars count their numbers with base 13: Zero on Earth is called &q ... 
- malloc calloc realloc 区别
			(1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ... 
- VS2010/MFC编程入门之前言
			鸡啄米的C++编程入门系列给大家讲了C++的编程入门知识,大家对C++语言在语法和设计思想上应该有了一定的了解了.但是教程中讲的例子只是一个个简单的例程,并没有可视化窗口.鸡啄米在这套VS2010/M ... 
- hdu5880 Family View
			地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=5880 题目: Family View Time Limit: 3000/1000 MS (Ja ... 
- 字王谈M1字形与个人云字库
			字王谈M1字形与个人云字库   最近在忙网络项目,字库其实也没完全搁下,只是没有时间细大理,这些文字idea,来自近日和大梁先生的QQ聊天,虽然口语化很重,但觉得有些价值,作为blog发了 ----- ... 
- 20155310 2016-2017-2 《Java程序设计》第七周学习总结
			20155310 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十三章 时间与日期 认识时间与日期 •时间的度量 •GMT(格林威治标准时间):现在不是标 ... 
- Gym 101246H	``North-East''(LIS)
			http://codeforces.com/gym/101246/problem/H 题意: 给出n个点的坐标,现在有一个乐队,他可以从任一点出发,但是只能往右上方走(包括右方和上方),要经过尽量多的 ...