防止WebKit / Blink中的MacOS触控板用户隐藏滚动条


162

自10.7(Mac OS X Lion)起,WebKit / Blink(Safari / Chrome)在MacOS上的默认行为是在不使用触控板用户时隐藏滚动条。这可能会造成混淆;滚动条通常是元素可滚动的唯一视觉提示。

例子(jsfiddle

的HTML
<div class="frame">
    Foo<br />
    Bar<br />
    Baz<br />
    Help I'm trapped in an HTML factory! 
</div>
的CSS
.frame {
    overflow-y: auto;
    border: 1px solid black;
    height: 3em;
    width: 10em;
    line-height: 1em;
}​
WebKit(Chrome)截图

没有可见滚动条的div的屏幕截图

Presto(Opera)屏幕截图

具有可见滚动条的div的屏幕截图


如何强制滚动条始终显示在WebKit的可滚动元素上?


您是否尝试过溢出:滚动?这曾经在Chrome中起作用。它应强制滚动条始终显示。
xaddict 2015年

2
请注意,它也是在Mac OS X在Firefox中的一个问题
布莱斯

伙计,当网站与我的系统和用户代理上的UI混乱时,我讨厌它。
AMN

Answers:


249

滚动条的外观可与WebKit的控制-webkit-scrollbar伪元素  [ 博客 ]。您可以禁用通过设置默认的外观和行为-webkit-appearance [ 文件 ]none

由于要删除默认样式,因此您还需要自己指定样式,否则滚动条将永远不会显示。以下CSS重新创建了隐藏滚动条的外观:

例子(jsfiddle

的CSS
.frame::-webkit-scrollbar {
    -webkit-appearance: none;
}

.frame::-webkit-scrollbar:vertical {
    width: 11px;
}

.frame::-webkit-scrollbar:horizontal {
    height: 11px;
}

.frame::-webkit-scrollbar-thumb {
    border-radius: 8px;
    border: 2px solid white; /* should match background, can't be transparent */
    background-color: rgba(0, 0, 0, .5);
}

.frame::-webkit-scrollbar-track { 
    background-color: #fff; 
    border-radius: 8px; 
} 
WebKit(Chrome)截图

屏幕快照显示了webkit的滚动条,而无需将鼠标悬停


1
对于强制macosx狮子滚动条,此处介绍的技巧不适用于此技术:stackoverflow.com/a/3417992/62255。不必打扰-由于我们在此处明确设置了尺寸,因此我们可以直接访问它们。
jedierikb 2012年

5
请注意,您还可以使用以下方法自定义滚动条的轨道/背景:.frame::-webkit-scrollbar-track { background-color: #FFF; border-radius: 8px; }
XML

请注意,webkit滚动条样式在iOS 7(可能还有6)中不起作用。
RobW 2014年

4
要提到的一件事是,在我的测试和其他人的过时评论中,您似乎无法拥有始终在线的滚动条以及人们习惯于iOS的动量式滚动。进行动量滚动CSS会导致我的自定义滚动条消失。
jmq

2
最近尚未对此进行验证,但是我在引用此解决方案的CSS中找到了此注释:“请注意,它将显示OS X样式的滚动条,例如Windows上的Chrome。”
亨里克N

19

对于我在其中动态添加可滚动部分的一页Web应用程序,我通过以编程方式向下和向后滚动一个像素来触发OSX的滚动条:

// Plain JS:
var el = document.getElementById('scrollable-section');
el.scrollTop = 1;
el.scrollTop = 0;

// jQuery:
$('#scrollable-section').scrollTop(1).scrollTop(0);

这会触发视觉提示淡入和淡出。


19

以下是一小段代码,可重新启用整个网站上的滚动条。我不确定它是否与当前最受欢迎的答案有很大不同,但这是:

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

在此链接中找到:http : //simurai.com/blog/2011/07/26/webkit-scrollbar


3

浏览器滚动条在iPhone / iPad上根本不起作用。在工作中,我们使用诸如jScrollPane之类的自定义JavaScript滚动条来提供一致的跨浏览器UI:http : //jscrollpane.kelvinluck.com/

它对我来说效果很好-您可以制作一些非常漂亮的自定义滚动条,以适合您的网站设计。


2

处理Lion隐藏的滚动条的另一种好方法是显示一个向下滚动的提示。它不适用于较小的滚动区域(如文本字段),但不适用于较大的滚动区域,并保持网站的整体风格。一个这样做的站点是http://versusio.com,只需检查此示例页面,然后等待1.5秒以查看提示:

http://versusio.com/zh-CN/samsung-galaxy-nexus-32gb-vs-apple-iphone-4s-64gb

实现并不难,但是您必须小心,在用户已经滚动时不显示提示。

您需要jQuery +下划线和

$(window).scroll 检查用户是否已经自己滚动过,

_.delay() 在显示提示之前触发延迟-提示不应太过分

$('#prompt_div').fadeIn('slow') 淡入提示,当然

$('#prompt_div').fadeOut('slow') 在用户看到提示后滚动时淡出

此外,您可以绑定Google Analytics(分析)事件以跟踪用户的滚动行为。

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.