【问题标题】:How do I get scrollbars to show in Mobile Safari?如何让滚动条显示在 Mobile Safari 中?
【发布时间】:2010-08-18 14:00:44
【问题描述】:

我编写的 jQuery 时间选择器插件使用 div 作为时间列表的包含块,并且在 Mobile Safari 上没有滚动条来指示可用时间多于可见时间。我知道使用两根手指在 div 内滚动(至少在 iPad 上),但这只有在用户知道有更多内容要滚动 时才有效,并且没有迹象表明存在.所以,我的问题是:有没有人能够让滚动条显示在 Mobile Safari 中?你是怎么做到的?

【问题讨论】:

  • 您可能还想考虑一种不同的方法来向用户显示还有更多内容,例如显示被截断的内容或箭头...
  • 这是iOS5吗??你在说
  • 如果要显示水平滚动条,需要将height: 8px; 添加到最佳答案中。

标签: mobile-safari


【解决方案1】:

假设您使用的是iOS5.0或更高版本,我认为您必须使用以下内容:

-webkit-overflow-scrolling: auto(这是默认样式)

自动:单指滚动,没有动力。

另一种可用的样式是

-webkit-overflow-scrolling: touch

touch:原生风格的滚动。指定此样式具有创建赌注上下文的效果(如不透明度、蒙版和变换)。

使用touch模式,滚动条在用户触摸和滚动时可见,但在不使用时消失。如果您想让它始终可见,那么old post 将帮助您:

::-webkit-scrollbar {
    -webkit-appearance: none;// you need to tweak this to make it available..
    width: 8px;
}

@BJMC 的另一段 Thumb 代码:

::-webkit-scrollbar-thumb {
    border-radius: 4px;
    background-color: rgba(0,0,0,.5);
    box-shadow: 0 0 1px rgba(255,255,255,.5);
}

Original Source

编辑:关于this demo's 的行为,你应该使用jQuery,因为它会对你有很大帮助,$(document).ready(function(){//your code with timer}) 带有计时器的代码需要在所需时间后将 CSS 属性重置为正常(假设是 5 秒。)

对于演示(您所描述的),这是通过onhover 事件启动的,请查看我为此创建的fiddle

这会在桌面浏览器中重现结果,并且也可以在 iPad 上运行,只需添加您的计时器代码以满足您的要求。

【讨论】:

  • 我正在寻找一种方法,使其表现得像 iOS 选择弹出窗口一样,滚动条最初出现然后淡出。所以你知道它是可滚动的,但它会挡道。我想我可以在加载时添加一个类来应用 ::-webkit-scrollbar 规则并使用 css 转换来淡出它。
  • 我在 div 上有-webkit-overflow-scrolling: touch,在开始滚动之前我看不到滚动条。
  • 用户代理切换器?你是说你还没有在实际的 iPad/iPhone 上测试过,因为这是了解它在 iOS 上的表现的唯一方法。
  • 你试过添加这个sn-p吗? ::-webkit-scrollbar-thumb { 边框半径:4px;背景颜色:rgba(0,0,0,.5); -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5); }
  • 我已经在 iPad 上测试了上述内容,但它不能按要求工作。可以使用 UA 切换测试布局和 javascript UA 嗅探,但在测试实际浏览器行为时,您必须在目标设备上进行实际测试。此外,Chrome 开发工具现在内置了用户代理切换功能。
【解决方案2】:

关于最初的问题:拥有滚动条的最佳解决方案是使用外部库(已经推荐 iScroll 很好,但即使是 jQuery UI itself contains scrollbars)。但是显示永远存在的滚动条可能会偏离一般的 iOS UI(见下文)。

另一种方法是用其他 GUI 元素指示内容是可滚动的。考虑元素末尾的小渐变字段(内容在那里淡入背景),这表明内容在触摸和滚动时会继续。

在 iOS5 中,overflow: scroll 按预期运行,即它允许在div 的尺寸指定的区域内用一根手指向上/向下滚动div。但是可滚动的 div 没有滚动条。这与 iOS(5) 中的一般 UI 有点不同。通常也没有滚动条,但它们会在用户开始滚动内容区域时出现,并在触摸事件停止后再次淡出。

【讨论】:

  • 为什么overflow: scroll 在 x 轴上不能按预期工作?
【解决方案3】:

回答上面的 Sam Hasler 评论。 Nicescroll 3 是一个 jquery 插件,它通过淡入/淡出效果满足您的需求,并且适用于所有主要的移动/平板/桌面浏览器。

Live demo

代码:

$(document).ready(function() {    
    $("html").niceScroll({styler:"fb",cursorcolor:"#000"});
    $("#divexample1").niceScroll();//or styles/options below
    $("#divexample2").niceScroll("#wrapperexample2",{cursorcolor:"#0F0",boxzoom:true});
    $("#divexample3").niceScroll("#divexample3 iframe",{boxzoom:true});
  });

【讨论】:

  • 是怎么做兼容性表的!
  • @SamHasler 我的回答不让你满意是有原因的,也许我可以帮忙?
  • 我赞成这个答案,因为它确实解决了问题,但它是一个插件,我将作为(大型 3000+ LOC)依赖项,而不是几行我能理解的 css/js并管理自己,所以我不会使用它。
【解决方案4】:

如果您想让滚动条始终可见,

不要设置-webkit-overflow-scrolling: touch

然后为滚动条设置自定义样式

::-webkit-scrollbar {
    -webkit-appearance: none;// you need to tweak this to make it available..
    width: 8px;
}

你失去了动量效应,但滚动条会一直存在。

(在 iPhone 4/iOS 7 下测试)

【讨论】:

  • 但删除 -webkit-overflow-scrolling: touch 在某些情况下有时会停止滚动效果,直到我将 iPhone 从纵向 -> 横向 -> 纵向切换回来。然后就可以了。
【解决方案5】:

据我所知,移动 Safari 不支持滚动条。 我能找到的完成工作的最佳插件是this

它的演示可用here。 它还有多个predefined skins 以适合您的应用程序。

这是您将获得的样本 -

【讨论】:

    【解决方案6】:

    按照惯例,iOS 上不使用滚动条。

    对于带有overflow: scroll 的 div,唯一的原生滚动方式是用两根手指。

    您可以查看iScroll,这是一个处理触摸事件并为 div 实现单指动量滚动(用户通常在本机应用程序中所期望的)的 JavaScript 库。

    【讨论】:

      【解决方案7】:

      在 ios5 之前,您无法滚动内部 div - 所以当您尝试滚动时您可能看不到滚动条,因为没有滚动条。

      我没有在 ios5 上测试过,但据说滚动内部 div 现在可以工作了。

      如果它不是内部 div,那么您应该能够在滚动条仅在滚动时看到它——这不再只是在 ios 上——lion 也摆脱了所有本机滚动条。您只能在窗口滚动或首次加载窗口时看到它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        相关资源
        最近更新 更多