如何在iOS上使用CSS溢出获取滚动条


82

开发iPad网站时,我尝试使用CSS属性overflow: auto获取滚动条(如果需要)div,但是即使两个手指滚动正常,我的设备也拒绝显示滚动条。

我尝试过

overflow: auto;

overflow: scroll;

结果是一样的。

我仅在iPad上进行测试(在桌面浏览器上可以正常运行)。

有任何想法吗?


1
我的问题描述得非常详细位置:webmanwalking.org/library/experiments/...
mat_jack1

Answers:


115

按照kritzikratzi留下的评论进行编辑

[从ios 5beta开始]-webkit-overflow-scrolling: touch可以添加一个新属性,这应该导致预期的行为。

一些,但很少,进一步阅读:


原始答案,留给后代使用。

不幸的是overflow: auto,没有scroll在iOS设备上产生滚动条,这显然是因为屏幕宽度会占用这种有用的机制。

相反,正如您所发现的,要求用户执行两指滑动才能滚动overflow-ed内容。唯一的参考,因为我找不到手机本身的手册,因此可以在这里找到:tuaw.com:iPhone 101:两指滚动

为此,我能想到的唯一解决方法是,是否可以使用一些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的方法可以实现这一目标吗?
mat_jack1

不幸的是,不幸的是,可能将滚动条应用于页面元素的所有css变体都是verboten。唯一的选择是:1,使用JavaScript进行仿真(应该是本机函数),或者最好是2,使用@media查询来创建特定于移动设备的样式表,从而避免使用滚动元素。
大卫说,请

13
从ios 5beta开始,可以添加新属性-webkit-overflow-scrolling:touch,这将导致预期的行为。
kritzikratzi 2011年

@kritzikratzi:谢谢您的更新!直到现在我都没有听到任何声音。有趣的发现:)
大卫说要恢复莫妮卡(Monica)

2
非常有趣的解决方案....不幸的是,使用此方法,滚动条仅在滚动过程中可见,而并不总是.....
Luca Detomi 2014年

20

在您的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);
}

1
这在Chrome的IPAD模拟器上非常有效。我还没有在实际的IPAD上尝试过,但是手指交叉了,谢谢!
user2808054

19

我做了一些测试,并使用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); 
} 

我还无法弄清的唯一不足之处是如何与iProducts上的滚动条进行交互,但是您可以与内容进行交互以对其进行滚动


此滚动条也不会位于内容的顶部,但是就像在占据自己空间的窗口中一样(将内容推到左侧)。或有任何避免这种想法的想法?
汉斯(Hans)

为了记录在案,::-webkit-scrollbar不工作的iPhone 4 / iOS的7
lulalala

6

克里斯·巴尔(Chris 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。


2

iScroll4 JavaScript库将修复它的权利了。它有一个hideScrollbar方法,你可以设置为false防止从滚动条消失。



2

确保您的身体和div没有

  position:fixed

否则它将无法正常工作


1

以我的经验,您需要确保该元素已display:block;申请-webkit-overflow-scrolling:touch;工作。


1
它对我不起作用.. chorme说-webkit-overflow-scrolling:touch; 无效
Victor Hugo Arango A.

1

对我来说效果很好,请尝试:

.scroll-container {
  max-height: 250px;
  overflow: auto;
  -webkit-overflow-scrolling: touch;
}

1
::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

::-webkit-scrollbar-thumb {
    border-radius: 8px;
    background-color: #C3C3C3;
    border: 2px solid #eee;
}

使用此代码,它可以在ios / android APP webview中工作;它删除一些不可移植的css代码;


0

如果您尝试通过移动设备上的触摸实现水平div滚动,则更新的CSS修复不起作用(已在Android Chrome和iOS Safari多个版本上测试),例如:

-webkit-overflow-scrolling: touch

我找到了一个解决方案,并从CSS技巧开始就对其进行了修改,以进行水平滚动。我已经在Android Chrome和iOS Safari上对其进行了测试,并且监听器触摸事件已经存在了很长时间,因此它具有良好的支持:http : //caniuse.com/#feat=touch

用法:

touchHorizScroll('divIDtoScroll');

职能:

function touchHorizScroll(id){
    if(isTouchDevice()){ //if touch events exist...
        var el=document.getElementById(id);
        var scrollStartPos=0;

        document.getElementById(id).addEventListener("touchstart", function(event) {
            scrollStartPos=this.scrollLeft+event.touches[0].pageX;              
        },false);

        document.getElementById(id).addEventListener("touchmove", function(event) {
            this.scrollLeft=scrollStartPos-event.touches[0].pageX;              
        },false);
    }
}
function isTouchDevice(){
    try{
        document.createEvent("TouchEvent");
        return true;
    }catch(e){
        return false;
    }
}  

从垂直解决方案修改(CSS技巧前):

http://chris-barr.com/2010/05/scrolling_a_overflowauto_element_on_a_touch_screen_device/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.