在开发iPad网站时,我尝试使用CSS属性overflow: auto
来获得在div
中需要滚动条的效果,但是我的设备即使可以使用双指滚动,也无法显示它们。
我已经尝试了:
overflow: auto;
和
overflow: scroll;
结果仍然相同。
我只是在iPad上测试(在桌面浏览器上完美运行)。
有什么想法吗?
在开发iPad网站时,我尝试使用CSS属性overflow: auto
来获得在div
中需要滚动条的效果,但是我的设备即使可以使用双指滚动,也无法显示它们。
我已经尝试了:
overflow: auto;
和
overflow: scroll;
结果仍然相同。
我只是在iPad上测试(在桌面浏览器上完美运行)。
有什么想法吗?
编辑 根据 kritzikratzi 亲切留言:
从ios 5beta开始,可以添加一个新的属性
-webkit-overflow-scrolling: touch
,这应该会产生预期的行为。
一些,但很少的进一步阅读:
原始回答,留作纪念。
不幸的是,无论是 overflow:auto
还是 scroll
都无法在iOS设备上产生滚动条,显然是由于屏幕宽度占用了这些有用机制。
如您所发现的那样,用户需要执行双指滑动才能滚动 overflow
内容。自己找到的唯一参考资料,因为我无法找到手机本身的手册,只能在这里找到:tuaw.com: iPhone 101: Two-fingered scrolling。
我能想到的唯一解决方法是,如果您可能使用一些JavaScript,或者可能使用jQTouch,为 overflow
元素创建自己的滚动条。或者,您可以使用@media查询来删除 overflow
并完整显示内容,作为iPhone用户,这使我赞成,即使只是由于简单明了的原因。例如:
<link rel="stylesheet" href="handheld.css" media="only screen and (max-device width:480px)" />
上述代码来自A List Apart,出自上面链接的同一篇文章(我不确定为什么他们省略了type="text/css"
,但我认为有原因。
在你的CSS中应用这段代码
::-webkit-scrollbar{
-webkit-appearance: none;
width: 7px;
}
::-webkit-scrollbar-thumb {
border-radius: 4px;
background-color: rgba(0,0,0,.5);
-webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);
}
我进行了一些测试,发现使用CSS3重新定义滚动条是可行的,并且您可以保留Overflow:scroll;
或Overflow:auto
最终效果大致如下...
::-webkit-scrollbar {
width: 15px;
height: 15px;
border-bottom: 1px solid #eee;
border-top: 1px solid #eee;
}
::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: #C3C3C3;
border: 2px solid #eee;
}
::-webkit-scrollbar-track {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.2);
}
唯一的缺陷是我还没有想出如何与i产品上的滚动条交互,但您可以通过与内容交互来滚动它。
::-webkit-scrollbar
在 iPhone 4/iOS 7 上不起作用。 - lulalalaChris Barr提供的解决方案在这里
function isTouchDevice(){
try{
document.createEvent("TouchEvent");
return true;
}catch(e){
return false;
}
}
function touchScroll(id){
if(isTouchDevice()){ //if touch events exist...
var el=document.getElementById(id);
var scrollStartPos=0;
document.getElementById(id).addEventListener("touchstart", function(event) {
scrollStartPos=this.scrollTop+event.touches[0].pageY;
event.preventDefault();
},false);
document.getElementById(id).addEventListener("touchmove", function(event) {
this.scrollTop=scrollStartPos-event.touches[0].pageY;
event.preventDefault();
},false);
}
}
这对我来说很好用。如果您需要使用一些点击操作,请删除event.preventDefault....
position:fixed
根据我的经验,你需要确保元素应用了display:block;
才能使-webkit-overflow-scrolling:touch;
起作用。
在SO上,另外两个人提出了可能的纯CSS解决方案。David Thomas的解决方案很完美,但有一个限制,即滚动条仅在滚动期间可见。
为了始终显示滚动条,可以遵循以下链接中提供的指南:
::-webkit-scrollbar {
width: 15px;
height: 15px;
}
::-webkit-scrollbar-thumb {
border-radius: 8px;
background-color: #C3C3C3;
border: 2px solid #eee;
}
使用此代码,它适用于iOS / Android APP WebView;它会删除一些不可移植的CSS代码。
对我来说运行良好,请尝试:
.scroll-container {
max-height: 250px;
overflow: auto;
-webkit-overflow-scrolling: touch;
}