Vue项目修改浏览器滚动条样式
Vue
+Element
组件修改浏览器滚动条样式
前言:在Vue
项目中会有使用到滚动条的情况,但是会遇到原生滚动条的样式不满足UI
设计,因此需要改变滚动条的样式,下面使用两种方式来修改滚动条的样式,以Vue
项目举例
1.第一种利用Element
组件库
-
在
Vue
2.x的项目中我们可以利用Element UI
组件el-scrollbar
来改变滚动条的样式,虽然API
文档中并没有给出el-scrollbar
的使用方法,但可以正常使用的,使用方法如下:<template> <div class="outer"> <el-scrollbar style="height: 100%;" class="scrollbar-for" > <!-- 内容部分 --> ... </el-scrollbar> </div> </template> <script lang="less"> // 设置滚动条 .scrollbar-for { .el-scrollbar__wrap { overflow-x: hidden; // 底部横向滚动条进行隐藏 } } </script>
-
需要注意的是,使用滚动条组件时将需要滚动展示的内容包进组件内即可,如图中所示左侧的红色框为
el-row
就是包含在右侧红框内组件el-scrollbar
的el-scrollbar__view
里面,这样在超出指定范围height: 100%
的高度时会出现滚动条,这个组件并不是完美的会出现一下小问题,如数据更新后组件未更新的问题,不能像原生一样按住shif
键进行左右横向滚动的问题,这也可能是官方没有直接在API
文档中给出的原因
-
在
Vue
3.x的项目中,可以配合使用Element Plus
组件库中的Scrollbar
滚动条组件,也就是el-scrollbar
,这次在API
文档中给出了明确的文档可以进行参考,详见Scrollbar 滚动条,使用与Element UI
的el-scrollbar
相差无异(使用前记得关注一下组件库版本与安装的版本)
2.利用CSS
修改原生滚动条样式
-
如果使用的是
Vue
3.x的版本还是推荐使用Element Plus
组件库,如果你使用了Ant Design Vue
或者其它组件库,没有滚动条的组件库,又或是组件库的滚动条样式不满足设计的需要等原因,这时候就需要修改浏览器的原生滚动条了,下面就仿照el-scrollbar
的样式修改原生滚动条并全局使用,代码如下:<template> <div class="container"> ... </div> </template> ... <style scoped lang="less"> .container { height: 100%; overflow: auto; // 滚动条整体部分 &::-webkit-scrollbar { width: 6px; height: 6px; } // 滚动条的轨道的两端按钮,允许通过点击微调小方块的位置。 &::-webkit-scrollbar-button { display: none; } // 滚动条的轨道(里面装有Thumb) &::-webkit-scrollbar-track { background: transparent; } // 滚动条的轨道(里面装有Thumb) &::-webkit-scrollbar-track-piece { background-color: transparent; } // 滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条) &::-webkit-scrollbar-thumb { background: rgba(144, 147, 153, 0.3); cursor: pointer; border-radius: 4px; } // 边角,即两个滚动条的交汇处 &::-webkit-scrollbar-corner { display: none; } // 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件 &::-webkit-resizer { display: none; } } </style>
-
通过以上的样式设置在Chrome浏览器上就可以实现和组件库同样效果的滚动条了,而且原生滚动条支持按住
shift
可以进行横向滚动的操作,效果如下图所示:
-
但是打开Firefox浏览器后发现滚动条样式并没有生效,火狐提供了自己的
CSS
样式属性去设置滚动条的样式,比起谷歌可操作空间非常小,加上适配火狐的代码如下:<template> <div class="container"> ... </div> </template> ... <style scoped lang="less"> .container { height: 100%; overflow: auto; scrollbar-color: rgba(144, 147, 153, 0.3) transparent; /* 滑块颜色 滚动条背景颜色 */ scrollbar-width: thin; /* 滚动条宽度有三种:thin、auto、none */ // 滚动条整体部分 &::-webkit-scrollbar { width: 6px; height: 6px; } // 滚动条的轨道的两端按钮,允许通过点击微调小方块的位置。 &::-webkit-scrollbar-button { display: none; } // 滚动条的轨道(里面装有Thumb) &::-webkit-scrollbar-track { background: transparent; } // 滚动条的轨道(里面装有Thumb) &::-webkit-scrollbar-track-piece { background-color: transparent; } // 滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条) &::-webkit-scrollbar-thumb { background: rgba(144, 147, 153, 0.3); cursor: pointer; border-radius: 4px; } // 边角,即两个滚动条的交汇处 &::-webkit-scrollbar-corner { display: none; } // 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件 &::-webkit-resizer { display: none; } } </style>
-
在火狐浏览器上的效果如下:
-
关于IE的如何设置(就去说服UI吧),当然如果每个页面都要加这些样式属性上去就显得非常臃肿,可以直接在公共样式文件中加上,这里是
common.less
文件,需要滚动是通过设置overflow
的属性值即可,代码如下:*{ scrollbar-color: rgba(144, 147, 153, 0.3) transparent; /* 滑块颜色 滚动条背景颜色 */ scrollbar-width: thin; /* 滚动条宽度有三种:thin、auto、none */ // 滚动条整体部分 } *::-webkit-scrollbar { width: 6px; height: 6px; } // 滚动条的轨道的两端按钮,允许通过点击微调小方块的位置。 *::-webkit-scrollbar-button { display: none; } // 滚动条的轨道(里面装有Thumb) *::-webkit-scrollbar-track { background: transparent; } // 滚动条的轨道(里面装有Thumb) *::-webkit-scrollbar-track-piece { background-color: transparent; } // 滚动条里面的小方块,能向上向下移动(或往左往右移动,取决于是垂直滚动条还是水平滚动条) *::-webkit-scrollbar-thumb { background: rgba(144, 147, 153, 0.3); cursor: pointer; border-radius: 4px; } // 边角,即两个滚动条的交汇处 *::-webkit-scrollbar-corner { display: none; } // 两个滚动条的交汇处上用于通过拖动调整元素大小的小控件 *::-webkit-resizer { display: none; }
-
这样设置就可以完美解决滚动条样式问题了,至于如何关闭滚动条,代码如下:
div { scrollbar-width: none; &::-webkit-scrollbar { display: none; } }
到这里问题就解决了,如果有更好的方式,欢迎补充和讨论🌈
相关文章
- 41 Vue使用第三方动画库
- vue-element el-table 使用sortablejs拖拽排序
- vue 项目的开发流程
- Vue——vue中的双向数据绑定
- Vue项目--仓库数据请求的优化
- (4)打鸡儿教你Vue.js
- vue npm run dev 报错:missing script:dev
- vue项目js和css文件名避免浏览器缓存再vue.config.js中配置
- vue监听浏览器关闭
- vue-修改vue项目运行端口号
- vue 3.0 项目搭建移动端 (三) computed 和 methods 和 watch
- Vue相关开源项目库汇总 http://www.opendigg.com/tags/front-vue
- vue.js 嵌套循环渲染
- 三、Vue CLI-单页面
- vue实战入门进阶篇五:vue+elementui实现网站后台-首页界面实现
- vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址
- Django+Vue项目学习第九篇:vue项目部署到服务器
- Vue学习第27天——路由vue-router的详解及案例练习
- Vue开发实例(17)之实现用户列表