2011-05-29 94 views
209

Tôi muốn tùy chỉnh kiểu thanh cuộn bằng CSS.Thanh cuộn CSS tùy chỉnh cho Firefox

tôi sử dụng mã CSS này WebKit, mà hoạt động tốt cho Safari và Chrome:

::-webkit-scrollbar { 
width: 15px; 
height: 15px; 
} 


::-webkit-scrollbar-track-piece { 
background-color: #C2D2E4; 
} 

::-webkit-scrollbar-thumb:vertical { 
height: 30px; 
background-color: #0A4C95; 
} 

Làm thế nào tôi có thể làm điều tương tự cho Firefox?

(Tôi biết tôi có thể dễ dàng làm điều đó bằng jQuery, nhưng tôi muốn làm điều đó với CSS nếu nó doable.)

sẽ được biết ơn đối với chuyên gia tư vấn của ai đó!

+1

Xin hãy chia sẻ cách bạn có thể làm điều đó bằng jQuery. Tôi đang phải đối mặt với cùng một vấn đề nhưng sử dụng CSS để sửa chữa nó cho Webkit. Tuy nhiên, Firefox đặt ra một vấn đề mà giải pháp jQuery của bạn có thể trợ giúp. – iGbanam

+1

Tôi khuyên bạn nên sử dụng jscrollpane jQuery plugin. –

+0

Có vấn đề với jScrollPane trong Firefox. jScrollPane hoạt động hoàn hảo trong Chrome nhưng trong Firefox bạn có một thanh cuộn _system_ trống ở bên phải thanh cuộn jScrollPane. Chỉ nên có một thanh cuộn – iGbanam

Trả lời

157

Không có Firefox tương đương với ::-webkit-scrollbar và bạn bè.

Bạn sẽ phải gắn bó với JavaScript.

Rất nhiều người sẽ thích tính năng này, xem: https://bugzilla.mozilla.org/show_bug.cgi?id=77790

Báo cáo này được hỏi cho cùng một điều chính xác bạn đang yêu cầu cho: https://bugzilla.mozilla.org/show_bug.cgi?id=547260

Nó đã được đóng cửa như một bản sao của người đầu tiên báo cáo tôi đã liên kết đến.


Theo như thay thế Javascript đi, bạn có thể thử:

+2

Cảm ơn bạn, ThirtyDot. Một câu hỏi mặc dù: những gì về xuất hiện -moz: scrollbartrack-vertical - và các phần mở rộng CSS liên quan khác? Có lẽ chúng có thể được sử dụng theo cách nào đó? –

+1

Không. Thật không may, không có giá trị nào có thể cho ['-moz-appearance'] (https://developer.mozilla.org/en/CSS/-moz-appearance) có thể hữu ích. '" Thuộc tính CSS xuất hiện -moz được sử dụng trong Gecko (Firefox) để hiển thị một phần tử sử dụng kiểu dáng nền tảng gốc dựa trên chủ đề của hệ điều hành. "' - bạn sẽ chỉ nhận được một thanh cuộn gốc. – thirtydot

+14

Chỉ trong trường hợp bất cứ ai đọc điều này cần một giải pháp thực tế, tôi đã kết thúc bằng cách sử dụng jscrollpane jQuery plugin. –

32

Tôi nghĩ rằng tôi sẽ chia sẻ phát hiện của tôi trong trường hợp ai đó đang xem xét một JQuery plugin để thực hiện công việc.

Tôi đã cung cấp JQuery Custom Scrollbar một lần. Nó khá lạ mắt và có một số cuộn mượt mà (với cuộn quán tính) và có rất nhiều thông số bạn có thể tinh chỉnh, nhưng nó đã trở thành một chút quá nhiều CPU cho tôi (và nó bổ sung thêm một số tiền hợp lý cho DOM).

Bây giờ tôi đang tặng Perfect Scrollbar một lần. Nó đơn giản và nhẹ (6KB) và nó đang làm một công việc khá tốt cho đến nay. Nó không phải là CPU chuyên sâu ở tất cả (như xa như tôi có thể nói) và thêm rất ít để DOM của bạn. Nó chỉ có một vài tham số để tinh chỉnh (wheelSpeed ​​và wheelPropagation), nhưng đó là tất cả những gì tôi cần và nó xử lý các cập nhật cho nội dung cuộn độc đáo (chẳng hạn như tải hình ảnh).

P.S. Tôi đã có một cái nhìn nhanh về JScrollPane, nhưng @simone là đúng, nó là một chút ngày nay và một PITA.

+3

Ngoài ra còn có [trình giả lập cuộn trackpad] (https://github.com/jnicol/trackpad-scroll-emulator) - đó là những gì twitch.tv sử dụng. – forivall

+1

Thanh cuộn hoàn hảo thực sự rất tốt. Sau khi hết nhiều lựa chọn khác, tôi thấy nó là giải pháp tốt nhất. Cảm ơn bạn đã đề xuất. –

+0

nanoScroller cũng rất tốt và tương đối gầy. https: //jamesflorentino.github.io/nanoScrollerJS/ Trái ngược với các plugin JS nặng, trình đơn này đơn giản ẩn trình cuộn gốc và hiển thị một cuộn thay thế bằng sự kiện 'cuộn' gốc –

0

Nó hoạt động theo kiểu người dùng và có vẻ như không hoạt động trong các trang web. Tôi đã không tìm thấy hướng chính thức từ Mozilla về điều này. Trong khi nó có thể đã làm việc tại một số điểm, Firefox không có hỗ trợ chính thức cho việc này. Lỗi này vẫn mở https://bugzilla.mozilla.org/show_bug.cgi?id=77790

scrollbar { 
/* clear useragent default style*/ 
    -moz-appearance: none !important; 
} 
/* buttons at two ends */ 
scrollbarbutton { 
    -moz-appearance: none !important; 
} 
/* the sliding part*/ 
thumb{ 
    -moz-appearance: none !important; 
} 
scrollcorner { 
    -moz-appearance: none !important; 
    resize:both; 
} 
/* vertical or horizontal */ 
scrollbar[orient="vertical"] { 
    color:silver; 
} 

kiểm tra http://codemug.com/html/custom-scrollbars-using-css/ để biết chi tiết.

+2

tôi đã cố gắng giống như bạn đã viết, nhưng nó không hoạt động cho FF của tôi, hãy kiểm tra http://jsfiddle.net/gGbkY/1/ am i missing một cái gì đó? –

+0

Nó hoạt động theo kiểu người dùng và có vẻ như không hoạt động trong các trang web. Tôi đã không tìm thấy hướng chính thức từ Mozilla về điều này. – ipirlo

+1

hãy kiểm tra cùng một liên kết: nó không hoạt động nữa –

30

Tôi có thể cung cấp giải pháp thay thế không?

Không kịch bản nào, chỉ có kiểu CSS tiêu chuẩn hóa và một chút sáng tạo. Câu trả lời ngắn - che các phần của thanh cuộn trình duyệt hiện tại, có nghĩa là bạn giữ lại tất cả chức năng của nó.

.scroll_content { 
    position: relative; 
    width: 400px; 
    height: 414px; 
    top: -17px; 
    padding: 20px 10px 20px 10px; 
    overflow-y: auto; 
} 

Đối với bản demo và một chút sâu hơn giải thích, đánh dấu vào đây ...

jsfiddle.net/aj7bxtjz/1/

+0

Rất tiếc, điều này không trả lời được câu hỏi. Dimitri đang cố gắng tạo kiểu cho thanh cuộn, không giấu nó. – stvnrynlds

+10

Đó là 4 năm trước (tôi biết điều đó) vì vậy tôi chắc chắn rằng anh ấy đã làm điều gì đó ngay bây giờ. Nhưng chủ đề vẫn còn có liên quan ngày nay - trong khi các trình duyệt khác cho phép một số loại sửa đổi "bất hợp pháp" của thanh cuộn, FF thì không. Đó là lý do tại sao tôi quyết định để đăng nó. Và kết quả front-end là thanh trượt kiểu dáng trực quan, bất kể thực tế là cách để làm điều đó là ẩn một phần của nó. – Tomaz

+0

Tôi yêu giải pháp này ngoại trừ tất cả các đánh dấu phụ với vị trí tuyệt đối (làm cho kích thước biến thành cơn ác mộng) cộng với bạn không thể thay đổi phong cách, bạn chỉ đơn giản là che giấu/ẩn các phần tử của cuộn hiện có - quá tệ nếu tôi muốn một thanh màu xanh lá cây ! – RozzA

1
@-moz-document url-prefix(http://),url-prefix(https://) { 
    scrollbar { 
     -moz-appearance: none !important; 
     background: rgb(0,255,0) !important; 
    } 
    thumb,scrollbarbutton { 
     -moz-appearance: none !important; 
     background-color: rgb(0,0,255) !important; 
    } 

    thumb:hover,scrollbarbutton:hover { 
     -moz-appearance: none !important; 
     background-color: rgb(255,0,0) !important; 
    } 
    scrollbarbutton { 
     display: none !important; 
    } 
    scrollbar[orient="vertical"] { 
     min-width: 15px !important; 
    } 
} 
Các vấn đề liên quan