• 滚动条样式修改


    前言

    浏览器中的滚动条样式大家一定都不陌生,其样式并不好康。可能很多小伙伴还不知道,这个东东的样式也可以修改(仅支持部分现代浏览器),本次就来带大家用 CSS 修改一下它的样式。

    一、认识滚动条

    首先我们先来简单看一下滚动条是由哪几部分组成的:

    滚动条的组成.png

    当横向和纵向都有滚动条时,还会有一个交汇的部分(见下图),但是因为一般网页开发中都不会让横向出现滚动条(因为影响美观),所以这个小方块出现的频率不算太高。下图为同时有垂直滚动条和水平滚动条时交汇的部分:

    当同时有垂直滚动条和水平滚动条时交汇的部分.png

    二、解决方案

    1. CSS伪类

    目前我们可以通过 CSS伪类 来实现滚动条的样式修改,以下为修改滚动条样式用到的CSS伪类:

    • ::-webkit-scrollbar — 整个滚动条
    • ::-webkit-scrollbar-button — 滚动条上的按钮 (上下箭头)
    • ::-webkit-scrollbar-thumb — 滚动条上的滚动滑块
    • ::-webkit-scrollbar-track — 滚动条轨道
    • ::-webkit-scrollbar-track-piece — 滚动条没有滑块的轨道部分
    • ::-webkit-scrollbar-corner — 当同时有垂直滚动条和水平滚动条时交汇的部分
    • ::-webkit-resizer — 某些元素的corner部分的部分样式(例:textarea的可拖动按钮)

    此处附上MDN文档传送门:https://developer.mozilla.org/zh-CN/docs/Web/CSS/::-webkit-scrollbar

    2. 兼容性问题

    当然这种解决方案还存在一定的兼容性问题,仅仅在支持WebKit的浏览器 (例如, 谷歌Chrome, 苹果Safari)可以使用。其实一看到 -webkit- 前缀就能明白它是 CSS3 中的 私有属性前缀 ,特定前缀是为了适配特定浏览器内核的。我们前往Can I use对其兼容性一探究竟:

    “::-webkit-scrollbar”属性兼容性.png

    由上图我们可以看到,兼容性并不算太好,不过我们也不用过于在意,毕竟我们只是规则的使用者而非制定者。

    三、进行测试

    1. 整个滚动条

    我们一条属性一条属性来进行测试,首先使用 ::-webkit-scrollbar 。先改变一下它的宽度,测试一下效果:

    /* 整个滚动条 */
    /* 宽高分别对应纵向滚动条和横向滚动条的宽度 */
    ::-webkit-scrollbar {
        width: 50px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    滚动条样式修改测试-1.gif

    我们可以看到,滚动条似乎“消失”了,但是仍然能靠鼠标拖动来滚动页面。我们再给它加一个背景色康康效果:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        width: 50px;
        background-color: skyblue;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    滚动条样式修改测试-2.png

    增加背景颜色后,滚动条又“出现”了。结合刚才的代码我们不难看出:设置 ::-webkit-scrollbar 属性会使滚动条默认样式失效。既然如此,我们就必须结合其他属性一起使用。

    2. 滚动条上的箭头按钮

    我们来使用一下 ::-webkit-scrollbar-button 属性,发现当此属性单独使用时无任何效果:

    /* 滚动条上的箭头按钮 */
    ::-webkit-scrollbar-button {
        background-color: slateblue;
    }
    
    • 1
    • 2
    • 3
    • 4

    滚动条样式修改测试-3.png

    于是乎我们加上之前的代码再试试:

    滚动条样式修改测试-4.png

    我们可以看出,两个箭头的按钮位置的背景颜色发生了变化。看来,滚动条的其他伪类属性需要配合第一步中的 ::-webkit-scrollbar 才能生效。

    3. 滚动条上的滚动滑块

    我们用 ::-webkit-scrollbar-thumb 来改变滚动条中滑块的样式:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        width: 50px;
        background-color: skyblue;
    }
    
    /* 滚动条上的滚动滑块 */
    ::-webkit-scrollbar-thumb {
        background-color: orange;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    滚动条样式修改测试-5.gif

    4. 滚动条轨道

    ::-webkit-scrollbar-track 属性修改滚动条轨道样式:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        width: 50px;
        background-color: skyblue;
    }
    
    /* 滚动条上的滚动滑块 */
    ::-webkit-scrollbar-thumb {
        background-color: orange;
    }
    
    /* 滚动条轨道 */
    ::-webkit-scrollbar-track {
        background-color: hotpink;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    滚动条样式修改测试-6.png

    通过效果图我们可以发现,设置的滚动条轨道背景色遮住了设置的整个滚动条的背景色(天蓝)。那是否可以实现两种背景色里外嵌套的效果呢,目前做出了几种尝试都没有效果,只能暂时放弃,以下为经测试未实现嵌套背景色效果代码:

    /* 未实现背景色嵌套效果代码 */
    ::-webkit-scrollbar {
        /* 无法通过 padding 实现 */
        padding: 4px;
        width: 50px;
        background-color: skyblue;
        box-sizing: border-box;
    }
    
    ::-webkit-scrollbar-track {
        /* 无法通过调整宽度实现 */
        width: 80%;
        background-color: hotpink;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    既然如此,我们如果需要调整滚动条的背景颜色,只需要在 ::-webkit-scrollbar::-webkit-scrollbar-track 中任选其一即可。

    5. 滚动条没有滑块的轨道部分

    这次我们同时设置 ::-webkit-scrollbar-track::-webkit-scrollbar-track-piece 来看效果:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        width: 50px;
    }
    
    /* 滚动条上的滚动滑块 */
    ::-webkit-scrollbar-thumb {
        background-color: orange;
    }
    
    /* 滚动条轨道 */
    ::-webkit-scrollbar-track {
        background-color: hotpink;
    }
    
    /* 滚动条没有滑块的轨道部分 */
    ::-webkit-scrollbar-track-piece {
        background-color: purple;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    滚动条样式修改测试-7.png

    上述代码符合预期效果,但是我给滑块设置透明的背景色(transparent)则会全是 purple 颜色,也不会出现滑块底部呈现 pink 颜色。所以,如果要改背景色还是选择轨道来修改吧。

    6. 测试总结

    1. 设置 ::-webkit-scrollbar 属性会使滚动条默认样式失效
    2. 其他修改滚动条样式的私有属性需要配合 ::-webkit-scrollbar 属性使用
    3. 如果要设置滚动条背景色, ::-webkit-scrollbar::-webkit-scrollbar-track::-webkit-scrollbar-track-piece 三个属性设置一个即可。

    四、开始换装

    1. 纯色系滚动条

    在研究过滚动条修改的 CSS 属性后我们终于可以开始动工了,先来仿照Element中的滚动条样式,修改一个纯色系滚动条:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        /* 对应纵向滚动条的宽度 */
        width: 10px;
        /* 对应横向滚动条的宽度 */
        height: 10px;
    }
    
    /* 滚动条上的滚动滑块 */
    ::-webkit-scrollbar-thumb {
        background-color: #49b1f5;
        border-radius: 32px;
    }
    
    /* 滚动条轨道 */
    ::-webkit-scrollbar-track {
        background-color: #dbeffd;
        border-radius: 32px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    滚动条样式修改测试-8.gif

    效果还不错,比默认的样式要好上不少。此处使用蓝色,实际开发中可以使用项目的主题色作为滚动条的配色参考。

    2. 花纹系滚动条

    我们可以利用 background-image 这一属性来实现滚动条的花纹效果(此处效果非本人原创),直接上代码:

    /* 整个滚动条 */
    ::-webkit-scrollbar {
        width: 10px;
        height: 10px;
    }
    
    /* 滚动条上的滚动滑块 */
    ::-webkit-scrollbar-thumb {
        background-color: #49b1f5;
        /* 关键代码 */
        background-image: -webkit-linear-gradient(45deg,
                rgba(255, 255, 255, 0.4) 25%,
                transparent 25%,
                transparent 50%,
                rgba(255, 255, 255, 0.4) 50%,
                rgba(255, 255, 255, 0.4) 75%,
                transparent 75%,
                transparent);
        border-radius: 32px;
    }
    
    /* 滚动条轨道 */
    ::-webkit-scrollbar-track {
        background-color: #dbeffd;
        border-radius: 32px;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    滚动条样式修改测试-9.gif

    感觉效果棒棒哒(前提是喜欢花里胡哨的人),心动不如行动,赶紧Copy下来备用吧!

    参考资料

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    Docker简介与安装
    Linux(openssl):解析证书
    番外篇 | 利用华为2023最新Gold-YOLO中的Gatherand-Distribute对特征融合模块进行改进
    第四节唯物辩证法(两大总特征)
    MySQL中json类型,你使用过吗
    虚幻4学习笔记(14)界面切换、局域网联机
    第7章:系统架构设计基础知识-软件架构风格
    【开源】基于Vue.js的康复中心管理系统
    视频编码-码率控制CQP/CRF/ABR/CBR/VBV
    计算机毕业设计Javavue学习视频课程网站(源码+系统+mysql数据库+lw文档)
  • 原文地址:https://blog.csdn.net/m0_67403013/article/details/126081491