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

159 css macos webkit scrollbar blink

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

示例(jsfiddle)

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

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

Presto(Opera)截图

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


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

小智 242

可以使用WebKit的-webkit-scrollbar伪元素  [ blog ]来控制滚动条的外观.您可以禁用通过设置默认的外观和行为-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; 
} 
Run Code Online (Sandbox Code Playgroud) WebKit(Chrome)截图

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

  • 请注意,您还可以使用以下命令自定义滚动条的轨道/背景:`.frame :: - webkit-scrollbar-track {background-color:#FFF; border-radius:8px; }` (5认同)
  • 有一点要提到的是,在我的测试和[其他人的真实陈述](https://www.webkit.org/blog/363/styling-scrollbars/#comment-25133)中,似乎你不能有一个永远在线的滚动条和人们习惯使用iOS的动量滚动.执行[动量滚动CSS](https://css-tricks.com/snippets/css/momentum-scrolling-on-ios-overflow-elements/)导致我的自定义滚动条消失. (4认同)
  • 最近没有验证过,但我在我们的CSS中发现了这个引用此解决方案的注释:"请注意,这将显示OS X样式的滚动条,例如在Windows上的Chrome中." (2认同)

Bla*_*ise 17

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

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

// jQuery:
$('#scrollable-section').scrollTop(1).scrollTop(0);
Run Code Online (Sandbox Code Playgroud)

这会触发视觉提示淡入淡出.


Ale*_*man 13

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

::-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);
}
Run Code Online (Sandbox Code Playgroud)

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