ChatGPT解决这个技术问题 Extra ChatGPT

div中的CSS自定义滚动条

如何通过 CSS(层叠样式表)为一个 div 而不是整个页面自定义滚动条?

仅将 overflow:auto; 应用于该 <div>。还有更多背景细节吗?
我做到了,但我需要自定义滚动条,嗯..滚动条的设计
自定义颜色?这仅在 IE 中受支持,在其他现代浏览器中不支持。这是使用纯 CSS 无法实现的。
最简单的 JS 解决方案(CSS 没有跨浏览器支持)- yaireo.github.io/fakescroll

C
CarenRose

我认为整合有关滚动条、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 样式)

注意:此答案包含来自各种来源的信息。如果使用了来源,那么它也会在此答案中链接。


网络已经存在了二十多年,但仍然没有一种标准的方式来设置滚动条的样式。 20 年的标准委员会没有注意到人们滚动的东西。没有任何缓慢而讽刺的鼓掌可以充分表达我的感受。但我认为,在第一次和第二次鼓掌之间延迟 20 年是合适的。从某种角度来看,万维网出现时我还没有出生,现在我是一名计算机工程师。好样的,W3C。
只是为了增加我的两分钱:Gmail 和 Youtube 在 Chrome 中有风格化的滚动条,在 Explorer 和 Firefox 中有原生的滚动条。如果这些标准对他们来说足够好,那对我来说也足够好
@PaulD.Waite 好吧,也许吧,但这可以应用于任何事情。而 CSS 正是作为一种语言存在的,因此设计人员可以选择覆盖默认值。整个想法是一个糟糕的 UI 设计师可以使任何元素不直观,但是一旦你认为网站设计师不称职,那么允许页面定制有什么意义呢?
@PaulD.Waite 显然,这不是其中之一。部分原因是它位于网站设计者应该完全控制的屏幕区域,无论如何,它不会带来安全风险,部分原因是显然——在实践中——这不是问题。很多网站都实施了自己的技巧来制作看起来和行为都像滚动条的东西,而且它们工作得很好。它们不仅工作正常,看起来更好,而且人们实际上了解如何使用它们,这就是重点。不幸的是,因为它们是黑客,所以有时它们不能很好地处理打印功能之类的东西。
这个答案并没有完全解决他的问题,即如何将滚动条样式应用于特定的 div,而不是整个页面。
J
JosefAssad

试试这个

来源:https://nicescroll.areaaperta.com/

简单的实现

<script type="text/javascript">
 $(document).ready(

  function() { 

    $("html").niceScroll();

  }

);
</script>

它是一个 jQuery 插件滚动条,因此您的滚动条是可控的,并且在各种操作系统中看起来都一样。


我敢肯定它可能是可定制的,但他们页面上的演示滚动太慢而且滚动条太难抓住了。
就像几乎所有的 jQuery 插件一样——[颤抖]——与原生的、线程的、GPU 加速的滚动实现相比,这非常慢。完全不适合严肃的应用程序,并且是良好 UX 的障碍。我建议您避免这种情况,除非它是针对玩具网站的。
我讨厌人们称一些纯javascript然后BAM!一个jQuery插件。
我不建议使用 nicescroll,因为它会禁用浏览器功能。中键滚动不适用于 nicescroll。
喜欢这个 niceScroll,它不会在元素周围添加包装 div,这意味着它不会破坏 html 结构
B
Brian Webster

使用 CSS 无法自定义滚动条,您需要一些 JavaScript 魔法。

一些浏览器支持非规范的 CSS 规则,例如 Webkit 中的 ::-webkit-scrollbar,但并不理想,因为它只能在 Webkit 中工作。 IE 也有类似的东西,但我认为他们不再支持它了。


过时的答案
@T.Todua 这个答案有什么过时的?
佚名

请检查此链接。带有工作演示的示例

   #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;
}

CSS Scroll Bars


感谢您的演示。我首先使用 Firefox 58.0.2(64 位,Windows 7 Pro/64)运行它,它的所有滚动条都是相同的。 然后使用 Chrome 版本 65.0 运行。 3325.162(官方版本)(64 位),它们都不同。因此(也许是无意的)您已经证明了 -webkit- 方法的局限性。
它不是跨浏览器
我相信,这个答案正确地解决了关于不通过定位所需的特定元素来覆盖浏览器主滚动条的问题。
n
ne1410s

像许多人一样,我正在寻找的东西是:

在大多数现代浏览器中保持一致的样式和功能

不是一些可笑的 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。至少船已经准备好了。明天永远是一个故事。即使是现在,汽车,作为孩子们生活的交通工具,也值很多钱。水箱由两辆卡车组成。正如他想投资,但为了法律,但总是免费的亨德利特


背景:线性渐变(向右,红色,黄色);
有关信息,请在此处复制此代码的游乐场:jsfiddle.net/xcof19zv/2
O
Ouadie

我尝试了很多插件,其中大多数不支持所有浏览器,我更喜欢 iScrollnanoScroller 适用于所有这些浏览器:

IE11 -> IE6

IE10 - WP8

IE9 - WP7

即 Xbox 一

即 Xbox 360

谷歌浏览器

火狐

歌剧

苹果浏览器

但 iScroll 不支持触摸!

演示 iScroll : http://lab.cubiq.org/iscroll/examples/simple/
演示 nanoScroller : http://jamesflorentino.github.io/nanoScrollerJS/


nano scroller 不支持水平滚动。
该 repo 已存档 github.com/cubiq/iscroll 我建议寻找其他替代方案
c
csomakk
.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之类的。


更简洁的回应。恕我直言,它实际上回答了 OP 的问题,即如何设置一个 div 的样式。好的。
F
Fatih Hayrioğlu

Firefox 新版本(64) 支持 CSS Scrollbars Module Level 1

.scroller { 宽度:300px;高度:100px;溢出-y:滚动;滚动条颜色:rebeccapurple 绿色;滚动条宽度:薄; }

Veggies es Bonus vobis,proinde vos postulo essum magis kohlrabi welsh onion daikon amaranth tatsoi tomatillo melon azuki bean 大蒜。秋葵甜菜玉米soko菊苣秋葵。欧芹 葱 西葫芦 tatsoi 豌豆芽 蚕豆 羽衣甘蓝 蒲公英 秋葵 裙带菜 番茄。蒲公英黄瓜花生豌豆花生soko西葫芦。

来源: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


D
Denys Wessels

这是一个适用于 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


A
Adeel Imran

有一种方法可以将自定义滚动条应用于 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;
}

T
TylerH

这是谷歌长期以来在其一些应用程序中使用的。在代码中看到,如果你应用下一个类,它们会以某种方式隐藏 Chrome 中的滚动条,但它仍然有效。

类是 jfk-scrollbarjfk-scrollbar-borderlessjfk-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) }

看,我的滚动条没有箭头

内容、内容、内容
内容、内容、内容
内容、内容、内容
内容、内容、内容
内容、内容、内容
内容,内容,内容 d
内容,内容,内容

看,我的滚动条在 chrome 中消失了

内容,内容,内容
内容,内容,内容
内容,内容,内容
内容、内容、内容
内容、内容、内容
内容、内容、内容d
内容、内容、内容

http://jsfiddle.net/76kcuem0/32/

我刚刚发现从滚动条中删除箭头很有用。截至 2015 年,它已在 Google 地图中用于在其材料设计 UI 的结果列表中搜索地点时使用。


N
Nikz

大多数浏览器不支持 Webkit 滚动条。

支持铬

这是 webkit 滚动条的演示 Webkit 滚动条 DEMO 如果您正在寻找更多示例,请查看更多示例

另一种方法是 Jquery 滚动条插件

它支持所有浏览器并且易于应用

从这里下载插件如何使用和更多选项检查这个

DEMO


C
Community

我尝试了很多 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>

有关更多详细信息,请访问插件页面

FaceScroll Custom scrollbar

希望能帮助到你


V
Vishal

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


S
Saumyajit

假设你有 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


M
ManBearPig

对于仍在寻找好的解决方案的人,我发现了这个插件simplebar

带有原生滚动的自定义滚动条 vanilla javascript 库,完成简单、轻量级、易于使用和跨浏览器。

就我而言,我一直在寻找 reactJS 解决方案,作者还提供了 react、angular、vue 和 next examples 的包装器


N
NimaS5

在 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


G
Gryso

对于使用 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;
  }
}

G
Green

我认为您必须对所有滚动条使用 ::-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 { // ... // }