前段时间,到网上找素材时,看到了一个很个性的滚动条式,打开Chrome的调试工具看了一下,发现不是用JavaScript来模拟实现的,觉得 有必要折腾一下。于是在各大浏览器中对比了一下,发现只用Chrome适用,也就是说这个用的是Chrome的私有CSS属性。便百之谷之后,发现原来不 仅仅只用Chrome,其它的浏览器在不同程度上支持自定义滚动条样式的。下面是我不断测试的结果,若有错误或不全,请在评论里面给出,我会立马更正;若 有更好的方案,你可以留言,让大家都开开眼界。。。。。。

自定义IE浏览器滚动条样式

追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了(好像最开始支持的版本是IE5.5)。下面列出了多个版本的支持性况:

滚动条样式 支持情况 支持浏览器版本 可否继承 描述
scrollbar-3dlight-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头左上边缘的颜色
scrollbar-highlight-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头左上边缘的颜色
scrollbar-face-color IE特有属性 IE5.5+ y 设置滚动框和滚动条箭头的颜色
scrollbar-arrow-color IE特有属性 IE5.5+ y 设置滚动条箭头的颜色
scrollbar-shadow-color IE特有属性 IE5.5+ y 设置滚动框的和滚动条箭头右下边缘的颜色
scrollbar-dark-shadow-color IE特有属性 IE5.5+ y 设置滚动条槽的颜色
scrollbar-base-color IE特有属性 IE5.5+ y 设置滚动条主要构成部分的颜色
scrollbar-track-color IE特有属性 IE5.5+ y 设置滚动条轨迹组成部分的颜色

为了有助于理解IE中滚动条样式的控制,你可以查看如下的图片:

经过不断的测试发现,在Win8 下面,有一部分样式都起着相同的作用。估计是因为在Win8中扁平化的界面设计而重新定议了系统中滚动条!以下是Win 8下面的滚动条样式,并写出了和CSS支持的情况:

以上所写的几个四个CSS属性,足以控制Win 8系统下,IE浏览器的滚动条样式了。但经过测试,发现,其它的四个属性仍然支持(主要是在以上几个属性空缺时,就会体现其作用)。具体如下:

  1. 关 于scrollbar-track-color,scrollbar-face-color与scrollbar-base-color。直接看英语单 词,你就也许能明白scroll-base-color是一个备用颜色,只要前两者未设置时,它就开始起作用了。但是你得注意,当scrollbar- base-color用来作scrollbar-track-color功能来用时,你会发现,实际颜色与设定的颜色要淡一点。不信你可以这样试试:只设 置一下scrollbar-base-color看看滚动条的效果。
  2. 关于scrollbar-dark-shadow-color属性,通过测试发现Win 8下IE10,IE11滚动条并没有改变。可能是win 8的滚动条重新定义了,导致没有了隐影了吧!(仅个人猜想)
  3. 通过观察我们发现,Win 8下的滚动条中,上箭头和下箭头后面的背景颜色都已经从scroll-face-color中脱离出来了,从属于scroll-track-color属性控制。

感觉IE浏览器滚动条自定制功能并不是很强,只能控制一样显示各个部分的颜色而已,像宽度,结构等都无法控制,要靠出个性点的滚动条,很难!很难!!!

自定义FireFox浏览器滚动条

在网上找了很多关于Firfox自定义浏览器滚动条的方法,发现firefox中却实是不支持的。发现了几篇说可以更改,自已也跟着代码写了几次(不知是我错了还是。。。),发现却是不起作用。以下是一点小的收获:

复制
  1. @-moz-document url-prefix(http://),url-prefix(https://) {
  2. /* 滚动条颜色 */
  3. scrollbar {
  4. -moz-appearance: none !important;
  5. background: rgb(0,255,0) !important;
  6. }
  7. /* 滚动条按钮颜色 */
  8. thumb,scrollbarbutton {
  9. -moz-appearance: none !important;
  10. background-color: rgb(0,0,255) !important;
  11. }
  12. /* 鼠标悬停时按钮颜色 */
  13. thumb:hover,scrollbarbutton:hover {
  14. -moz-appearance: none !important;
  15. background-color: rgb(255,0,0) !important;
  16. }
  17. /* 隐藏上下箭头 */
  18. scrollbarbutton {
  19. display: none !important;
  20. }
  21. /* 纵向滚动条宽度 */
  22. scrollbar[orient="vertical"] {
  23. min-width: 15px !important;
  24. }
  25. }

实测以上代码并不起作用。但也可能是我的浏览器的版本不对吧!你可以试试,要是有效的话,你可以把你的FF版本发表在文章评论里面。

下面给两个关于FF滚动条的讨论(你多少web开发者希望FF能够像webkit内核浏览器一样程度的来支持滚动条自定义):

webkit内核的浏览器滚动条定制

在所有浏览器,滚动条可定制性最强的当属webkit内核的浏览器了。因为源代码开放的原因,市面上基于webkit内核的浏览器也是很难穷举完。 例如有:Google Chrome、Opera(opera最近宣布使用webkit内核了)、360极速浏览器,猎豹浏览器等,搜狗浏览器······

下面我们来看一下webkit浏览器是如何强大的吧!

复制
  1. CSS
  2. ::-webkit-scrollbar { /* 1 */ }
  3. ::-webkit-scrollbar-button { /* 2 */ }
  4. ::-webkit-scrollbar-track { /* 3 */ }
  5. ::-webkit-scrollbar-track-piece { /* 4 */ }
  6. ::-webkit-scrollbar-thumb { /* 5 */ }
  7. ::-webkit-scrollbar-corner { /* 6 */ }
  8. ::-webkit-resizer { /* 7 */ }

以上CSS代码所管辖的区域对就关系:以上注释中的数字与下图中数字相对应。

上图正如如下所言:

  • ::-webkit-scrollbar        滚动条整体部分,其中的属性有width,height,background,border(就和一个块级元素一样)等。
  • ::-webkit-scrollbar-button      滚动条两端的按钮。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果。
  • ::-webkit-scrollbar-track         外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果。
  • ::-webkit-scrollbar-track-piece        内层轨道,滚动条中间部分(除去)。
  • ::-webkit-scrollbar-thumb               滚动条里面可以拖动的那部分
  • ::-webkit-scrollbar-corner               边角
  • ::-webkit-resizer                       定义右下角拖动块的样式

注意:对以上各个部分定义width,height时。有如下功能:若是水平滚动条,则width属性不起作用,height属性用来控制滚动条相应部分竖直方向高度;若是竖直滚动条,则height属性不起作用,width属性用来控制相应部分的宽度。

能过上面的不断的测试。在Chrome中,滚动条中的各个部分和DOM中块级元素是一样的。通过::-webkit-scrollbar等就类似于原来所说的CSS中的选择器。而{}中的属性,你就像控制一般块级元素一样简单(强大啊)。

请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。小天地,大世界是一个Web前端的技术博客。 主要是关于HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还包含一些PHP语言等的实用例子。

请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。小天地,大世界是一个Web前端的技术博客。 主要是关于HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还包含一些PHP语言等的实用例子。

请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。小天地,大世界是一个Web前端的技术博客。 主要是关于HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还包含一些PHP语言等的实用例子。

请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。小天地,大世界是一个Web前端的技术博客。 主要是关于HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还包含一些PHP语言等的实用例子。

对应的源代码如下:

CSS部分代码:

复制
  1. #scroll-1 {
  2. width:200px;
  3. height:200px;
  4. overflow:auto;
  5. }
  6. #scroll-1 div {
  7. width:400px;
  8. height:400px;
  9. } #scroll-1::-webkit-scrollbar {
  10. width:10px;
  11. height:10px;
  12. }
  13. #scroll-1::-webkit-scrollbar-button {
  14. background-color:#FF7677;
  15. }
  16. #scroll-1::-webkit-scrollbar-track {
  17. background:#FF66D5;
  18. }
  19. #scroll-1::-webkit-scrollbar-track-piece {
  20. background:url(http://www.lyblog.net/wp/wp-content/themes/mine/img/stripes_tiny_08.png);
  21. }
  22. #scroll-1::-webkit-scrollbar-thumb{
  23. background:#FFA711;
  24. border-radius:4px;
  25. }
  26. #scroll-1::-webkit-scrollbar-corner {
  27. background:#82AFFF;
  28. }
  29. #scroll-1::-webkit-scrollbar-resizer {
  30. background:#FF0BEE;
  31. }

HTML结构:

复制
  1. <div id='scroll-1'>
  2. <div >
  3. <p>请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。
  4. 小天地,大世界是一个Web前端的技术博客。 主要是关于
  5. HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还
  6. 包含一些PHP语言等的实用例子。</p>
  7. <p>请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。
  8. 小天地,大世界是一个Web前端的技术博客。 主要是关于
  9. HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还
  10. 包含一些PHP语言等的实用例子。</p>
  11. <p>请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。
  12. 小天地,大世界是一个Web前端的技术博客。 主要是关于
  13. HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还
  14. 包含一些PHP语言等的实用例子。</p>
  15. <p>请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。
  16. 小天地,大世界是一个Web前端的技术博客。 主要是关于
  17. HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还
  18. 包含一些PHP语言等的实用例子。</p>
  19. <p>请选择Webkit内核的浏览器才可以正常的看到滚动条的变化。
  20. 小天地,大世界是一个Web前端的技术博客。 主要是关于
  21. HTML 5,CSS 3,JavaScript,JQuery等。除此之外,还
  22. 包含一些PHP语言等的实用例子。</p>
  23. </div>
  24. </div>

通过以上,我们几乎就可以来重写网站的滚动条了,但是webkit提供的还有更多的伪类,可以定制更丰富滚动条样式。本文以下内容参考:https://www.webkit.org/blog/363/styling-scrollbars/

  • :horizontal     horizontal  伪类,主要应用于选择水平方向滚动条。
  • :vertical    vertical伪类主要是应用于选择竖直方向滚动条
  • :decrement    decrement伪类应用于按钮和内层轨道(track piece)。它用来指示按钮或者内层轨道是否会减小视窗的位置(比如,垂直滚动条的上面,水平滚动条的左边。)
  • :increment     increment伪类与和decrement类似,用来指示按钮或内层轨道是否会增大视窗的位置(比如,垂直滚动条的下面和水平滚动条的右边。)
  • :start    start伪类也应用于按钮和滑块。它用来定义对象是否放到滑块的前面。
  • :end     类似于start伪类,标识对象是否放到滑块的后面。
  • :double-button    该伪类可以用于按钮和内层轨道。用于判断一个按钮是不是放在滚动条同一端的一对按钮中的一个。对于内层轨道来说,它表示内层轨道是否紧靠一对按钮。
  • :single-button    类似于double-button伪类。对按钮来说,它用于判断一个按钮是否自己独立的在滚动条的一段。对内层轨道来说,它表示内层轨道是否紧靠一个single-button。
  • :no-button    用于内层轨道,表示内层轨道是否要滚动到滚动条的终端,比如,滚动条两端没有按钮的时候。
  • :corner-present    用于所有滚动条轨道,指示滚动条圆角是否显示。
  • :window-inactive    用于所有的滚动条轨道,指示应用滚动条的某个页面容器(元素)是否当前被激活。(在webkit最近的版本中,该伪类也可以用于::selection伪元素。webkit团队有计划扩展它并推动成为一个标准的伪类)

另外,:enabled、:disabled、:hover、和:active等伪类同样在滚动条中适用。

看了这些伪类,怎么也没有明白是什么意思,还是自已得写的试试。实践出真知嘛!你可以击接以下链接到官方演示DEMO(感觉可以学到很多东西的):http://trac.webkit.org/export/41842/trunk/LayoutTests/scrollbars/overflow-scrollbar-combinations.html

下面我自已尝试着去写的DEMO,不要嫌它太丑就好。

三国平分,终归一统

为了一致的用户体验,有时我们就不得不放弃使用部分浏览器提供的CSS接口来定制滚动条,转而寻求更佳的代替方案。

其中的一中方案是使用jQuery插件,jquery-custom-content-scroller。使用插件的好处是显而易见的,但是坏处也多得去了。要是您想了解jQuery-custom-content-scroller的具体使用方法,请移步到:http://manos.malihu.gr/jquery-custom-content-scroller/

下面我就jQuery滚动条插件的使用作一下简单介绍:

第一步:在内容的顶部引入滚动条相应的样式表文件和jquery的库文件,jquery插件jquery.mcustomscrollbar文件。代码如下:

复制
  1. <link rel="stylesheet" type="text/css" href="jquery.mCustomScrollbar.css" >
  2. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  3. <script src="jquery.mCustomScrollbar.concat.min.js"></script>

第二步:在要显示滚动条的元素(元素内容中必须要有溢出的块,否则就不会出现滚动条)上面,加入class="content",然后再加入以下代码:

复制
  1. <script>
  2. (function($){
  3. $(window).load(function(){
  4. $(".content").mCustomScrollbar();
  5. });
  6. })(jQuery);
  7. </script>

关于此插件的详细介绍,你可以访问官网,里面讲的相当详细,我就不再此多赘述。

自定义浏览器滚动条的样式,打造属于你的滚动条风格——兼容IE和webkit(ff不支持)的更多相关文章

  1. 如何自定义CSS滚动条的样式?

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表 本文会介绍CSS滚动条选择器,并在demo中展示如何在Webkit内核浏览器和IE浏览器中,自定义一个横向以及一个纵向的 ...

  2. CSS3自定义浏览器滚动条样式

    一个完整滚动条右以下部分组成: ::-webkit-scrollbar 滚动条整体部分,常用属性:width,height,background,border: ::-webkit-scrollbar ...

  3. Javascript和jquery事件--滚动条事件和自定义滚动条事件样式

    很想把滚动条事件跟鼠标滚轮事件放在一起,那就直接写在这一篇了.除了事件以外,对滚动条样式的调整也记在这里吧. 滚动条是浏览器的默认事件,使用overflow:auto/scroll都有可能出现,它的默 ...

  4. css 改变浏览器滚动条的样式

    /*滚动条样式*/ .innerbox::-webkit-scrollbar {/*滚动条整体样式*/ width: 4px; /*高宽分别对应横竖滚动条的尺寸*/ height: 4px; } .i ...

  5. 如何改变iframe滚动条的样式?

    如何改变iframe滚动条的样式? web前端开发 css javascript iframe html RayLiao 2014年11月19日提问 · 2014年11月20日更新 关注 关注 收藏 ...

  6. 优化浏览器默认scroll样式小技巧

    一个最简单的页面: <!DOCTYPE html> <html> <head> <title>优化scroll</title> <me ...

  7. 修改 div 的滚动条的样式

    修改 div 的滚动条的样式 需要用到浏览器专属的伪元素,没有万能的办法,支持的浏览器不是很多. 假设有一个(你已经)设好宽高.定好位的 div, <div class="group- ...

  8. 网页滚动条CSS样式

    滚动条样式主要涉及到如下CSS属性: overflow属性: 检索或设置当对象的内容超过其指定高度及宽度时如何显示内容 overflow: auto; 在需要时内容会自动添加滚动条overflow: ...

  9. 自定义checkbox, radio样式总结

    任务目的 深入了解html label标签 了解CSS边框.背景.伪元素.伪类(注意和伪元素区分)等属性的设置 了解CSS中常见的雪碧图,并能自己制作使用雪碧图 任务描述 参考 样例(点击查看),实现 ...

随机推荐

  1. C#统计网站访问总人数和当前在线人数

    一.打开vitualstudio2010,新建一个网站,然后添加新项,新建一个login.aspx和index.aspx页面.再添加新项,选择全局应用程序类,该页面为Global.asax. 第一步: ...

  2. 基于ATmgea8单片机设计的加热控制系统(转)

    源:http://blog.163.com/zhaojun_xf/blog/static/3005058020085102562729/ 1 引言 温度是工业生产中主要的被控参数之一,与之相关的各种温 ...

  3. 利用hibernate实现oracle(每张表的ID)自动增长

    设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence 例如创建一个序列:CREATE SEQUENCE DEPARTMENT_ID_SEQ MINVA ...

  4. drawRect & layoutSubviews 调用时间

    首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘.   layoutSubviews在以下情况下会被调用: 1.init初始化不会触发layoutSub ...

  5. Android CTS 测试总结【转】

    Android CTS 测试总结[转] 最近一直在做Android兼容性测试,根据Android官网给出的android-cts-manual 配置好了device后,开始测试. 首先配置软件环境: ...

  6. 启动ipython notebook(jupyter)

    启动本地notebook 随便找一个shell,在windows里,最简单的cmd.exe就行,键入: ipython.exe notebook

  7. android4.0下如何判断手机是否有底部物理按键(menu物理按键)

    某些手机底部是在触摸屏内部有软按键,就是如(back,home,menu 等)而有的手机底部(非屏幕内部)有物理按键,就是生产厂商不愿意有google自带的虚拟按键,而做的电容式的物理按键,如(bac ...

  8. Android Studio实现Service AIDL

    Android Studio实现Service AIDL [日期:2015-01-02] 来源:Linux社区  作者:teenyboy [字体:大 中 小]       今天要开发过程中要用到AID ...

  9. 读取excel数据 到 datagrid 出现 找不到可安装的ISAM

    读取excel数据 到 datagrid 出现:找不到可安装的ISAM       错误: 实在没有办法了 就仔细的查看了 一下数据链接字符串: string strConn = "Prov ...

  10. Linux iptables 防火墙详解

    0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些 ...