在 WebKit/Blink 中防止 MacOS 轨迹板用户隐藏滚动条

WebKit/Blink (Safari/Chrome)自10.7(Mac OS X Lion)以来在 MacOS 上的默认行为是在触摸板用户不使用时隐藏滚动条。滚动条通常是元素可滚动的唯一视觉提示。

例子(Jsfiddle)

超文本标示语言
<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)截图

screenshot of a div with no visible scroll bar

快速(歌剧)截图

screenshot of a div with a visible scroll bar


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

127266 次浏览

滚动条的外观可以通过 WebKit 的 -webkit-scrollbar伪元素 [ http://www.webkit.org/blog/363/styling-scrollbar/”rel = “ noReferrer”> blog ]来控制。您可以通过将 -webkit-appearance[ http://developer.apple.com/library/safari/document/AppleApplications/Reference/SafariCSSRef/article/StandardCSSProperties.html #//apple _ ref/doc/uid/TP30001266- _ webkit _ face”rel = “ noReferrer”> docs ]设置为 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)截图

screenshot showing webkit's scrollbar, without needing to hover

另一个处理 Lion 隐藏滚动条的好方法是显示向下滚动的提示。它不适用于小的滚动区域,如文本字段,但适用于大的滚动区域,并保持了网站的整体风格。其中一个网站是 http://versusio.com,只要查看这个示例页面,等待1.5秒就可以看到提示:

Http://versusio.com/en/samsung-galaxy-nexus-32gb-vs-apple-iphone-4s-64gb

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

你需要 jQuery + 下划线和

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

_.delay() 在显示提示符之前触发一个延迟——提示符不应该太显眼

$('#prompt_div').fadeIn('slow') 消失在你的提示,当然

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

此外,您还可以绑定 GoogleAnalytics 事件来跟踪用户的滚动行为。

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

它非常适合我-你可以使一些真正美丽的自定义滚动条,适合你的网站设计。

对于一个动态添加可滚动部分的单页 web 应用程序,我通过程序化地向下滚动和向上滚动一个像素来触发 OSX 的滚动条:

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


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

这会触发视觉线索进进出出。

下面是一段较短的代码,可以在整个网站上重新启用滚动条。我不确定这个答案是否与目前最流行的答案有很大的不同,但它是这样的:

::-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