CSS滚动条样式跨浏览器

168

如何定义跨浏览器的 CSS 滚动条样式? 我测试了这段代码,只在 IE 和 Opera 中生效,在 Chrome、Safari 和 Firefox 中都失败了。

<style type="text/css">
<!--    
body {
    scrollbar-face-color: #000000;
    scrollbar-shadow-color: #2D2C4D;
    scrollbar-highlight-color:#7D7E94;
    scrollbar-3dlight-color: #7D7E94;
    scrollbar-darkshadow-color: #2D2C4D;
    scrollbar-track-color: #7D7E94;
    scrollbar-arrow-color: #C1C1D1;
}
-->
</style>

1
对于WebKit浏览器(Chrome/Safari),您可以使用以下链接:https://dev59.com/pWsz5IYBdhLWcg3wsaLN#7713784 - thirtydot
13
@graphicdivine,只有在更改整个页面的滚动条时才会出现这种情况。还有很多其他的滚动条可以修改(在网页内部),与浏览器的界面无关。 - Dan
这个链接展示了如何在Webkit浏览器上实现自定义滚动条:http://css-tricks.com/custom-scrollbars-in-webkit/ - user1108509
这个“重复”的是那篇较早的帖子吗? - Gil Epshtain
6个回答

152
Webkit 对滚动条的支持非常复杂。此 CSS 提供了一个非常简洁的滚动条,具有浅灰色轨道和较暗的拇指:
::-webkit-scrollbar
{
  width: 12px;  /* for vertical scrollbars */
  height: 12px; /* for horizontal scrollbars */
}

::-webkit-scrollbar-track
{
  background: rgba(0, 0, 0, 0.1);
}

::-webkit-scrollbar-thumb
{
  background: rgba(0, 0, 0, 0.5);
}

这个答案 是一个非常好的额外信息来源。


7
然而,这在IE中无法运行。 - user2886091
1
参见:http://css-tricks.com/custom-scrollbars-in-webkit/ - Drew Noakes
1
这可以在Chrome上运行。那Firefox和IE呢? - SHEKHAR SHETE
@SHEKHARSHETE,是的,这种方法只适用于WebKit。如果您需要支持其他浏览器,可以参考其他答案,也许与这些供应商前缀的CSS选择器一起使用。 - Drew Noakes
不要在火狐浏览器上工作 - bksi

113

滚动条CSS样式是由微软开发人员发明的奇怪东西。它们不是CSS的W3C标准的一部分,因此大多数浏览器都会忽略它们。


110
现在,Webkit也支持它。我认为Opera也支持。因此实际上,截至2012年,似乎有70%的浏览器市场份额* 支持它(指滚动条的样式设计),但不幸的是它们仍然使用不同的语法来完成样式设计。 - Stijn de Witt
9
现在,已经到了2013年,Opera也将采用Webkit。太棒了! - Jimbo
28
请参考https://dev59.com/RGox5IYBdhLWcg3wWzN7#14150577,以获取更完整的答案及其它选项。 - user276648
@jmendeth 好的,我没有花时间自己测试它,但根据这个页面,它应该适用于IE、Chrome和Firefox。而根据这个论坛帖子,IE样式规则也在Opera中起作用,但仅限于主页面滚动条。不适用于textarea或div等其他滚动条。 - Stijn de Witt
3
每个人都会喜欢它。来自IE时代的单一聪明想法? - Ben
显示剩余2条评论

32

jScrollPane 是一个优秀的解决方案,可以跨浏览器滚动条,并且降级良好。


这只适用于垂直滚动条吗? - paradroid
2
@paradroidΨ 它也适用于水平滚动内容。 - Rebecca
3
它的降级效果不好。有许多情况下它无法创建滚动条(我在Firefox21中就遇到过)。 - edA-qa mort-ora-y

13

nanoScrollerJS 非常易于使用。我总是使用它们...

浏览器兼容性:
  • IE7+
  • Firefox 3+
  • Chrome
  • Safari 4+
  • Opera 11.60+
移动浏览器支持:
  • iOS 5+ (iPhone、iPad 和 iPod Touch)
  • iOS 4 (需要一个polyfill)
  • Android Firefox
  • Android 2.2/2.3 原生浏览器 (需要一个polyfill)
  • Android Opera 11.6 (需要一个polyfill)

来自文档的代码示例:

  1. 标记 - 为使插件正常工作,需要以下类型的标记结构。
<div id="about" class="nano">
    <div class="nano-content"> ... content here ...  </div>
</div>

1

我认为从IE6开始,您无法使用这些属性自定义滚动条。上面链接的Chris Coyier文章详细介绍了用于自定义滚动条的webkit专有CSS选项。

如果您真的想要一个跨浏览器解决方案,可以完全自定义,则必须使用一些JS。这里是一个名为FaceScroll的不错插件的链接:http://www.dynamicdrive.com/dynamicindex11/facescroll/index.htm


5
2013年时还有人在编写IE6的代码吗? - user2867288
@user2867288 - 是的...确实有。我曾经为一家小型网络代理公司做过自由职业工作,他们会把一些工作分派给我,并要求我使所有东西都能在IE6上运行。那时候我最终放弃了这个客户,因为情况变得太荒谬了。虽然失去了相当多的收入...但保持了我的理智。我不怀疑他们在2016年仍然需要这样做。 - Jimbo Jonny
这是作为答案发布的,但它并没有试图回答问题。它可能应该是一个编辑、评论、另一个问题或完全删除。 - AStopher

-2

试试这个,它非常易于使用,并在IE、Safari和FF上进行了测试,运行良好,而且不需要很多div,只需添加id即可正常工作,在链接Js和Css文件后。 FaceScroll自定义滚动条

希望能帮到你。

编辑 步骤1:将以下脚本添加到页面的<head>部分:

<link href="general.css" rel="stylesheet" type="text/css">

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script type="text/javascript" src="jquery.ui.touch-punch.min.js"></script>

<script type="text/javascript" src="facescroll.js"></script>
<script type="text/javascript">
    jQuery(function(){ // on page DOM load
        $('#demo1').alternateScroll();
        $('#demo2').alternateScroll({ 'vertical-bar-class': 'styled-v-bar', 'hide-bars': false });  
    })
</script>

步骤 2:然后在您的页面主体中,将以下示例 HTML 代码块添加到您的页面中。

<p><b>Scrollbar (default style) shows onMouseover</b></p>

<div id="demo1" style="width:300px; height:250px; padding:8px; background:lightyellow; border:1px solid gray; resize:both; overflow:scroll">

From Wikipedia- Gunpowder, also known since in the late 19th century as black powder, was the first chemical explosive and the only one known until the mid 1800s.[2] It is a mixture of sulfur, charcoal, and potassium nitrate (saltpeter) - with the sulfur and charcoal acting as fuels, while the saltpeter works as an oxidizer.[3] Because of its 
</div>

<br />

<p><b>Scrollbar (alternate style), always shown</b></p>

<div id="demo2" style="width:400px; height:130px; padding:10px; padding-right:8px; background:lightyellow; border:1px solid gray; overflow:scroll; resize:both;">

From Wikipedia- Gunpowder, also known since in the late 19th century as black powder, was the first chemical explosive and the only one known until the mid 1800s.[2] It is a mixture of sulfur, charcoal, and potassium nitrate (saltpeter) - with the sulfur and charcoal acting as fuels, while the saltpeter works as an oxidizer.[3] Because of its 
</div>

这是作为答案发布的,但它并没有试图回答问题。它可能应该是一个编辑、评论、另一个问题或完全删除。 - AStopher

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接