169

自 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 中的可滚动元素上?

4

5 回答 5

253

滚动条的外观可以通过 WebKit 的-webkit-scrollbar伪元素 [博客]来控制。-webkit-appearance 您可以通过将[ 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) 截图

显示 webkit 滚动条的屏幕截图,无需悬停

于 2011-10-21T21:40:59.353 回答
19

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

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

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

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

于 2013-02-18T12:46:55.547 回答
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

于 2017-10-25T17:06:46.617 回答
3

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

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

于 2011-10-22T07:28:15.710 回答
2

另一个处理 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') 当用户在看到提示后滚动时淡出

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

于 2011-10-22T01:24:47.373 回答