Trình tạo thanh cuộn CSS
Thanh cuộn tùy chỉnh trước đây là cơn ác mộng của các phần tử giả có tiền tố nhà cung cấp. Ngày nay, scrollbar-color và scrollbar-width xử lý các trường hợp phổ biến trên mọi trình duyệt hiện đại: chiều rộng hẹp hoặc bình thường và giao diện hai màu (con trượt và rãnh). Để kiểm soát ở cấp độ pixel (khoảng đệm của rãnh, bán kính con trượt, trạng thái khi di chuột), các phần tử giả ::-webkit-scrollbar cũ vẫn hoạt động trong Chrome và Safari. Trình tạo này xuất ra cả hai phiên bản và xếp lớp chúng đúng cách.
Cách tạo kiểu cho thanh cuộn
-
1
Chọn chiều rộng
Tự động (chiều rộng mặc định của nền tảng), mỏng (hẹp hơn) hoặc một giá trị pixel cụ thể thông qua các quy tắc webkit.
-
2
Đặt màu cho con trượt và rãnh
`scrollbar-color` hiện đại nhận hai màu. Các quy tắc webkit cung cấp màu, bán kính và trạng thái khi di chuột riêng biệt.
-
3
Thêm hiệu ứng khi di chuột (tùy chọn)
Con trượt sáng lên khi di chuột. Hoạt động thông qua `::-webkit-scrollbar-thumb:hover`.
-
4
Xác định phạm vi
Áp dụng cho `html` / `body` (toàn trang) hoặc chỉ cho một vùng chứa cuộn cụ thể.
-
5
Sao chép CSS
Kết hợp các quy tắc hiện đại và webkit: hoạt động trên mọi trình duyệt hiện đại với cơ chế dự phòng mượt mà.
Các thuộc tính chuẩn hiện đại (2023 trở đi)
/* Applies to the element that scrolls */
html {
scrollbar-width: thin; /* auto | thin | none */
scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}
Hỗ trợ trình duyệt (2024):
scrollbar-width: Chrome 121+, Safari 18.2+, Firefox 64+.scrollbar-color: Chrome 121+, Safari 18.2+, Firefox 64+.scrollbar-gutter: stable: Chrome 94+, Safari 14+, Firefox 97+. Dự trữ không gian thanh cuộn ngay cả khi không cần, ngăn hiện tượng dịch chuyển bố cục.
Các phần tử giả của webkit (Chrome, Safari, Edge phiên bản cũ)
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: #e5e7eb;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #3730a3;
}
Kiểm soát chi tiết hơn. width thiết lập chiều rộng thanh cuộn dọc; height thiết lập chiều cao thanh cuộn ngang. Hãy thêm cả hai cho các vùng chứa có thể cuộn theo cả hai hướng.
Xếp lớp hai cách tiếp cận
Hãy chỉ định các quy tắc hiện đại trước, sau đó dùng webkit như một cải tiến cho những trình duyệt hiển thị được cả hai:
.scroll-area {
scrollbar-width: thin;
scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 4px;
border: 2px solid #e5e7eb;
}
Firefox chỉ tuân theo các quy tắc hiện đại scrollbar-*. Chrome và Safari tuân theo các quy tắc webkit (những quy tắc này ghi đè lên quy tắc hiện đại, nên hành vi luôn nhất quán).
scrollbar-gutter ngăn nội dung bị dịch chuyển
Nếu không có rãnh dành riêng, nội dung sẽ bị dồn lại khi thanh cuộn xuất hiện (thường gặp ở các danh sách động). Cách khắc phục:
html { scrollbar-gutter: stable; }
/* or */
html { scrollbar-gutter: stable both-edges; }
Khe thanh cuộn được dành riêng bất kể nội dung có cuộn hay không. both-edges bổ sung một rãnh tương ứng ở phía đối diện để giữ nội dung căn giữa về mặt thị giác.
Ẩn hoàn toàn thanh cuộn
.no-scrollbar {
scrollbar-width: none; /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; } /* Chrome, Safari */
Hãy cẩn thận: ẩn thanh cuộn sẽ khiến người dùng không nhận ra nội dung có thể cuộn được. Chỉ nên dùng khi có chỉ báo rõ ràng (mũi tên, chấm trang) hoặc khi hành vi cuộn đã hiển nhiên theo ngữ cảnh (băng chuyền ngang, lịch sử trò chuyện).
Lưu ý cho thiết bị di động
Trên iOS và Android, thanh cuộn chỉ xuất hiện trong chốc lát khi cuộn. CSS thanh cuộn tùy chỉnh của bạn vẫn được áp dụng, nhưng người dùng có thể không bao giờ nhìn thấy nó quá một giây. Hãy thiết kế cho phù hợp: đừng đầu tư quá nhiều vào các chi tiết thị giác hiếm khi xuất hiện.
Khả năng tiếp cận
- Độ tương phản: con trượt so với rãnh phải đạt tỷ lệ 3:1 đối với tương phản không phải văn bản (WCAG 1.4.11).
- Chiều rộng: các thanh cuộn mỏng có thể khó nắm bắt bằng chuột, đặc biệt với người dùng bị hạn chế vận động. Chiều rộng bình thường là lựa chọn mặc định an toàn hơn.
- Không bao giờ gỡ bỏ thanh cuộn ở các vùng có thể cuộn mà không cung cấp cách cuộn khác. Người dùng phụ thuộc vào thanh cuộn sẽ bị mắc kẹt.
Câu hỏi thường gặp
Có, với các thuộc tính hiện đại scrollbar-width và scrollbar-color. Firefox không hỗ trợ các phần tử giả của webkit, vì vậy để có giao diện nhất quán trên các trình duyệt, hãy dùng các thuộc tính hiện đại trước rồi thêm các quy tắc webkit như một cải tiến.
Vì thanh cuộn mặc định che phủ nội dung và không dành sẵn khoảng trống cho đến khi cần. Hãy đặt scrollbar-gutter: stable trên phần tử cuộn để luôn dành riêng rãnh, ngăn nội dung bị dồn lại khi thanh cuộn xuất hiện hoặc biến mất.
Thường thì có, vì thanh cuộn trông không hợp lý và cạnh tranh với nội dung. Hãy thêm các chấm phân trang hoặc nút mũi tên rõ ràng để người dùng vẫn biết nội dung có thể cuộn. Hãy tôn trọng prefers-reduced-motion nếu bạn dùng cơ chế bám cuộn (scroll-snapping).
Có thể. Các thanh cuộn quá mỏng hoặc tương phản thấp gây khó dùng cho người khuyết tật vận động và người khiếm thị. Hãy giữ thanh cuộn rộng ít nhất 8–10 px để dễ nắm bắt và duy trì tỷ lệ tương phản 3:1 giữa con trượt và rãnh.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bộ chuyển đổi Base64 sang Hex
Chuyển chuỗi Base64 chuẩn thành các byte nền tảng được viết dưới dạng hexadecimal liên tục in hoa. Giải mã nghiêm ngặt, lý tưởng cho token, khóa và chữ ký JWT.
Trình tạo bảng màu ngẫu nhiên
Tạo bảng màu ngẫu nhiên từ 2 đến 15 mẫu màu, chọn phong cách rực rỡ, pastel, dịu hoặc tối, rồi sao chép mã HEX hoặc biến CSS.
Trình xem hex của tệp nhị phân
Chọn một tệp và kiểm tra phần dữ liệu giới hạn từ bất kỳ offset byte hợp lệ nào dưới dạng hex dump cục bộ với cột offset, hex và ASCII.
Bộ chọn màu HEX
Chọn hoặc nhập màu HEX để xem RGB, HSL, CMYK ước tính, độ chói tương đối và tương phản với trắng và đen.