如何通过 CSS(层叠样式表)为一个 div
而不是整个页面自定义滚动条?
overflow:auto;
应用于该 <div>
。还有更多背景细节吗?
我认为整合有关滚动条、CSS 和浏览器兼容性的最新信息会很有帮助。
滚动条 CSS 支持
目前,不存在跨浏览器滚动条 CSS 样式定义。 The W3C article 我在最后提到有以下声明,最近更新(2014 年 10 月 10 日):
一些浏览器(IE、Konqueror)支持非标准属性“scrollbar-shadow-color”、“scrollbar-track-color”等。这些属性是非法的:它们既没有在任何 CSS 规范中定义,也没有标记为专有(通过在它们前面加上“-vendor-”)
微软
正如其他人所提到的,Microsoft 支持滚动条样式,但仅适用于 IE8 及更高版本。
例子:
.TA {
scrollbar-3dlight-color:gold;
scrollbar-arrow-color:blue;
scrollbar-base-color:;
scrollbar-darkshadow-color:blue;
scrollbar-face-color:;
scrollbar-highlight-color:;
scrollbar-shadow-color:
}
Chrome 和 Safari (WebKit)
同样,WebKit 现在也有自己的版本:
样式滚动条:https://www.webkit.org/blog/363/styling-scrollbars/
所有 WebKit 滚动条样式的演示
来自 WebKit 中的自定义滚动条,相关 CSS:/* 伪元素 */ ::-webkit-scrollbar { } ::-webkit-scrollbar-button { } ::-webkit-scrollbar-track { } ::-webkit-scrollbar- track-piece { } ::-webkit-scrollbar-thumb { } ::-webkit-scrollbar-corner { } ::-webkit-resizer { } /* 伪类选择器 */ :horizontal :vertical :decrement :increment :start :end :double-button :single-button :no-button :corner-present :window-inactive
火狐(壁虎)
从版本 64 开始,Firefox 通过属性 scrollbar-color
(部分是 W3C draft)和 scrollbar-width
(W3C draft) 支持滚动条样式。可以在 this answer 中找到有关实施的一些有用信息。
跨浏览器滚动条样式
JavaScript 库和插件可以提供跨浏览器的解决方案。有很多选择。
20 个带有示例的 jQuery 滚动条插件(2012 年 7 月 24 日) NiceScroll : 用于桌面、移动和触摸设备的 jQuery 滚动插件 jQuery 自定义内容滚动器 Tiny Scrollbar – 一个轻量级的 jQuery 插件等。
NiceScroll : 用于桌面、移动和触摸设备的 jQuery 滚动插件
jQuery 自定义内容滚动条
Tiny Scrollbar – 一个轻量级的 jQuery 插件
等等
30 多种用于滑块、滚动条和滚动条的 JavaScript/Ajax 技术(2008 年 5 月 7 日)
21 个有用的滚动条 CSS/JavaScript 样式教程(2012 年 8 月)
15+ 个免费和高级 jQuery 滚动插件(2012 年 8 月 26 日)
这份名单可以继续使用。您最好的选择是搜索、研究和测试可用的解决方案。我相信您将能够找到适合您需求的东西。
防止非法滚动条样式
以防万一您想防止滚动条样式未正确以“-vendor”为前缀,this article over at W3C provides some basic instructions。基本上,您需要将以下 CSS 添加到与您的浏览器关联的用户样式表中。这些定义将覆盖您访问的任何页面上的无效滚动条样式。
body, html {
scrollbar-face-color: ThreeDFace !important;
scrollbar-shadow-color: ThreeDDarkShadow !important;
scrollbar-highlight-color: ThreeDHighlight !important;
scrollbar-3dlight-color: ThreeDLightShadow !important;
scrollbar-darkshadow-color: ThreeDDarkShadow !important;
scrollbar-track-color: Scrollbar !important;
scrollbar-arrow-color: ButtonText !important;
}
重复或类似的问题/来源未在上面链接
更改滚动条的样式
CSS滚动条样式跨浏览器
如何在 div 上创建自定义滚动条(Facebook 样式)
注意:此答案包含来自各种来源的信息。如果使用了来源,那么它也会在此答案中链接。
试试这个
来源:https://nicescroll.areaaperta.com/
简单的实现
<script type="text/javascript">
$(document).ready(
function() {
$("html").niceScroll();
}
);
</script>
它是一个 jQuery 插件滚动条,因此您的滚动条是可控的,并且在各种操作系统中看起来都一样。
使用 CSS 无法自定义滚动条,您需要一些 JavaScript 魔法。
一些浏览器支持非规范的 CSS 规则,例如 Webkit 中的 ::-webkit-scrollbar
,但并不理想,因为它只能在 Webkit 中工作。 IE 也有类似的东西,但我认为他们不再支持它了。
请检查此链接。带有工作演示的示例
#style-1::-webkit-scrollbar-track
{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 10px;
background-color: #F5F5F5;
}
#style-1::-webkit-scrollbar
{
width: 12px;
background-color: #F5F5F5;
}
#style-1::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #555;
}
-webkit-
方法的局限性。
像许多人一样,我正在寻找的东西是:
在大多数现代浏览器中保持一致的样式和功能
不是一些可笑的 3000 行臃肿的 jQuery 扩展 cr*p
......但是,唉 - 什么都没有!
好吧,如果一份工作值得做……我能够在大约 30 分钟内启动并运行一些东西。免责声明:它有很多已知的(可能还有一些未知的)问题,但这让我想知道其他 2920 行 JS 在许多产品中到底有什么用!
(window => { let initCoords; const coords_update = e => { if (initCoords) { const elem = initCoords.bar.closest('.scrollr'); const eSuffix = initCoords.axis.toUpperCase(); const sSuffix = initCoords .axis == 'x' ? 'Left' : 'Top'; const dSuffix = initCoords.axis == 'x' ? 'Width' : 'Height'; const max = elem['scroll' + dSuffix] - elem[ 'client' + dSuffix]; const room = elem['client' + dSuffix] - initCoords.bar['client' + dSuffix]; const delta = e['page' + eSuffix] - initCoords.abs; const abs = initCoords .p0 + delta; elem['scroll' + sSuffix] = max * abs / room; } }; const scrollr_resize = elem => { const xBar = elem.querySelector('.track.x .bar'); const yBar = elem.querySelector('.track.y .bar'); const xRel = elem.clientWidth / elem.scrollWidth; const yRel = elem.clientHeight / elem.scrollHeight; xBar.style.width = (100 * xRel).toFixed( 2) + '%'; yBar.style.height = (100 * yRel).toFixed(2) + '%'; }; const scrollr_init = elem => { const xTrack = document.createElement('span'); const yTrack = document.createElement('span'); const xBar = document.createElement('span'); const yBar = document.createElement('span'); xTrack.className = '轨道 x'; yTrack.className = '轨道 y'; xBar.className = '酒吧'; yBar.className = '酒吧'; xTrack.appendChild(xBar); yTrack.appendChild(yBar); elem.appendChild(xTrack); elem.appendChild(yTrack); elem.addEventListener('wheel', scrollr_OnWheel); elem.addEventListener('scroll', scrollr_OnScroll); xTrack.addEventListener('wheel', xTrack_OnWheel); xTrack.addEventListener('click', xTrack_OnClick); xTrack.addEventListener('mouseover', () => xTrack.classList.add('active')); xTrack.addEventListener('mouseout', () => { if (!initCoords) xTrack.classList.remove('active'); }); yTrack.addEventListener('click', yTrack_OnClick); yTrack.addEventListener('mouseover', () => yTrack.classList.add('active')); yTrack.addEventListener('mouseout', () => { if (!initCoords) yTrack.classList.remove('active'); }); xBar.addEventListener('click', bar_OnClick); xBar.addEventListener('mousedown', xBar_OnMouseDown); yBar.addEventListener('click', bar_OnClick); yBar.addEventListener('mousedown', yBar_OnMouseDown); scrollr_resize(elem); }; window.addEventListener('load', e => { const scrollrz = Array.from(document.querySelectorAll('.scrollr')); scrollrz.forEach(scrollr_init); }); window.addEventListener('resize', e => { const scrollrz = Array.from(document.querySelectorAll('.scrollr')); scrollrz.forEach(scrollr_resize); }); window.addEventListener('mousemove', coordinates_update); window.addEventListener('mouseup', e => { initCoords = null; Array.from(document.querySelectorAll('.track.active')) .forEach(elem => elem.classList.remove('active')); });函数 xBar_OnMouseDown(e) { const p0 = this.offsetLeft; initCoords = {轴:'x',abs:e.pageX,bar:this,p0}; } 函数 yBar_OnMouseDown(e) { const p0 = this.offsetTop; initCoords = {轴:'y',abs:e.pageY,bar:this,p0}; } 功能 bar_OnClick(e) { e.stopPropagation(); } function xTrack_OnClick(e) { const elem = this.closest('.scrollr'); const xBar = this.querySelector('.bar');让单位 = elem.clientWidth - 30; if (e.offsetX <= xBar.offsetLeft) 单位 *= -1; elem.scrollLeft += 单位; } function yTrack_OnClick(e) { const elem = this.closest('.scrollr'); const yBar = this.querySelector('.bar');让单位 = elem.clientHeight - 30; if (e.offsetY <= yBar.offsetTop) 单位 *= -1; elem.scrollTop += 单位; } 功能 xTrack_OnWheel(e) { e.stopPropagation(); const elem = this.closest('.scrollr'); const left0 = elem.scrollLeft;常量增量 = e.deltaY ! == 0 ? e.deltaY : e.deltaX; elem.scrollLeft += 增量;常量移动 = left0 ! == elem.scrollLeft;如果(移动)e.preventDefault(); } 函数 scrollr_OnWheel(e) { const left0 = this.scrollLeft; const top0 = this.scrollTop; this.scrollLeft += e.deltaX; this.scrollTop += e.deltaY;常量移动 = left0 ! == this.scrollLeft ||前0! == this.scrollTop;如果(移动)e.preventDefault(); } function scrollr_OnScroll(e) { const xTrack = this.querySelector('.track.x'); const yTrack = this.querySelector('.track.y'); const xBar = xTrack.querySelector('.bar'); const yBar = yTrack.querySelector('.bar'); const xMax = this.scrollWidth - this.clientWidth; const yMax = this.scrollHeight - this.clientHeight;常量 xFrac = this.scrollLeft / xMax;常量 yFrac = this.scrollTop / yMax;常量 xAbs = xFrac * (this.clientWidth - xBar.clientWidth);常量 yAbs = yFrac * (this.clientHeight - yBar.clientHeight); xTrack.style.left = this.scrollLeft + 'px'; xTrack.style.bottom = -this.scrollTop + 'px'; xBar.style.left = xAbs + 'px'; yTrack.style.top = this.scrollTop + 'px'; yTrack.style.right = -this.scrollLeft + 'px'; yBar.style.top = yAbs + 'px'; }; })(窗户); .scrollr { 溢出:隐藏;位置:相对; } .track { 位置:绝对;光标:指针;过渡:背景色 .3s;用户选择:无; } .track.x { 左:0;底部:0;宽度:100%;高度:10px; } .track.y { 顶部:0;右:0;高度:100%;宽度:10px; } .bar { 位置:绝对;背景颜色:黄色;过渡:背景色 .3s,不透明度 0.3s,宽度 0.3s,高度 0.3s,边距 0.3s;显示:块;宽度:100%;高度:100%;不透明度:0.7; } .track.x .bar { 最小宽度:25px;高度:3px;边距:5px 0 2px 0; } .track.y .bar { 最小高度:25px;宽度:3px;边距:0 2px 0 5px; } .track.active { 背景颜色:#ccc; } .track.active .bar { 背景颜色:#999;边距:0;不透明度:1; } .track.x.active .bar { 高度:10px; } .track.y.active .bar { 宽度:10px; } /* 自定义客户端内容 */ .content { background: red; } .content p { 宽度:450px;边距:0; } .scrollr { 最大宽度:350px;最大高度:150px; }
重要的是让患者吸取教训,并遵循教育计划。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。但他要融资,但为了老头子,却总是免费亨德利特。在那之前,拍卖师 sollicitudinum。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。但他要融资,但为了老头子,却总是免费亨德利特。在那之前,拍卖师 sollicitudinum。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。但他要融资,但为了老头子,却总是免费亨德利特。在那之前,拍卖师 sollicitudinum。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。但他要融资,但为了老头子,却总是免费亨德利特。在那之前,拍卖师 sollicitudinum。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。但他要融资,但为了老头子,却总是免费亨德利特。在那之前,拍卖师 sollicitudinum。现在一个大房子,员工应该是作者还是不是,有人对我说。 Lacinia 两个孩子的价格。直到枕头,让笑成为土地的主要蛋白质,一杯豌豆喝,或我生命之弓的柔软智慧。 Fusce vulputate 前庭 metus dapibus eleifend。都如医生所说。今饮,置智慧与酱,药弓软,命之弓无人管。这不是生命中最重要的部分,而是痛苦。直到第二天之前完成,我将成为目标,因为我很担心。每个人都那么有趣。 Maecenas 一直想画出生命的骨灰盒,或者说是 feugiat 的预言。孩子们在自由活动中,唇裂恐惧在,除非最大。 Phasellus commodo ligula vel arcu iaculis hendrerit vitae vel diam。但是,最重要的是建立一个免费的网站。不要给我鞠躬,但 Euismod 是卡车,是生命的航空公司。智能手机在车辆的诊所的房地产。同时,他接受了获奖者。因此,no lacinia 是最大的下士和 sem。没有像以前预期的那样投资的湖泊。 Mauris Valvallis 害怕被枪杀。没有 laoreet ligula 不有时 tincidunt。可她怀孕了,却被疾病毒死。 Fusce malesuada ullamcorper lacus,在 vulputate risus finibus 非。他希望成员自由,但枕头是福吉亚特的床或但它是爱欲,因为 porttitor 没有,ornare hendrerit nibh。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。正如他想投资,但为了法律,但总是免费的亨德利特
我尝试了很多插件,其中大多数不支持所有浏览器,我更喜欢 iScroll 和 nanoScroller 适用于所有这些浏览器:
IE11 -> IE6
IE10 - WP8
IE9 - WP7
即 Xbox 一
即 Xbox 360
谷歌浏览器
火狐
歌剧
苹果浏览器
但 iScroll 不支持触摸!
演示 iScroll : http://lab.cubiq.org/iscroll/examples/simple/
演示 nanoScroller : http://jamesflorentino.github.io/nanoScrollerJS/
.className::-webkit-scrollbar {
width: 10px;
background-color: rgba(0,0,0,0);
}
.className::-webkit-scrollbar-thumb {
background: rgba(255, 255, 255, 0.5);
border-radius: 5px;
}
给了我一个不错的手机/ osx之类的。
Firefox 新版本(64) 支持 CSS Scrollbars Module Level 1
.scroller { 宽度:300px;高度:100px;溢出-y:滚动;滚动条颜色:rebeccapurple 绿色;滚动条宽度:薄; }
来源:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars
https://fatihhayrioglu.com/images/kaydirma-cubugu-ozellestirme.png
https://codepen.io/fatihhayri/pen/pqdrbd
这是一个适用于 Chrome 和 Safari 的 webkit 示例:
CSS:
::-webkit-scrollbar
{
width: 40px;
background-color:#4F4F4F;
}
::-webkit-scrollbar-button:vertical:increment
{
height:40px;
background-image: url(/Images/Scrollbar/decrement.png);
background-size:39px 30px;
background-repeat:no-repeat;
}
::-webkit-scrollbar-button:vertical:decrement
{
height:40px;
background-image: url(/Images/Scrollbar/increment.png);
background-size:39px 30px;
background-repeat:no-repeat;
}
输出:
https://i.stack.imgur.com/JniZP.png
有一种方法可以将自定义滚动条应用于 HTML 文档中的自定义 div 元素。这是一个有帮助的例子。 https://codepen.io/adeelibr/pen/dKqZNb 但作为一个要点。你可以做这样的事情。
<div class="scrollbar" id="style-1">
<div class="force-overflow"></div>
</div>
CSS 文件看起来像这样。
.scrollbar
{
margin-left: 30px;
float: left;
height: 300px;
width: 65px;
background: #F5F5F5;
overflow-y: scroll;
margin-bottom: 25px;
}
.force-overflow
{
min-height: 450px;
}
#style-1::-webkit-scrollbar-track
{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 10px;
background-color: #F5F5F5;
}
#style-1::-webkit-scrollbar
{
width: 12px;
background-color: #F5F5F5;
}
#style-1::-webkit-scrollbar-thumb
{
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
background-color: #555;
}
这是谷歌长期以来在其一些应用程序中使用的。在代码中看到,如果你应用下一个类,它们会以某种方式隐藏 Chrome 中的滚动条,但它仍然有效。
类是 jfk-scrollbar
、jfk-scrollbar-borderless
和 jfk-scrollbar-dark
.testg{ 边框:1px 纯黑色;最大高度:150px;溢出-y:滚动;溢出-x:隐藏; width: 250px;} .content{ height: 700px} /* 滚动条的 google css 代码 */ ::-webkit-scrollbar { height: 16px;溢出:可见;宽度:16px } ::-webkit-scrollbar-button { 高度:0;宽度:0 } ::-webkit-scrollbar-track { 背景剪辑:填充框;边框:实心透明;边框宽度:0 0 0 7px } ::-webkit-scrollbar-track:horizontal { 边框宽度:7px 0 0 } ::-webkit-scrollbar-track:hover { 背景颜色:rgba(0, 0, 0 , .05); box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1) } ::-webkit-scrollbar-track:horizontal:hover { box-shadow: inset 0 1px 0 rgba(0, 0, 0, . 1) } ::-webkit-scrollbar-track:active { 背景色: rgba(0, 0, 0, .05);框阴影:插入 1px 0 0 rgba(0, 0, 0, .14),插入 -1px 0 0 rgba(0, 0, 0, .07) } ::-webkit-scrollbar-track:horizontal:active {盒子阴影:插图 0 1px 0 rgba(0, 0, 0, .14),插图 0 -1px 0 rgba(0, 0, 0, .07) } .jfk-scrollbar-dark::-webkit-scrollbar-轨道:悬停{背景颜色:rgba(255、255、255、.1); box-shadow: inset 1px 0 0 rgba(255, 255, 255, .2) } .jfk-scrollbar-dark::-webkit-scrollbar-track:horizontal:hover { box-shadow: inset 0 1px 0 rgba(255 , 255, 255, .2) } .jfk-scrollbar-dark::-webkit-scrollbar-track:active { 背景色: rgba(255, 255, 255, .1);盒子阴影:插入 1px 0 0 rgba(255, 255, 255, .25), 插入 -1px 0 0 rgba(255, 255, 255, .15) } .jfk-scrollbar-dark::-webkit-scrollbar- track:horizontal:active { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), inset 0 -1px 0 rgba(255, 255, 255, .15) } ::-webkit-scrollbar-拇指 { 背景颜色:rgba(0, 0, 0, .2);背景剪辑:填充框;边框:实心透明;边框宽度:0 0 0 7px;最小高度:28px;填充:100px 0 0; box-shadow: 插入 1px 1px 0 rgba(0, 0, 0, .1), 插入 0 -1px 0 rgba(0, 0, 0, .07) } ::-webkit-scrollbar-thumb:horizontal {border-宽度:7px 0 0;填充:0 0 0 100px; box-shadow: 插入 1px 1px 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .07) } ::-webkit-scrollbar-thumb:hover { background-颜色:rgba(0, 0, 0, .4); box-shadow: inset 1px 1px 1px rgba(0, 0, 0, .25) } ::-webkit-scrollbar-thumb:active { background-color: rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35) } .jfk-scrollbar-dark::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, .3);盒子阴影:插入 1px 1px 0 rgba(255, 255, 255, .15), 插入 0 -1px 0 rgba(255, 255, 255, .1) } .jfk-scrollbar-dark::-webkit-scrollbar- thumb:horizontal { box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .15), inset -1px 0 0 rgba(255, 255, 255, .1) } .jfk-scrollbar-dark::- webkit-scrollbar-thumb:hover { 背景颜色: rgba(255, 255, 255, .6); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, .37) } .jfk-scrollbar-dark::-webkit-scrollbar-thumb:active { background-color: rgba(255, 255, 255, . 75); box-shadow: inset 1px 1px 3px rgba(255, 255, 255, .5) } .jfk-scrollbar-borderless::-webkit-scrollbar-track {border-width: 0 1px 0 6px } .jfk-scrollbar-borderless ::-webkit-scrollbar-track:horizontal {border-width: 6px 0 1px } .jfk-scrollbar-borderless::-webkit-scrollbar-track:hover { background-color: rgba(0, 0, 0, .035 );盒子阴影:插入 1px 1px 0 rgba(0, 0, 0, .14),插入 -1px -1px 0 rgba(0, 0, 0, .07) } .jfk-scrollbar-borderless.jfk-scrollbar-dark ::-webkit-scrollbar-track:hover { 背景颜色: rgba(255, 255, 255, .07); box-shadow: 插入 1px 1px 0 rgba(255, 255, 255, .25), inset -1px -1px 0 rgba(255, 255, 255, .15) } .jfk-scrollbar-borderless::-webkit-scrollbar -thumb { 边框宽度:0 1px 0 6px } .jfk-scrollbar-borderless::-webkit-scrollbar-thumb:horizontal { 边框宽度:6px 0 1px } ::-webkit-scrollbar-corner { 背景:透明 } body::-webkit-scrollbar-track-piece { background-clip: padding-box;背景颜色:#f5f5f5;边框:实心#fff;边框宽度:0 0 0 3px; box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07) } body::-webkit-scrollbar-track-piece:horizontal { 边框宽度:3px 0 0; box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07) } body::-webkit-scrollbar-thumb {border-width : 1px 1px 1px 5px } body::-webkit-scrollbar-thumb:horizontal {border-width: 5px 1px 1px } body::-webkit-scrollbar-corner { background-clip: padding-box;背景颜色:#f5f5f5;边框:实心#fff;边框宽度:3px 0 0 3px; box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14) } .jfk-scrollbar::-webkit-scrollbar { height: 16px;溢出:可见;宽度:16px } .jfk-scrollbar::-webkit-scrollbar-button { 高度:0;宽度:0 } .jfk-scrollbar::-webkit-scrollbar-track { 背景剪辑:填充框;边框:实心透明;边框宽度:0 0 0 7px } .jfk-scrollbar::-webkit-scrollbar-track:horizontal { 边框宽度:7px 0 0 } .jfk-scrollbar::-webkit-scrollbar-track:hover { 背景颜色: rgba(0, 0, 0, .05); box-shadow: inset 1px 0 0 rgba(0, 0, 0, .1) } .jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover { box-shadow: inset 0 1px 0 rgba(0, 0 , 0, .1) } .jfk-scrollbar::-webkit-scrollbar-track:active { 背景颜色: rgba(0, 0, 0, .05);盒子阴影:插入 1px 0 0 rgba(0, 0, 0, .14),插入 -1px 0 0 rgba(0, 0, 0, .07) } .jfk-scrollbar::-webkit-scrollbar-track:水平:活动 { 盒子阴影:插入 0 1px 0 rgba(0, 0, 0, .14), 插入 0 -1px 0 rgba(0, 0, 0, .07) } .jfk-scrollbar-dark.jfk-滚动条::-webkit-scrollbar-track:hover { 背景颜色: rgba(255, 255, 255, .1);盒子阴影:插入 1px 0 0 rgba(255, 255, 255, .2) } .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover { 盒子阴影:插入 0 1px 0 rgba(255, 255, 255, .2) } .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:active { 背景颜色: rgba(255, 255, 255, .1);盒子阴影:插入 1px 0 0 rgba(255, 255, 255, .25),插入 -1px 0 0 rgba(255, 255, 255, .15) } .jfk-scrollbar-dark.jfk-scrollbar::- webkit-scrollbar-track:horizontal:active { box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), inset 0 -1px 0 rgba(255, 255, 255, .15) } .jfk-滚动条::-webkit-scrollbar-thumb { 背景颜色: rgba(0, 0, 0, .2);背景剪辑:填充框;边框:实心透明;边框宽度:0 0 0 7px;最小高度:28px;填充:100px 0 0;框阴影:插入 1px 1px 0 rgba(0, 0, 0, .1),插入 0 -1px 0 rgba(0, 0, 0, .07) } .jfk-scrollbar::-webkit-scrollbar-thumb:水平{边框宽度:7px 0 0;填充:0 0 0 100px; box-shadow: 插入 1px 1px 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .07) } .jfk-scrollbar::-webkit-scrollbar-thumb:悬停 { 背景颜色:rgba(0, 0, 0, .4); box-shadow: inset 1px 1px 1px rgba(0, 0, 0, .25) } .jfk-scrollbar::-webkit-scrollbar-thumb:active { background-color: rgba(0, 0, 0, 0.5); box-shadow: inset 1px 1px 3px rgba(0, 0, 0, 0.35) } .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, .3);盒子阴影:插入 1px 1px 0 rgba(255, 255, 255, .15), 插入 0 -1px 0 rgba(255, 255, 255, .1) } .jfk-scrollbar-dark.jfk-scrollbar::- webkit-scrollbar-thumb:horizontal { box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .15), inset -1px 0 0 rgba(255, 255, 255, .1) } .jfk-scrollbar- dark.jfk-scrollbar::-webkit-scrollbar-thumb:hover { background-color: rgba(255, 255, 255, .6); box-shadow: inset 1px 1px 1px rgba(255, 255, 255, .37) } .jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-thumb:active { background-color: rgba(255, 255 , 255, .75); box-shadow: inset 1px 1px 3px rgba(255, 255, 255, .5) } .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track {border-width: 0 1px 0 6px } .jfk -scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:horizontal {border-width: 6px 0 1px } .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-track:hover { background-颜色:rgba(0, 0, 0, .035);盒子阴影:插入 1px 1px 0 rgba(0, 0, 0, .14),插入 -1px -1px 0 rgba(0, 0, 0, .07) } .jfk-scrollbar-borderless.jfk-scrollbar-dark .jfk-scrollbar::-webkit-scrollbar-track:hover { 背景颜色:rgba(255, 255, 255, .07);框阴影:插入 1px 1px 0 rgba(255, 255, 255, .25),插入 -1px -1px 0 rgba(255, 255, 255, .15) } .jfk-scrollbar-borderless.jfk-scrollbar:: -webkit-scrollbar-thumb {border-width: 0 1px 0 6px } .jfk-scrollbar-borderless.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {border-width: 6px 0 1px } .jfk-scrollbar: :-webkit-scrollbar-corner { 背景:透明 } body.jfk-scrollbar::-webkit-scrollbar-track-piece { background-clip: padding-box;背景颜色:#f5f5f5;边框:实心#fff;边框宽度:0 0 0 3px; box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07) } body.jfk-scrollbar::-webkit-scrollbar-track -piece:horizontal { 边框宽度:3px 0 0;盒子阴影:插入 0 1px 0 rgba(0, 0, 0, .14), 插入 0 -1px 0 rgba(0, 0, 0, .07) } body.jfk-scrollbar::-webkit-scrollbar-thumb { 边框宽度:1px 1px 1px 5px } body.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal { 边框宽度:5px 1px 1px } body.jfk-scrollbar::-webkit-scrollbar-corner { background-剪辑:填充框;背景颜色:#f5f5f5;边框:实心#fff;边框宽度:3px 0 0 3px; box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14) }
http://jsfiddle.net/76kcuem0/32/
我刚刚发现从滚动条中删除箭头很有用。截至 2015 年,它已在 Google 地图中用于在其材料设计 UI 的结果列表中搜索地点时使用。
大多数浏览器不支持 Webkit 滚动条。
支持铬
这是 webkit 滚动条的演示 Webkit 滚动条 DEMO 如果您正在寻找更多示例,请查看更多示例
另一种方法是 Jquery 滚动条插件
它支持所有浏览器并且易于应用
从这里下载插件如何使用和更多选项检查这个
我尝试了很多 JS 和 CSS 滚动,我发现它非常易于使用,并且在 IE、Safari 和 FF 上进行了测试并且运行良好
AS @thebluefox 建议
下面是它的工作原理
将以下脚本添加到
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script type="text/javascript" src="jquery.ui.touch-punch.min.js"></script>
<script type="text/javascript" src="facescroll.js"></script>
<script type="text/javascript">
jQuery(function(){ // on page DOM load
$('#demo1').alternateScroll();
$('#demo2').alternateScroll({ 'vertical-bar-class': 'styled-v-bar', 'hide-bars': false });
})
</script>
这在您需要滚动的段落中
<div id="demo1" style="width:300px; height:250px; padding:8px; resize:both; overflow:scroll">
**Your Paragraph Comes Here**
</div>
有关更多详细信息,请访问插件页面
希望能帮助到你
Webkit 浏览器(例如 Chrome、Safari 和 Opera)支持非标准的 ::-webkit-scrollbar 伪元素,它允许我们修改浏览器滚动条的外观。
注意:Firefox 或 IE 和 Edge 不支持 ::-webkit-scrollbar。
{ 框尺寸:边框框;字体系列:无衬线; } div { 宽度:15rem;高度:8英尺;填充:0.5rem;边框:1px 实心#aaa;边距底部:1 项;溢出:自动; } .box::-webkit-scrollbar { 宽度:.8em; } .box::-webkit-scrollbar-track { box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); } .box::-webkit-scrollbar-thumb { 背景颜色:dodgerblue; }
痛苦本身是很重要的,肥胖会随之而来,但它与一些伟大的工作和痛苦同时发生。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让痛苦在快乐中出错。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让痛苦在快乐中出错。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让快乐归咎于房子的痛苦。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让痛苦在快乐中出错。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让痛苦在快乐中出错。就最小的细节而言,除非他从中获得一些好处,否则任何人都不应该从事任何类型的工作。不要让痛苦浪费在快乐中。
参考: How To Create a Custom Scrollbar
假设你有 div 作为
<div class="custom_scroll"> ... </div>
将 CSS 样式应用为
//custom scroll style definitions
.custom_scroll
{
overflow-y: scroll;
}
//custom_scroll scrollbar styling
.custom_scroll::-webkit-scrollbar-track
{
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
border-radius: 10px;
opacity: 0.5;
//background-color: #F5F5F5;
}
.custom_scroll::-webkit-scrollbar
{
width: 5px;
opacity: 0.5;
//background-color: #F5F5F5;
}
.custom_scroll::-webkit-scrollbar-thumb
{
border-radius: 10px;
opacity: 0.5;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
//background-color: #555;
}
结果滚动将显示为
https://i.stack.imgur.com/IMuTr.png
在 Firefox +64 中使用仅 CSS 工作
.mycoldiv{
scrollbar-color: white rebeccapurple;
scrollbar-width: thin;
display: block;
height:400px;
overflow-x: auto;
}
更多信息:https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars
对于使用 sass 的人来说,这里是一个具有基本功能(拇指、轨道颜色和宽度)的 mixin。我没有对它进行广泛的测试,所以请随时指出任何错误。
@mixin element-scrollbar($thumb-color, $background-color: mix($thumb-color, white, 50%), $width: 1rem) {
// For Webkit
&::-webkit-scrollbar-thumb {
background: $thumb-color;
}
&::-webkit-scrollbar-track {
background: $background-color;
}
&::-webkit-scrollbar {
width: $width;
height: $width;
}
// For Internet Explorer
& {
scrollbar-face-color: $thumb-color;
scrollbar-arrow-color: $thumb-color;
scrollbar-track-color: $background-color;
}
// For Firefox future compatibility
// This is W3C draft and does not work yet. Use html-firefox-scrollbar mixin instead.
& {
scrollbar-color: $thumb-color $background-color;
scrollbar-width: $width;
}
}
// For Firefox
@mixin html-firefox-scrollbar($thumb-color, $background-color: mix($thumb-color, white, 50%), $firefox-width: this) {
// This must be used on html/:root element to take effect
& {
scrollbar-color: $thumb-color $background-color;
scrollbar-width: $firefox-width;
}
}
我认为您必须对所有滚动条使用 ::-wekbit-scrollbar
,您可以使用:
<style>
.mydiv {
height:100px;
overflow:auto;
}
/* width */
.mydiv::-webkit-scrollbar {
width: 20px;
}
/* Track */
.mydiv::-webkit-scrollbar-track {
box-shadow: inset 0 0 5px grey;
border-radius: 10px;
}
/* Handle */
.mydiv::-webkit-scrollbar-thumb {
background: red;
border-radius: 10px;
}
/* Handle on hover */
.mydiv::-webkit-scrollbar-thumb:hover {
background: #b30000;
}
</style>
<body>
<div class="mydiv"> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> <br/> </div>
</body>
或者使用这样的东西:
var MiniScroll=function(a,b){function e(){c.scrollUpdate()}function f(){var a=new Date,b=Math.abs(a-c.animation.frame),d=c.countScrollHeight();c.animation.frame=a,c.render(b),d.height!=c.controls.height&&(e(),c.controls.height=d.height),requestAnimationFrame(f)}function g(){c.scrollUpdate()}function h(a){var b=c.target.scrollTop,d=Math.abs(a.wheelDeltaY/(10-c.speed));c.target.scrollTop=a.wheelDeltaY>0?b-d:b+d,c.scrollUpdate()}function i(a){if(a.target.classList.contains("scroll"))return a.preventDefault(),!1;var b=c.countScrollHeight();c.target.scrollTop=a.offsetY*b.mul-parseInt(b.height)/2,c.scrollUpdate()}b=b||{};var c=this,d={speed:"speed"in b?b.speed:7};this.target=document.querySelector(a),this.animation={frame:new Date,stack:[]},this.identity="scroll"+parseInt(1e5*Math.random()),this.controls={place:null,scroll:null,height:0},this.speed=d.speed,this.target.style.overflow="hidden",this.draw(),requestAnimationFrame(f),this.target.onscroll=g,this.target.addEventListener("wheel",h),this.controls.place.onclick=i};MiniScroll.prototype.scrollUpdate=function(){this.controls.place.style.height=this.target.offsetHeight+"px";var a=this.countScrollHeight();this.controls.scroll.style.height=a.height,this.controls.scroll.style.top=a.top},MiniScroll.prototype.countScrollHeight=function(){for(var a=this.target.childNodes,b=parseInt(this.target.offsetHeight),c=0,d=0;d<a.length;d++)a[d].id!=this.identity&&(c+=parseInt(a[d].offsetHeight)||0);var e=this.target.offsetHeight*parseFloat(1/(parseFloat(c)/this.target.offsetHeight)),f=this.controls.place.offsetHeight*(this.target.scrollTop/c)+"px";return{mul:c/this.target.offsetHeight,height:e>b?b+"px":e+"px",top:f}},MiniScroll.prototype.draw=function(){var a=document.createElement("div"),b=document.createElement("div");a.className="scroll-place",b.className="scroll",a.appendChild(b),a.id=this.identity,this.controls.place=a,this.controls.scroll=b,this.target.insertBefore(a,this.target.querySelector("*")),this.scrollUpdate()},MiniScroll.prototype.render=function(a){for(var b=0;b<this.animation.stack.length;b++){var c=this.animation.stack[b],d=parseInt(c.target);c.element.style[c.prop]=d+c.points}};
并初始化:
<body onload="new MiniScroll(this);"></body>
并定制:
.scroll-place { // ... // }
.scroll { // ... // }
不定期副业成功案例分享