Thanh cuộn CSS tùy chỉnh cho Firefox


313

Tôi muốn tùy chỉnh một thanh cuộn với CSS.

Tôi sử dụng mã CSS WebKit này, 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ự trong Firefox?

Tôi biết tôi có thể dễ dàng làm điều đó bằng jQuery, nhưng tôi thích làm điều đó với CSS thuần hơn nếu có thể.

Sẽ biết ơn lời khuyên chuyên môn của ai đó!


1
Hãy chia sẻ cách bạn có thể làm điều đó bằng jQuery. Tôi gặp phải vấn đề tương tự nhưng đã sử dụng CSS để khắc phục 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ể giải quyết được.
iGbanam

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

Có một 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 hệ thống trống ở bên phải thanh cuộn jScrollPane. Chỉ nên có một thanh cuộn
iGbanam

1
Không đúng. Nếu bạn có điều đó, bạn đã làm điều gì đó sai ở đâu đó.
Dimitri Vorontzov

Xem câu trả lời của tôi ở đây: stackoverflow.com/questions/7357203/custom-scrollbars/ cho
Buzinas

Câu trả lời:


239

Tính đến cuối năm 2018, hiện đã có tùy chỉnh giới hạn trong Firefox!

Xem những câu trả lời sau:

Và điều này cho thông tin cơ bản: https://ormszilla.mozilla.org/show_orms.cgi?id=1460109


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

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

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


Theo như thay thế JavaScript, bạn có thể thử:


2
Cảm ơn bạn, Ba mươiDot. Một câu hỏi mặc dù: những gì về -moz-ngoại hình: 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 một cách nào đó?
Dimitri Vorontzov

2
Thật không may, không có giá trị nào -moz-appearancecó thể giúp được. "The -moz-appearance CSS property is used in Gecko (Firefox) to display an element using a platform-native styling based on the operating system's theme."- bạn sẽ chỉ nhận được một thanh cuộn bản địa.
ba mươi

15
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 plugin jscrollpane jQuery.
Dimitri Vorontzov

1
@JacquesMathieu, tôi hiểu ý của bạn. Mặc dù đó không phải là lỗi của Baron, nhưng nếu tôi tải xuống trang và ngăn baron khởi tạo, lỗi vẫn xảy ra. Vì vậy, có vẻ như Chrome nó có lỗi ở đây.
thephpdev

3
dự thảo.csswg.org / css-scrollbars-1 là giai đoạn 1 bắt đầu của thông số kỹ thuật, nhưng nó được bật trong Firefox Nightly ngay bây giờ.
wegry

53

Firefox 64 cho biết thêm hỗ trợ cho spec dự thảo CSS Scrollbars Mô-đun Level 1 , có thêm hai thuộc tính mới của scrollbar-widthscrollbar-colortrong đó đưa ra một số kiểm soát cách thanh cuộn được hiển thị.

Bạn có thể đặt scrollbar-colorthành một trong các giá trị sau (mô tả từ MDN):

  • auto Kết xuất nền tảng mặc định cho phần theo dõi của thanh cuộn, trong trường hợp không có bất kỳ thuộc tính màu thanh cuộn liên quan nào khác.
  • dark Hiển thị thanh cuộn tối, có thể là biến thể tối của thanh cuộn được cung cấp bởi nền tảng hoặc thanh cuộn tùy chỉnh có màu tối.
  • light Hiển thị thanh cuộn nhẹ, có thể là biến thể ánh sáng của thanh cuộn được cung cấp bởi nền tảng hoặc thanh cuộn tùy chỉnh có màu sáng.
  • <color> <color> Áp dụng màu đầu tiên cho ngón tay cái của thanh cuộn, màu thứ hai cho rãnh trên thanh cuộn.

Lưu ý rằng darklightcác giá trị hiện không được triển khai trong Firefox .

ghi chú macOS:

Các thanh cuộn bán trong suốt tự động ẩn mặc định là macOS có thể được tô màu theo quy tắc này (chúng vẫn chọn màu tương phản của riêng chúng dựa trên nền). Chỉ các thanh cuộn hiển thị vĩnh viễn (Tùy chọn hệ thống> Hiển thị thanh cuộn> Luôn luôn) được tô màu.

Trình diễn trực quan:

Bạn có thể đặt scrollbar-widththành một trong các giá trị sau (mô tả từ MDN):

  • auto Chiều rộng thanh cuộn mặc định cho nền tảng.
  • thin Một biến thể chiều rộng thanh cuộn mỏng trên các nền tảng cung cấp tùy chọn đó hoặc thanh cuộn mỏng hơn so với chiều rộng thanh cuộn nền tảng mặc định.
  • none Không có thanh cuộn nào được hiển thị, tuy nhiên phần tử vẫn sẽ có thể cuộn được.

Bạn cũng có thể đặt giá trị độ dài cụ thể, theo thông số kỹ thuật. Cả hai thinvà độ dài cụ thể có thể không làm bất cứ điều gì trên tất cả các nền tảng và chính xác những gì nó làm là dành riêng cho nền tảng. Cụ thể, Firefox dường như không hỗ trợ giá trị độ dài cụ thể ( nhận xét này về trình theo dõi lỗi của họ dường như xác nhận điều này ). Các thinkeywork dường như được hỗ trợ tốt, tuy nhiên, với ít nhất là hỗ trợ macOS và Windows.

Có lẽ đáng lưu ý rằng tùy chọn giá trị độ dài và toàn bộ thuộc scrollbar-widthtính đang được xem xét để xóa trong dự thảo trong tương lai và nếu điều đó xảy ra, thuộc tính cụ thể này có thể bị xóa khỏi Firefox trong phiên bản tương lai.

Trình diễn trực quan:


Cảm ơn câu trả lời này. Tôi đã cập nhật câu trả lời được chấp nhận của mình để quảng bá câu trả lời này (và câu trả lời có liên quan khác) để mọi người có thể thấy nó hơn.
ba mươi

1
Điều này về cơ bản trùng lặp câu trả lời của Luca từ ba tuần trước.
Josh Habdas

@JoshHabdas Câu trả lời đó không chứa nhiều thông tin tương thích hoặc sử dụng. Tôi đã tạo ra câu trả lời này vì câu trả lời khác không có thông tin quan trọng mà tôi đang tìm kiếm.
Alexander O'Mara

1
Bạn có thể cung cấp cho họ tín dụng, đề nghị phản hồi hoặc xem xét chỉnh sửa câu trả lời của họ.
Josh Habdas

2
@JoshHabdas Vâng, 5 người đã thấy nó hữu ích và nó chứa thông tin không tìm thấy ở bất kỳ nơi nào khác trên web, vì vậy tôi không đồng ý.
Alexander O'Mara

43

Tôi có thể cung cấp một sự thay thế?

Không có kịch bản nào, chỉ có các kiểu css được 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 có, có nghĩa là bạn giữ lại tất cả cá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;
}

Để xem demo và giải thích sâu hơn một chút, xem tại đây ...

jsfiddle.net/aj7bxtjz/1/


7
Điều này không trả lời câu hỏi, thật không may. Dimitri đang cố gắng tạo kiểu cho thanh cuộn, không che giấu nó.
stvnrynlds

14
Đó 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 một cái gì đó cho đến bây giờ. Nhưng chủ đề vẫn còn liên quan đến ngày hôm 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ả mặt trước là thanh cuộn kiểu dáng trực quan, bất kể thực tế là cách thực hiện nó đang ẩn một phần của nó.
Tomaz

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

3
vâng, sau bốn năm, nó không phải là để trả lời câu hỏi của OP nhiều như nó đang đóng góp cho cộng đồng.
tmthyjames 2/10/2015

3
Bản chất của vấn đề là các giải pháp được cung cấp bởi một số công cụ kết xuất là không chuẩn. Đây là câu hỏi giải quyết tốt nhất mối quan tâm của tôi và đây là câu trả lời tôi đang tìm kiếm.
Filip Dupanović

36

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

Tôi đã cho JQuery Custom Scrollbar đi. Nó khá lạ mắt và thực hiện một số thao tác cuộn mượt mà (với quán tính cuộn) và có vô số tham số bạn có thể điều chỉnh, nhưng cuối cùng tôi lại quá tốn CPU (và nó bổ sung một lượng khá lớn vào DOM).

Bây giờ tôi đang cho Perfect Scrollbar đi. Nó đơn giản và nhẹ (6KB) và cho đến nay nó vẫn hoạt động tốt. Nó hoàn toàn không tốn CPU (theo như tôi có thể nói) và thêm rất ít vào DOM của bạn. Nó chỉ có một vài tham số để điều 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).

Tái bút: Tôi đã có một cái nhìn nhanh về JScrollPane, nhưng @simone đã đúng, hiện tại nó hơi cũ và là một PITA.


3
Ngoài ra còn có trình giả lập cuộn trackpad - đó là những gì twitch.tv sử dụng.
trước

1
Perfect Scrollbar thực sự rất tốt. Sau khi cạn kiệt nhiều lựa chọn khác, tôi thấy đó là giải pháp tốt nhất. Cảm ơn đã gợi ý nó.
Leonard Teo

nanoScroller cũng thực sự tốt và tương đối nạc. jamesflorentino.github.io/nanoScrollerJS Chống lại nặng plugin JS, điều này chỉ đơn giản là ẩn scroller bản xứ, và hiển thị một scroller thay thế bằng cách sử dụng 'cuộn' sự kiện tự nhiên
Danny R

1
Tôi đã tránh tất cả các giải pháp jquery, vì tất cả chúng đều tụt lại trên các máy chậm hơn hoặc máy bị căng thẳng, nhưng PS trông giống như một người chiến thắng
RozzA

31

Kể từ Firefox 64 , có thể sử dụng thông số kỹ thuật mới cho kiểu dáng Thanh cuộn đơn giản ( không đầy đủ như trong Chrome với tiền tố nhà cung cấp ).

Trong ví dụ này có thể thấy một giải pháp kết hợp các quy tắc khác nhau để giải quyết cả Firefox và Chrome với kết quả cuối cùng (không bằng nhau) (ví dụ sử dụng quy tắc Chrome gốc của bạn):

Các quy tắc chính là:

Dành cho Firefox

.scroller {
  overflow-y: scroll;
  scrollbar-color: #0A4C95 #C2D2E4;
}

Dành cho Chrome

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

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

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

Xin lưu ý rằng đối với giải pháp của bạn, có thể sử dụng các quy tắc Chrome đơn giản hơn như sau:

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

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

Cuối cùng, để ẩn mũi tên trong thanh cuộn cũng trong Firefox, hiện tại cần thiết phải đặt nó là " mỏng " theo quy tắc sauscrollbar-width: thin;


1
Có vẻ như IE 5.5 có thể đã nhận được một cái gì đó ngay sau khi tất cả. :)
Josh Habdas


0

Nó hoạt động theo kiểu người dùng và dường như không hoạt động trong các trang web. Tôi chưa tìm thấy hướng chính thức từ Mozilla về điều này. Mặc dù có thể nó đã hoạt động vào một lúc nào đó, Firefox không có hỗ trợ chính thức cho việc này. Lỗi này vẫn đang mở https://ormszilla.mozilla.org/show_orms.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-USE-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 jsfiddle.net/gGbkY/1 tôi có thiếu gì không?
Satinder singh

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

1
vui lòng kiểm tra cùng một liên kết: nó không còn hoạt động nữa
Krunal Shah

3
Phong cách người dùng là gì?
Marecky

Lỗi bạn liên kết đã được báo cáo 17 năm trước và vẫn chưa được chỉ định. Tôi nghĩ thật an toàn khi nói rằng FF sẽ không bao giờ hỗ trợ việc ẩn các thanh cuộn gốc.
Sterling Bourne

-2
@-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;
    }
}

5
Bạn đã cung cấp một blob mã với ít hoặc không có thông tin mô tả những gì nó làm hoặc làm thế nào nó làm.
Josh Habdas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.