Firefox的自定义CSS滚动条


313

我想用CSS自定义滚动条。

我使用此WebKit CSS代码,该代码非常适合Safari和Chrome:

::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

如何在Firefox中执行相同的操作?

我知道我可以使用jQuery轻松地做到这一点,但是如果可行,我宁愿使用纯CSS做到这一点。

将不胜感激某人的专家意见!


1
请分享使用jQuery的方法。我遇到了同样的问题,但是使用CSS修复了Webkit。但是,Firefox提出了您的jQuery解决方案可以解决的问题。
iGbanam 2012年

1
我建议使用jscrollpane jQuery插件。
Dimitri Vorontzov

Firefox中的jScrollPane出现问题。jScrollPane在Chrome中可完美运行,但在Firefox 中,jScrollPane滚动条右侧有一个空的系统滚动条。应该只有一个滚动条
iGbanam 2012年

1
不对。如果有,那您在某处做错了。
Dimitri Vorontzov

Answers:


239

截至2018年底,Firefox中现在提供有限的自定义功能!

查看以下答案:

这是背景信息:https : //bugzilla.mozilla.org/show_bug.cgi?id=1460109


没有Firefox ::-webkit-scrollbar和朋友等效。

您必须坚持使用JavaScript。

很多人都希望使用此功能,请参见:https : //bugzilla.mozilla.org/show_bug.cgi?id=77790


就JavaScript替代品而言,您可以尝试:


2
谢谢,ThirtyDot。但是有一个问题:-moz-appearance:scrollbartrack-vertical和其他相关的CSS扩展如何?也许可以某种方式使用它们?
Dimitri Vorontzov 2011年

2
不能。不幸的是,没有任何可能的值-moz-appearance可以帮助您。"The -moz-appearance CSS property is used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme."-您将只获得一个本地滚动条。
2011年

15
以防万一有人阅读此书需要一个实用的解决方案,我最终使用了jscrollpane jQuery插件。
Dimitri Vorontzov 2011年

1
@JacquesMathieu,我明白你的意思了。虽然这不是Baron的错,但是如果我下载页面并阻止Baron初始化,该错误仍然会发生。因此,看起来Chrome在这里是有问题的。
thephpdev

3
drafts.c​​sswg.org/css-scrollbars-1是该规范的第1阶段开始,但默认情况下已在Firefox Nightly中启用。
挪威

53

Firefox 64添加了对规范草案CSS滚动条模块级别1的支持,该模块添加了的两个新属性scrollbar-width并且scrollbar-color可以对滚动条的显示方式进行一些控制。

您可以设置scrollbar-color为以下值之一(来自MDN的描述):

  • auto 在没有其他任何相关滚动条颜色属性的情况下,滚动条的轨道部分的默认平台渲染。
  • dark 显示深色的滚动条,它可以是平台提供的深色滚动条,也可以是深色的自定义滚动条。
  • light 显示一个浅色滚动条,它可以是平台提供的滚动条的浅色变体,也可以是具有浅色的自定义滚动条。
  • <color> <color> 将第一种颜色应用于滚动条滑块,将第二种颜色应用于滚动条轨道。

请注意,Firefox当前未实现darklight值。

macOS注意事项:

macOS默认的自动隐藏半透明滚动条无法使用此规则着色(它们仍然根据背景选择自己的对比色)。仅永久显示的滚动条(系统偏好设置>显示滚动条>始终)是彩色的。

视觉演示:

您可以设置scrollbar-width为以下值之一(来自MDN的描述):

  • auto 平台的默认滚动条宽度。
  • thin 提供该选项的平台上的滚动条宽度变薄,或者滚动条的宽度比默认平台滚动条的宽度薄。
  • none 没有显示滚动条,但是该元素仍然可以滚动。

您还可以根据规格设置特定的长度值。两者thin和特定长度都可能无法在所有平台上执行任何操作,而确切的作用是特定于平台的。特别是,Firefox当前似乎不支持特定的长度值(有关其错误跟踪器的评论似乎证实了这一点)。该thinkeywork确实出现了但是很好的支持,与-至少MacOS和Windows的支持。

可能值得注意的是,scrollbar-width在将来的草稿中将考虑删除length值选项和整个属性,如果发生这种情况,则可能在将来的版本中从Firefox中删除此特定属性。

视觉演示:


感谢您的回答。我已经更新了我接受的答案以推广此答案(以及其他相关答案),以便人们更有可能看到它。
三十

1
这基本上是三周前卢卡(Luca)的回答
乔什·哈布达斯

@JoshHabdas该答案包含的兼容性或用法信息几乎不一样。我创建此答案是因为其他答案没有我想要的重要信息。
亚历山大·奥玛拉19'Feb

1
您可以给他们功劳,建议反馈或考虑编辑他们的答案。
乔什·哈布达斯

2
@JoshHabdas好吧,已经有5个人发现它很有用,并且其中包含Web上其他任何地方都找不到的信息,所以我不同意。
亚历山大·奥玛拉19'Feb

43

我可以提供替代方法吗?

没有脚本,只有标准化的CSS样式和一点点创造力。简短答案-隐藏现有浏览器滚动条的某些部分,这意味着您保留了所有功能。

.scroll_content {
    position: relative;
    width: 400px;
    height: 414px;
    top: -17px;
    padding: 20px 10px 20px 10px;
    overflow-y: auto;
}

有关演示和更深入的说明,请在此处检查...

jsfiddle.net/aj7bxtjz/1/


7
不幸的是,这没有回答问题。Dimitri尝试设置滚动条的样式,而不是隐藏它。
stvnrynlds 2015年

14
那是4年前(我知道),所以我确定他现在已经做了一些事情。但是,该主题今天仍然有意义-尽管其他浏览器允许对滚动条进行某种“非法”修改,但FF则不然。这就是为什么我决定发布它的原因,并且前端结果是视觉上样式化的滚动条,而不管其实现方式是否隐藏了它的一部分。
Tomaz,2015年

我喜欢这个解决方案,除了带有绝对定位的所有额外标记(使可变大小的东西成为噩梦),再加上您无法实际更改样式,您只是掩盖/隐藏了现有滚动条的元素-如果我想要绿色的条形,那就太糟糕了!
RozzA

3
是的,四年后,它的意义不在于回答OP的问题,而是在于它对社区的贡献。
tmthyjames,2015年

3
问题的实质是某些渲染引擎提供的解决方案是非标准的。这是最能解决我的问题的问题,也是我一直在寻找的答案。
FilipDupanović16年

36

我以为我可以分享我的发现,以防有人考虑使用JQuery插件来完成这项工作。

我给了JQuery自定义滚动条。它非常漂亮,可以进行一些平滑的滚动(具有滚动惯性),并且可以调整许多参数,但是对我而言,这最终占用了CPU太多的资源(并且为DOM增加了很多)。

现在,我可以使用完美滚动条。它简单,轻巧(6KB),到目前为止,它做得不错。据我所知,它根本不占用CPU,并且对您的DOM几乎没有增加。它只有几个参数需要调整(wheelSpeed和wheelPropagation),但这只是我所需要的,它可以很好地处理滚动内容的更新(例如加载图像)。

PS我确实快速浏览过JScrollPane,但是@simone是正确的,现在有点过时了,还有PITA。


3
还有触控板滚动模拟器 -这是twitch.tv使用的。
forivall 2014年

1
完美的滚动条实际上​​非常好。用尽其他许多选项之后,我发现它是最佳解决方案。感谢您提出建议。
Leonard Teo 2014年

nanoScroller的确还不错,而且相对精益。jamesflorentino.github.io/nanoScrollerJS与沉重的JS插件相对,此插件只是隐藏了本机滚动条,并使用本机'scroll'事件显示了另一种滚动条
Danny R

1
我一直避免使用所有的jquery解决方案,因为它们落后于速度较慢的计算机或压力
较大的

31

Firefox 64开始,可以使用新的规范来实现简单的Scrollbar样式(不如带有供应商前缀的Chrome那样完整)。

此示例中,可以看到一个解决方案,该解决方案结合了不同的规则以解决Firefox和Chrome的最终结果相似(不相等)的情况(例如,使用原始的Chrome规则):

关键规则是:

对于Firefox

.scroller {
  overflow-y: scroll;
  scrollbar-color: #0A4C95 #C2D2E4;
}

对于Chrome

.scroller::-webkit-scrollbar {
    width: 15px;
    height: 15px;
}

.scroller::-webkit-scrollbar-track-piece  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb:vertical {
    height: 30px;
    background-color: #0A4C95;
}

请注意,关于您的解决方案,可以使用以下更简单的Chrome规则:

.scroller::-webkit-scrollbar-track  {
    background-color: #C2D2E4;
}

.scroller::-webkit-scrollbar-thumb {
    height: 30px;
    background-color: #0A4C95;
}

最后,为了在Firefox中也隐藏滚动条中的箭头,当前必须使用以下规则将其设置为“ thinscrollbar-width: thin;


1
看起来IE 5.5可能毕竟已经正确了。:)
Josh Habdas


0

它以用户风格工作,似乎不适用于网页。我还没有找到Mozilla的官方指示。尽管它可能在某些时候可行,但Firefox对此没有官方支持。该错误仍然开放https://bugzilla.mozilla.org/show_bug.cgi?id=77790

scrollbar {
/*  clear useragent default style*/
   -moz-appearance: none !important;
}
/* buttons at two ends */
scrollbarbutton {
   -moz-appearance: none !important;
}
/* the sliding part*/
thumb{
   -moz-appearance: none !important;
}
scrollcorner {
   -moz-appearance: none !important;
   resize:both;
}
/* vertical or horizontal */
scrollbar[orient="vertical"] {
    color:silver;
}

有关详细信息,请访问http://codemug.com/html/custom-scrollbars-using-css/


2
我尝试过与您编写的相同,但在FF中不起作用,请检查jsfiddle.net/gGbkY/1 我是否缺少某些内容?
Satinder singh

它以用户风格工作,似乎不适用于网页。我还没有找到Mozilla的官方指示。
2013年

1
请检查相同的链接:它不再起作用
Krunal Shah 2014年

3
用户风格是什么?
Marecky

您链接的错误是17年前报告的,至今尚未分配。我认为可以肯定地说FF将永远不支持隐藏本机滚动条。
Sterling Bourne

-2
@-moz-document url-prefix(http://),url-prefix(https://) {
    scrollbar {
       -moz-appearance: none !important;
       background: rgb(0,255,0) !important;
    }
    thumb,scrollbarbutton {
       -moz-appearance: none !important;
       background-color: rgb(0,0,255) !important;
    }

    thumb:hover,scrollbarbutton:hover {
       -moz-appearance: none !important;
       background-color: rgb(255,0,0) !important;
    }
    scrollbarbutton {
       display: none !important;
    }
    scrollbar[orient="vertical"] {
      min-width: 15px !important;
    }
}

5
您提供的代码blob几乎没有描述其作用或作用方式的信息。
乔什·哈布达斯
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.