修改浏览器滚动条样式

14 篇文章 6 订阅
6 篇文章 0 订阅
修改浏览器滚动条样式

因为在现在的大部分项目中很多都用到了滚动条,有时候用到模拟的滚动条,现在说下滚动条的CSS也能解决,但总的来说css仍然有点局限,那必然就会有js方法去实现,今天我们会对css控制和js控制滚动条样式进行一个全面的总结。
假设:在使用js修改浏览器样式的时候,是通过手动重新画了滚动条,而不是原生的滚动条

一:webkit的CSS设置滚动条
1.1 主要有下面7个属性
::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的
::-webkit-scrollbar-button 滚动条两端的按钮
::-webkit-scrollbar-track  外层轨道
::-webkit-scrollbar-track-piece  内层滚动槽
::-webkit-scrollbar-thumb 滚动的滑块
::-webkit-scrollbar-corner 边角
::-webkit-resizer 定义拖动块的样式

如下面代码,我们进行对窗口中滚动条进行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
        ::-webkit-scrollbar
        {
            width: 16px;
            height: 16px;
            background-color: #7af5cf;/*//背景色*/
        }

        /*定义滚动条轨道 内阴影+圆角*//* 滚动槽 */
        ::-webkit-scrollbar-track
        {
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
            border-radius: 10px;
            background-color: #4e3cf5;/*滚动条槽的颜色*/
        }

        /*定义滑块 内阴影+圆角*//* 滚动条滑块 */
        ::-webkit-scrollbar-thumb
        {
            border-radius: 10px;
            -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
            background-color: #555;
        }
        /*交互时样式设置*/
        ::-webkit-scrollbar-thumb:window-inactive {
            background: rgba(157, 178, 255, 0.82);
            width: 10px;
            height: 10px;
            border: 6px;
        }
        /* 两边按钮设置*/
        ::-webkit-scrollbar-button {
            width: 10px;
            height: 10px;
            border: 2px;
            background: #d3b71d;
        }
        ::-webkit-scrollbar-button:horizontal:decrement:hover {
            /*当鼠标在水平滚动条递减属性的按钮上的状态,在该文件中就只有水平方向的第一个按钮*/
            /* decrement 表示递减的碎片 */
            width: 10px;
            height: 10px;
            border: 6px;
            background: #d3150b;
        }
        /*内层轨道,滚动条中间部分(除去),滚动槽颜色可能会遮挡该颜色*/
        ::-webkit-scrollbar-track-piece {
            /*background: #29d32f;*/
        }
        /*两个滚动条的交汇处*/
        ::-webkit-scrollbar-corner {
            width: 10px;
            height: 10px;
            border: 2px;
            background: #bdd39b;
        }

        ::-webkit-scrollbar-track-piece:start {
            /*滚动条上半边或左半边*/
            width: 10px;
            height: 10px;
            border: 2px;
            background: #d1a2d3;
        }
        /*----*/
        /* 定义div布局 */
        .container {
            height: 400px;
            width: 300px;
            border: 1px solid darkred;
            overflow: auto;
        }
        .child1 {
            height: 700px;
            width: 700px;
            border: 1px solid #6c8b40;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="child1"></div>
</div>
</body>
</html>

如上面代码,是对页面属性的测试,结果如下图所示,通过颜色进行区分各个属性的功能,你需要做的只是在功能区填写css样式,就可以了:
滚动条显示结果

1.2 详细设置

定义滚动条就是利用伪元素与伪类,那什么是伪元素和伪类呢?
伪类大家应该很熟悉:link,:focus,:hover,此外CSS3中又增加了许多伪类选择器,如:nth-child,:last-child,:nth-last-of-type()等。

CSS中的伪元素大家以前看过::first-line,:first-letter,:before,:after。那么在CSS3中,伪元素进行了调整,在以前的基础上增加了一个也就是现在变成了::first-letter,::first-line,::before,::after,另外CSS3还增加了一个::selection。两个::和一个在css3中主要用来区分伪类伪元素

webkit的伪类和伪元素的实现很强,可以把滚动条当成一个页面元素来定义,再结合一些高级的CSS3属性,比如渐变、圆角、RGBa等等。然后如果有些地方要用图片,可以把图片也可以转换成Base64,不然每次都得加载那个多个图片,增加请求数。

任何对象都可以设置:边框、阴影、背景图片等等,创建的滚动条任然会按照操作系统本身的设置来完成其交互的行为。

:horizontal
//horizontal伪类适用于任何水平方向上的滚动条
:vertical
//vertical伪类适用于任何垂直方向的滚动条
:decrement
//decrement伪类适用于按钮和轨道碎片。表示递减的按钮或轨道碎片,例如可以使区域向上或者向右移动的区域和按钮
:increment
//increment伪类适用于按钮和轨道碎片。表示递增的按钮或轨道碎片,例如可以使区域向下或者向左移动的区域和按钮
:start
//start伪类适用于按钮和轨道碎片。表示对象(按钮 轨道碎片)是否放在滑块的前面
:end
//end伪类适用于按钮和轨道碎片。表示对象(按钮 轨道碎片)是否放在滑块的后面
:double-button
//double-button伪类适用于按钮和轨道碎片。判断轨道结束的位置是否是一对按钮。也就是轨道碎片紧挨着一对在一起的按钮。
:single-button
//single-button伪类适用于按钮和轨道碎片。判断轨道结束的位置是否是一个按钮。也就是轨道碎片紧挨着一个单独的按钮。
:no-button
no-button伪类表示轨道结束的位置没有按钮。
:corner-present
//corner-present伪类表示滚动条的角落是否存在。
:window-inactive
//适用于所有滚动条,表示包含滚动条的区域,焦点不在该窗口的时候。

上面就是对滚动条属性的详细设置,如下面代码,就是对伪类:start的使用

        ::-webkit-scrollbar-track-piece:start {
            /*滚动条上半边或左半边*/
            width: 10px;
            height: 10px;
            border: 2px;
            background: #d1a2d3;
        }

如下面代码,就是对伪类:horizontal,:decrement,:hover 的使用

        ::-webkit-scrollbar-button:horizontal:decrement:hover {
            /*当鼠标在水平滚动条递减属性的按钮上的状态,在该文件中就只有水平方向的第一个按钮*/
            /* decrement 表示递减的碎片 */
            width: 10px;
            height: 10px;
            border: 6px;
            background: #d3150b;
        }

其他的使用可参见文章:https://www.cnblogs.com/520yang/articles/5098352.html
demo:http://www.xuanfengge.com/demo/201311/scroll/css3-scroll.html

二:IE下面的CSS设置滚动条

IE下面就比较简单那了,自定义的项目比较少,全是对颜色的设置。

scrollbar-arrow-color: color; /*三角箭头的颜色*/
scrollbar-face-color: color; /*立体滚动条的颜色(包括箭头部分的背景色)*/
scrollbar-3dlight-color: color; /*立体滚动条亮边的颜色*/
scrollbar-highlight-color: color; /*滚动条的高亮颜色(左阴影?)*/
scrollbar-shadow-color: color; /*立体滚动条阴影的颜色*/
scrollbar-darkshadow-color: color; /*立体滚动条外阴影的颜色*/
scrollbar-track-color: color; /*立体滚动条背景颜色*/
scrollbar-base-color:color; /*滚动条的基色*/

百度经验

三: 使用jquery进行自定义滚动条样式

为了一致的用户体验,有时我们就不得不放弃使用部分浏览器提供的CSS接口来定制滚动条,转而寻求更佳的代替方案。
其中的一中方案是使用jQuery插件,jquery-custom-content-scroller。
要是您想了解jQuery-custom-content-scroller的具体使用方法,请移步到:
官网地址: http://manos.malihu.gr/jquery-custom-content-scroller/
github地址:github地址
下面我就jQuery滚动条插件的使用作一下简单介绍:
第一步:在内容的顶部引入滚动条相应的样式表文件和jquery的库文件,jquery插件jquery.mcustomscrollbar文件。

    <link rel="stylesheet" type="text/css" href="jquery.mCustomScrollbar.min.css" >
    <script src="./jquery-1.9.1.min.js"></script>
    <script src="./jquery.mCustomScrollbar.concat.min.js"></script>

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

<script>
  (function($){
    $(window).load(function(){
      $(".container").mCustomScrollbar(
        {
          axis:"yx", // horizontal scrollbar,设置水平和垂直
          theme:"dark" //设置滚动条主题
        }
      );
    });
  })(jQuery);
</script>

值得注意的是:在这里需要我们自己去下载jquery和其他要引入的插件
,当然最好的方法是下载链接处下载:
https://github.com/malihu/malihu-custom-scrollbar-plugin/archive/master.zip

在这个包里边包含了压缩和未压缩的插件包、插件css、jquery,只要复制到同一级文件下引入即可
完整代码如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" type="text/css" href="jquery.mCustomScrollbar.min.css" >
    <script src="./jquery-1.9.1.min.js"></script>
    <script src="jquery.mCustomScrollbar.concat.min.js"></script>
    <style>
        /*----*/
        /* 定义div布局 */
        .container {
            height: 400px;
            width: 300px;
            border: 1px solid darkred;
            overflow: auto;
        }
        .child1 {
            height: 700px;
            width: 700px;
            border: 1px solid #6c8b40;
        }
    </style>
</head>
<script>
  (function($){
    $(window).load(function(){
      $(".container").mCustomScrollbar(
        {
          axis:"yx", // horizontal scrollbar,设置水平和垂直
          theme:"dark" //设置滚动条主题
        }
      );
    });
  })(jQuery);
</script>
<body>
<div class="container">
    <div class="child1"></div>
</div>
</body>
</html>

在火狐浏览器中效果如下所示:
jquery火狐效果
在谷歌中如下所示:
jquery谷歌浏览器效果
从上面代码中我们可以看出,我们只需要通过给mCustomScrollbar
方法传递参数对象即可修改滚动条的样式,那么都有哪些配置呢?如下面介绍:

3.1 Configuration

你能够配置你的滚动条通过传递参数的方式,用法如下所示:
Usage $(selector).mCustomScrollbar({ option: value });

语法说明
setWidth: false设置您的内容的宽度(覆盖CSS宽度),在像素值(整数)或百分比(字符串)。
setHeight: false设置您的内容的高度(覆盖CSS高度),在像素值(整数)或百分比(字符串)。
setTop: 0设置内容的初始CSS顶级属性,接受字符串值(CSS顶部位置)。例如:置顶:“100px”。
setLeft: 0设置内容的初始CSS左属性,接受字符串值(CSS左位置)。例如:setleft:“100px”。
axis: “string”定义内容的滚动轴(的滚动条类型添加到水平、垂直和/元素:)。有效值:“Y”、“X”、“Y”。

还有一些其他的属性配置,在这里就不意义介绍了,可参见
其他属性配置: http://manos.malihu.gr/jquery-custom-content-scroller/#configuration-section

3.2 Plugin methods

插件方法也有多个,比如

update

Usage $(selector).mCustomScrollbar(“update”);
调用Update方法手动更新现有的滚动条来容纳新的内容或调整大小的元素(S)。这种方法是通过默认的脚本自动调用(通过updateoncontentresize选项)当元素本身,其内容或滚动条大小的变化。

scrollTo

用法:$(selector).mCustomScrollbar(“scrollTo”,position);
你可以使用这个方法自动的滚动到你想要滚动到的位置。这个位置可以使用字符串(例如 “#element-id”,“bottom” 等)描述或者是一个数值(像素单位)。
下面的例子将会滚动到最下面的对象

$(“.content”).mCustomScrollbar(“scrollTo”,”last”);

scrollTo 方法的参数

$(selector).mCustomScrollbar(“scrollTo”,String); | 滚动到某个对象的位置,字符串型的值可以是 id 或者 class 的名字
$(selector).mCustomScrollbar(“scrollTo”,”top”); | 滚动到顶部(垂直滚动条)
$(selector).mCustomScrollbar(“scrollTo”,”bottom”); | 滚动到底部(垂直滚动条)
$(selector).mCustomScrollbar(“scrollTo”,”left”); | 滚动到最左边(水平滚动条)
$(selector).mCustomScrollbar(“scrollTo”,”right”); | 滚动到最右边(水平滚动条
$(selector).mCustomScrollbar(“scrollTo”,”first”); | 滚动到内容区域中的第一个对象位置
$(selector).mCustomScrollbar(“scrollTo”,”last”); | 滚动到内容区域中的最后一个对象位置
$(selector).mCustomScrollbar(“scrollTo”,Integer); | 滚动到某个位置(像素单位)

scrollTo 方法还有两个额外的选项参数
moveDragger: Boolean | 滚动滚动条的滑块到某个位置像素单位,值:true,flase。
例如:

$(selector).mCustomScrollbar(“scrollTo”,200,{ moveDragger:true });

callback:Boolean | 执行回调函数当 scroll-to 完成之后,值:true,false
例如:

$(selector).mCustomScrollbar(“scrollTo”,200,{ callback:true });
disable

用法:$(selector).mCustomScrollbar(“disable”);
调用 disable 方法去使滚动条不可用。如果想使其重新可用,调用 update方法。disable 方法使用一个可选参数(默认 false)你可以设置 true 如果你想重新让内容区域滚动当 scrollbar 不可用时。
例如:

$(“.content”).mCustomScrollbar(“disable”,true);
destroy

用法:$(selector).mCustomScrollbar(“destroy”);
调用 destroy 方法可以移除某个对象的自定义滚动条并且恢复默认样式

3.3 Scrollbar styling & themes

当然,我们最注意的是样式的改变,如下面说明:
对于样式,我们既能够使用插件的样式,也能够进行自定义样式
######1):使用插件本身的只需直接使用即可,如下面代码;

$(selector).mCustomScrollbar({
  theme:"dark"
});

具体的主题效果可以查看这里主题效果,然后将名称改变即可
######2):自定义主题效果
如下所示创建主题my-scroll-css.css并修改配置调用地方的主题名称。

$(selector).mCustomScrollbar({
    theme:"my-scroll-css"
});

在my-scroll-css.css样式中书写如下代码:
在使用的时候,需要将这个css样式导入到所使用的文件中
<link rel="stylesheet" type="text/css" href="my-scroll-css.css" >

.mCS-my-scroll-css.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: red; }
.mCS-my-scroll-css.mCSB_scrollTools .mCSB_draggerRail{ background-color: #93ff85; }

如上面代码所示,在第一行中代码.mCS-my-scroll-css.mCSB_scrollTools中的my-scroll-css 就是我们自定义的主题名,也就是mCustomScrollbar中theme后面的值。
修改后效果如下所示:
自定义滚动条
同样,我们可以复制官方的样式进行自己的修改。
具体参数如下说明:
属性说明

3.4 在其他框架中使用

安装

npm: npm install malihu-custom-scrollbar-plugin

Bower: bower install malihu-custom-scrollbar-plugin

如何使用

Manual: $(selector).mCustomScrollbar();

Browserify:

var $ = require('jquery');
require('malihu-custom-scrollbar-plugin')($);

webpack:

npm install imports-loader
npm install jquery-mousewheel
npm install malihu-custom-scrollbar-plugin

module.exports = {
    module: {
        loaders: [
            { test: /jquery-mousewheel/, loader: "imports?define=>false&this=>window" },
            { test: /malihu-custom-scrollbar-plugin/, loader: "imports?define=>false&this=>window" }
        ]
    }
};

var $ = require('jquery');
require("jquery-mousewheel")($);
require('malihu-custom-scrollbar-plugin')($);

要求:

jQuery version 1.6.0 or higher

浏览器兼容性

  • Internet Explorer 8+
  • Firefox
  • Chrome
  • Opera
  • Safari
  • iOS
  • Android
  • Windows Phone

还有其他许多许多插件去修改滚动条:jquery自定义滚动条总结

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
修改各个浏览器滚动条样式,你可以使用 CSS 的 `::-webkit-scrollbar` 伪元素来针对 WebKit 内核的浏览器(如 Chrome、Safari)进行样式设置,使用 `::-moz-scrollbar` 伪元素来针对 Firefox 进行样式设置,而对于其他浏览器,可以使用一些 JavaScript 库来实现自定义滚动条样式。 下面是一个示例代码,演示如何修改滚动条样式: ```css /* WebKit browsers */ ::-webkit-scrollbar { width: 10px; /* 滚动条宽度 */ } ::-webkit-scrollbar-track { background: #f1f1f1; /* 背景颜色 */ } ::-webkit-scrollbar-thumb { background: #888; /* 滑块颜色 */ } ::-webkit-scrollbar-thumb:hover { background: #555; /* 鼠标悬停时滑块颜色 */ } ``` ```css /* Firefox */ /* 注意:Firefox 需要在 `userChrome.css` 文件中设置,而不是在普通的 CSS 文件中 */ /* 你可以在 Firefox 的地址栏中输入 "about:support" 查找 userChrome.css 文件的位置 */ /* 滚动条宽度 */ scrollbar-width: thin; /* 背景颜色 */ scrollbar-color: #f1f1f1 transparent; /* 滑块颜色 */ scrollbar-color: #888 transparent; /* 鼠标悬停时滑块颜色 */ scrollbar-color: #555 transparent; ``` 对于其他浏览器,你可以使用一些 JavaScript 库,如 `perfect-scrollbar`、`simplebar` 等来实现自定义滚动条样式。你可以按照这些库的文档进行安装和使用。 注意:不同浏览器可能对滚动条样式的支持程度不同,一些浏览器可能无法完全自定义滚动条样式。因此,在实际应用中,最好进行兼容性测试,并提供替代方案以确保用户体验的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suwu150

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值