Làm cách nào tôi có thể tùy chỉnh thanh cuộn qua CSS (Cascading Style Sheets) cho một div
và không phải toàn bộ trang?
Làm cách nào tôi có thể tùy chỉnh thanh cuộn qua CSS (Cascading Style Sheets) cho một div
và không phải toàn bộ trang?
Câu trả lời:
Tôi nghĩ sẽ rất hữu ích khi hợp nhất các thông tin mới nhất về thanh cuộn, CSS và khả năng tương thích của trình duyệt.
Hiện tại, không tồn tại định nghĩa kiểu dáng thanh cuộn chéo trình duyệt CSS. Bài báo W3C tôi đề cập ở phần cuối có tuyên bố sau và được cập nhật gần đây (ngày 10 tháng 10 năm 2014):
Một số trình duyệt (IE, Konqueror) hỗ trợ các thuộc tính không chuẩn 'thanh cuộn-bóng-màu', 'thanh cuộn theo dõi màu' và các thuộc tính khác. Các thuộc tính này là bất hợp pháp: chúng không được xác định trong bất kỳ đặc điểm kỹ thuật CSS nào và chúng không được đánh dấu là độc quyền (bằng cách thêm tiền tố vào "-vendor-")
Như những người khác đã đề cập, Microsoft hỗ trợ kiểu thanh cuộn, nhưng chỉ dành cho IE8 trở lên.
Thí dụ:
<!-- language: lang-css -->
.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:
}
Tương tự, WebKit hiện có phiên bản riêng:
Từ thanh cuộn tùy chỉnh trong WebKit , CSS có liên quan:
/* pseudo elements */
::-webkit-scrollbar { }
::-webkit-scrollbar-button { }
::-webkit-scrollbar-track { }
::-webkit-scrollbar-track-piece { }
::-webkit-scrollbar-thumb { }
::-webkit-scrollbar-corner { }
::-webkit-resizer { }
/* pseudo class selectors */
:horizontal
:vertical
:decrement
:increment
:start
:end
:double-button
:single-button
:no-button
:corner-present
:window-inactive
Kể từ phiên bản 64, Firefox hỗ trợ tạo kiểu thanh cuộn thông qua các thuộc tính scrollbar-color
(một phần, bản nháp W3C ) và scrollbar-width
( bản nháp W3C ). Một số thông tin tốt về việc thực hiện có thể được tìm thấy trong câu trả lời này .
Các thư viện và trình cắm JavaScript có thể cung cấp giải pháp trình duyệt chéo. Có nhiều lựa chọn.
Danh sách có thể tiếp tục. Đặt cược tốt nhất của bạn là tìm kiếm xung quanh, nghiên cứu và thử nghiệm các giải pháp có sẵn. Tôi chắc chắn bạn sẽ có thể tìm thấy một cái gì đó sẽ phù hợp với nhu cầu của bạn.
Chỉ trong trường hợp bạn muốn ngăn kiểu thanh cuộn chưa được thêm tiền tố đúng với "-vendor", bài viết này tại W3C cung cấp một số hướng dẫn cơ bản . Về cơ bản, bạn sẽ cần thêm CSS sau vào bảng kiểu người dùng được liên kết với trình duyệt của bạn. Các định nghĩa này sẽ ghi đè kiểu dáng thanh cuộn không hợp lệ trên bất kỳ trang nào bạn truy cập.
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;
}
Lưu ý: Câu trả lời này chứa thông tin từ nhiều nguồn khác nhau. Nếu một nguồn đã được sử dụng, thì nó cũng được liên kết trong câu trả lời này.
Hãy thử cái này
Nguồn: https://nicescroll.areaaperta.com/
Thực hiện đơn giản
<script type="text/javascript">
$(document).ready(
function() {
$("html").niceScroll();
}
);
</script>
Nó là một thanh cuộn plugin jQuery, vì vậy các thanh cuộn của bạn có thể điều khiển được và trông giống nhau trên các hệ điều hành khác nhau.
Thanh cuộn tùy chỉnh không thể có với CSS, bạn sẽ cần một số phép thuật JavaScript.
Một số trình duyệt hỗ trợ các quy tắc CSS không đặc tả, chẳng hạn như ::-webkit-scrollbar
trong Webkit nhưng không lý tưởng vì nó sẽ chỉ hoạt động trong Webkit. IE cũng có một cái gì đó tương tự, nhưng tôi không nghĩ họ hỗ trợ nó nữa.
Giống như nhiều người, tôi đang tìm kiếm thứ gì đó:
... Nhưng than ôi - không có gì!
Chà, nếu một công việc đáng làm ... Tôi đã có thể lấy thứ gì đó và chạy trong khoảng 30 phút. Tuyên bố miễn trừ trách nhiệm: có khá nhiều vấn đề đã biết (và có thể là một vài vấn đề chưa được biết) với nó, nhưng nó khiến tôi tự hỏi 2920 dòng JS khác trên Trái đất có gì trong nhiều dịch vụ!
var dragParams;
window.addEventListener('load', init_myscroll);
/* TODO: Much to do for v axis! */
function bardrag_mousemove(e) {
var pos = (e.clientX - dragParams.clientX) + dragParams.offsetLeft;
pos = Math.min(Math.max(0, pos), dragParams.maxLeft);
dragParams.slider.style.left = pos + 'px';
updateScrollPosition(dragParams.slider, pos);
}
function updateScrollPosition(slider, offsetVal) {
var bar = slider.parentNode;
var myscroll = bar.parentNode;
var maxView = myscroll.scrollWidth - myscroll.offsetWidth;
var maxSlide = bar.offsetWidth - slider.offsetWidth;
var viewX = maxView * offsetVal / maxSlide;
myscroll.scrollLeft = viewX;
bar.style.left = viewX + 'px';
}
function drag_start(e) {
var slider = e.target;
var maxLeft = slider.parentNode.offsetWidth - slider.offsetWidth;
dragParams = {
clientX: e.clientX,
offsetLeft: slider.offsetLeft,
slider: e.target,
maxLeft: maxLeft
};
e.preventDefault();
document.addEventListener('mousemove', bardrag_mousemove);
}
function drag_end(e) {
e.stopPropagation();
document.removeEventListener('mousemove', bardrag_mousemove);
}
function bar_clicked(e) {
var bar = e.target;
var slider = bar.getElementsByClassName('slider')[0];
if (bar.className == 'h bar') {
var maxSlide = bar.offsetWidth - slider.offsetWidth;
var sliderX = e.offsetX - (slider.offsetWidth / 2);
sliderX = Math.max(0, Math.min(sliderX, maxSlide));
slider.style.left = sliderX + 'px';
updateScrollPosition(slider, sliderX);
}
}
function init_myscroll() {
var myscrolls = document.getElementsByClassName('container');
for (var i = 0; i < myscrolls.length; i++) {
var myscroll = myscrolls[i];
var style = window.getComputedStyle(myscroll);
if (style.overflowY == 'scroll' || (style.overflowY == 'auto' && myscroll.offsetHeight < myscroll.scrollHeight)) {
addScroller(false, myscroll);
}
if (style.overflowX == 'scroll' || (style.overflowX == 'auto' && myscroll.offsetWidth < myscroll.scrollWidth)) {
addScroller(true, myscroll);
}
}
}
function addScroller(isX, myscroll) {
myscroll.className += ' myscroll';
var bar = document.createElement('div');
var slider = document.createElement('div');
var offsetDim = isX ? myscroll.offsetWidth : myscroll.offsetHeight;
var scrollDim = isX ? myscroll.scrollWidth : myscroll.scrollHeight;
var sliderPx = Math.max(30, (offsetDim * offsetDim / scrollDim));
slider.style.width = 100 * sliderPx / offsetDim + '%';
slider.className = 'slider';
bar.className = isX ? 'h bar' : 'v bar';
bar.appendChild(slider);
myscroll.appendChild(bar);
bar.addEventListener('click', bar_clicked);
slider.addEventListener('mousedown', drag_start);
slider.addEventListener('mouseup', drag_end);
bar.addEventListener('mouseup', drag_end);
document.addEventListener('mouseup', drag_end);
}
body {
background-color: #66f;
}
.container {
background-color: #fff;
width: 50%;
margin: auto;
overflow: auto;
}
.container > div:first-of-type {
width: 300%;
height: 100px;
background: linear-gradient(to right, red, yellow);
}
/* TODO: Much to do for v axis! */
.myscroll {
overflow: hidden;
position: relative;
}
.myscroll .bar {
background-color: lightgrey;
position: absolute;
}
.myscroll {
padding-bottom: 20px;
}
.myscroll .h {
height: 20px;
width: 100%;
bottom: 0;
left: 0;
}
.myscroll .slider {
background-color: grey;
position: absolute;
}
.myscroll .h .slider {
height: 100%;
}
<div class="container">
<div></div>
</div>
Tôi đã thử rất nhiều plugin, hầu hết trong số chúng không hỗ trợ tất cả các trình duyệt, tôi thích iScroll và nanoScroller hoạt động cho tất cả các trình duyệt này:
Nhưng iScroll không hoạt động với cảm ứng!
bản demo iScroll : http://lab.cubiq.org/iscroll/examples/simple/
bản demo nanoScroller : http://jamesflorentino.github.io/nanoScrollerJS/
Vui lòng kiểm tra liên kết này. Ví dụ với bản demo làm việc
#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-
phương pháp này.
Firefox phiên bản mới (64) hỗ trợ CSS Scrollbars Module Cấp 1
.scroller {
width: 300px;
height: 100px;
overflow-y: scroll;
scrollbar-color: rebeccapurple green;
scrollbar-width: thin;
}
<div class="scroller">
Veggies es bonus vobis, proinde vos postulo essum magis kohlrabi
welsh onion daikon amaranth tatsoi tomatillo melon azuki bean garlic.
Gumbo beet greens corn soko endive gumbo gourd. Parsley shallot courgette
tatsoi pea sprouts fava bean collard greens dandelion okra wakame tomato.
Dandelion cucumber earthnut pea peanut soko zucchini.
</div>
Nguồn: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars
Đây là một ví dụ về webkit hoạt động cho Chrome và Safari:
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;
}
Đầu ra:
.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;
}
đã cho tôi một điện thoại di động / osx đẹp như một.
Có một cách mà bạn có thể áp dụng thanh cuộn tùy chỉnh cho các thành phần div tùy chỉnh trong tài liệu HTML của mình. Đây là một ví dụ giúp. https://codepen.io/adeelibr/pen/dKqZNb Nhưng như một ý chính của nó. Bạn có thể làm một cái gì đó như thế này.
<div class="scrollbar" id="style-1">
<div class="force-overflow"></div>
</div>
Tệp CSS trông như thế này.
.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;
}
Đây là những gì Google đã sử dụng trong một số ứng dụng của mình trong một thời gian dài. Xem trong mã rằng, nếu bạn áp dụng các lớp tiếp theo, bằng cách nào đó chúng ẩn thanh cuộn trong Chrome, nhưng nó vẫn hoạt động.
Các lớp học được jfk-scrollbar
, jfk-scrollbar-borderless
vàjfk-scrollbar-dark
.testg{ border:1px solid black; max-height:150px; overflow-y: scroll; overflow-x: hidden; width: 250px;}
.content{ height: 700px}
/* The google css code for scrollbars */
::-webkit-scrollbar {
height: 16px;
overflow: visible;
width: 16px
}
::-webkit-scrollbar-button {
height: 0;
width: 0
}
::-webkit-scrollbar-track {
background-clip: padding-box;
border: solid transparent;
border-width: 0 0 0 7px
}
::-webkit-scrollbar-track:horizontal {
border-width: 7px 0 0
}
::-webkit-scrollbar-track:hover {
background-color: 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 {
background-color: rgba(0, 0, 0, .05);
box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07)
}
::-webkit-scrollbar-track:horizontal:active {
box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar-dark::-webkit-scrollbar-track:hover {
background-color: 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 {
background-color: rgba(255, 255, 255, .1);
box-shadow: inset 1px 0 0 rgba(255, 255, 255, .25), inset -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-thumb {
background-color: rgba(0, 0, 0, .2);
background-clip: padding-box;
border: solid transparent;
border-width: 0 0 0 7px;
min-height: 28px;
padding: 100px 0 0;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset 0 -1px 0 rgba(0, 0, 0, .07)
}
::-webkit-scrollbar-thumb:horizontal {
border-width: 7px 0 0;
padding: 0 0 0 100px;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .07)
}
::-webkit-scrollbar-thumb:hover {
background-color: 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);
box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .15), inset 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 {
background-color: 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);
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14), inset -1px -1px 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar-borderless.jfk-scrollbar-dark::-webkit-scrollbar-track:hover {
background-color: rgba(255, 255, 255, .07);
box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .25), inset -1px -1px 0 rgba(255, 255, 255, .15)
}
.jfk-scrollbar-borderless::-webkit-scrollbar-thumb {
border-width: 0 1px 0 6px
}
.jfk-scrollbar-borderless::-webkit-scrollbar-thumb:horizontal {
border-width: 6px 0 1px
}
::-webkit-scrollbar-corner {
background: transparent
}
body::-webkit-scrollbar-track-piece {
background-clip: padding-box;
background-color: #f5f5f5;
border: solid #fff;
border-width: 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 {
border-width: 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;
background-color: #f5f5f5;
border: solid #fff;
border-width: 3px 0 0 3px;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14)
}
.jfk-scrollbar::-webkit-scrollbar {
height: 16px;
overflow: visible;
width: 16px
}
.jfk-scrollbar::-webkit-scrollbar-button {
height: 0;
width: 0
}
.jfk-scrollbar::-webkit-scrollbar-track {
background-clip: padding-box;
border: solid transparent;
border-width: 0 0 0 7px
}
.jfk-scrollbar::-webkit-scrollbar-track:horizontal {
border-width: 7px 0 0
}
.jfk-scrollbar::-webkit-scrollbar-track:hover {
background-color: 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 {
background-color: rgba(0, 0, 0, .05);
box-shadow: inset 1px 0 0 rgba(0, 0, 0, .14), inset -1px 0 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar::-webkit-scrollbar-track:horizontal:active {
box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover {
background-color: rgba(255, 255, 255, .1);
box-shadow: inset 1px 0 0 rgba(255, 255, 255, .2)
}
.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:horizontal:hover {
box-shadow: inset 0 1px 0 rgba(255, 255, 255, .2)
}
.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:active {
background-color: rgba(255, 255, 255, .1);
box-shadow: inset 1px 0 0 rgba(255, 255, 255, .25), inset -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-scrollbar::-webkit-scrollbar-thumb {
background-color: rgba(0, 0, 0, .2);
background-clip: padding-box;
border: solid transparent;
border-width: 0 0 0 7px;
min-height: 28px;
padding: 100px 0 0;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset 0 -1px 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {
border-width: 7px 0 0;
padding: 0 0 0 100px;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1), inset -1px 0 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar::-webkit-scrollbar-thumb:hover {
background-color: 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);
box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .15), inset 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-color: rgba(0, 0, 0, .035);
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14), inset -1px -1px 0 rgba(0, 0, 0, .07)
}
.jfk-scrollbar-borderless.jfk-scrollbar-dark.jfk-scrollbar::-webkit-scrollbar-track:hover {
background-color: rgba(255, 255, 255, .07);
box-shadow: inset 1px 1px 0 rgba(255, 255, 255, .25), inset -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 {
background: transparent
}
body.jfk-scrollbar::-webkit-scrollbar-track-piece {
background-clip: padding-box;
background-color: #f5f5f5;
border: solid #fff;
border-width: 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 {
border-width: 3px 0 0;
box-shadow: inset 0 1px 0 rgba(0, 0, 0, .14), inset 0 -1px 0 rgba(0, 0, 0, .07)
}
body.jfk-scrollbar::-webkit-scrollbar-thumb {
border-width: 1px 1px 1px 5px
}
body.jfk-scrollbar::-webkit-scrollbar-thumb:horizontal {
border-width: 5px 1px 1px
}
body.jfk-scrollbar::-webkit-scrollbar-corner {
background-clip: padding-box;
background-color: #f5f5f5;
border: solid #fff;
border-width: 3px 0 0 3px;
box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .14)
}
<div class="testg">
<div class="content">
Look Ma' my scrollbars doesn't have arrows <br /><br />
content, content, content <br /> content, content, content <br /> content, content, content s<br /> content, content, content <br/> content, content, content <br/> content, content, content d<br/> content, content, content <br/>
</div>
</div>
<br/>
<div class="testg jfk-scrollbar jfk-scrollbar-borderless jfk-scrollbar-dark">
<div class="content">
Look Ma' my scrollbars dissapear in chrome<br /><br />
content, content, content <br /> content, content, content <br /> content, content, content s<br /> content, content, content <br/> content, content, content <br/> content, content, content d<br/> content, content, content <br/>
</div>
</div>
http://jsfiddle.net/76kcuem0/32/
Tôi chỉ thấy nó hữu ích để loại bỏ các mũi tên từ thanh cuộn. Kể từ năm 2015, nó đã được sử dụng trong Google Maps khi tìm kiếm các vị trí trong danh sách kết quả trong giao diện người dùng thiết kế vật liệu của nó.
Thanh cuộn Webkit không hỗ trợ trên hầu hết các trình duyệt.
Hỗ trợ trên CHROME
Dưới đây là bản demo cho thanh cuộn webkit Webkit Thanh cuộn DEMO
Nếu bạn đang tìm kiếm nhiều ví dụ Kiểm tra thêm Ví dụ này
Phương pháp khác là Plugin Jquery Scroll Bar
Nó hỗ trợ trên tất cả các trình duyệt và dễ dàng áp dụng
Tải xuống plugin từ Tải xuống tại đây
Cách sử dụng và để có nhiều lựa chọn hơn KIỂM TRA NÀY
Tôi đã thử rất nhiều cuộn của JS và CSS và tôi thấy nó rất dễ sử dụng và được thử nghiệm trên IE và Safari và FF và hoạt động tốt
NHƯ @thebluefox đề nghị
Đây là cách nó làm việc
Thêm đoạn script dưới đây vào
<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>
Và đây là đoạn bạn cần cuộn
<div id="demo1" style="width:300px; height:250px; padding:8px; resize:both; overflow:scroll">
**Your Paragraph Comes Here**
</div>
Để biết thêm chi tiết truy cập trang plugin
Thanh cuộn tùy chỉnh FaceScroll
hy vọng nó giúp
Đối với những người vẫn đang tìm kiếm một giải pháp tốt chỉ cần tôi tìm ra plugin đơn giản này
Thư viện cuộn tùy chỉnh vanilla thư viện javascript với cuộn gốc, được thực hiện đơn giản, gọn nhẹ, dễ sử dụng và trình duyệt chéo.
Trong trường hợp của tôi, tôi đang tìm kiếm các giải pháp ReacJS, tác giả cũng cung cấp các hàm bao cho các ví dụ phản ứng, góc cạnh, vue và tiếp theo
Các trình duyệt Webkit (như Chrome, Safari và Opera) hỗ trợ phần tử giả không chuẩn :: - webkit-scrollbar , cho phép chúng tôi sửa đổi giao diện của thanh cuộn của trình duyệt.
Lưu ý: Các :: - webkit-cuộn không được hỗ trợ bởi trình duyệt Firefox hoặc IE và Edge.
* {
box-sizing: border-box;
font-family: sans-serif;
}
div {
width: 15rem;
height: 8rem;
padding: .5rem;
border: 1px solid #aaa;
margin-bottom: 1rem;
overflow: auto;
}
.box::-webkit-scrollbar {
width: .8em;
}
.box::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
}
.box::-webkit-scrollbar-thumb {
background-color: dodgerblue;
}
<div class="box">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
</div>
<div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate</p>
</div>
Tham khảo: Cách tạo một thanh cuộn tùy chỉnh
Chỉ sử dụng CSS hoạt động trong Firefox +64
.mycoldiv{
scrollbar-color: white rebeccapurple;
scrollbar-width: thin;
display: block;
height:400px;
overflow-x: auto;
}
Thông tin thêm: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Scrollbars
Giả sử bạn có div như
<div class="custom_scroll"> ... </div>
Áp dụng các kiểu CSS như
//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;
}
Cuộn kết quả sẽ xuất hiện dưới dạng
Hoặc sử dụng một cái gì đó như thế này:
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}};
Và khởi tạo:
<body onload="new MiniScroll(this);"></body>
Và tùy chỉnh:
.scroll-place { // ... // }
.scroll { // ... // }
overflow:auto;
Chỉ áp dụng cho điều đó<div>
. Bất kỳ chi tiết nền?