Chrome 135: Tạo Carousel & Slider Hoàn Hảo Chỉ Với CSS (Không Cần JavaScript!)
Lê Lân
1
Giới Thiệu Hai Pseudo-Elements Mới ::scroll-button() và ::scroll-marker() Trong Chrome 135
Mở Đầu
Với sự ra mắt của Chrome 135, các nhà phát triển web đã có thể tiếp cận hai pseudo-elements mới cực kỳ mạnh mẽ là và . Đây là bước tiến quan trọng để tạo ra các carousel, slider và các thành phần có thể cuộn một cách hoàn chỉnh mà không cần đến bất kỳ dòng mã JavaScript nào!
Trong bài viết này, chúng ta sẽ cùng tìm hiểu về hai pseudo-elements này, cách chúng hoạt động và tại sao chúng lại có ý nghĩa lớn đối với cộng đồng phát triển web hiện đại. Ngoài ra, bạn còn được khám phá ví dụ thực tế và cách khai thác tối đa khả năng của hai thành phần này bằng CSS thuần túy.
::scroll-button() và ::scroll-marker() Là Gì?
::scroll-button()
Pseudo-element này được dùng để hiện thị các nút điều khiển cuộn — có thể là nút trái/phải hoặc lên/xuống tùy vào hướng cuộn của phần tử. Bạn hoàn toàn có thể tùy chỉnh giao diện của chúng bằng CSS như bất kỳ thành phần nào khác. Người dùng cũng có thể tương tác trực tiếp mà không cần cài đặt thêm gì.
::scroll-marker()
Hãy tưởng tượng đây chính là các "điểm" báo hiệu vị trí của từng điểm scroll snap trong container. Nó hoạt động như những chấm chỉ dẫn giúp người dùng dễ dàng quan sát và điều hướng, đồng thời hỗ trợ khả năng truy cập và tương tác tốt.
Tính năng nổi bật:
Tương tác trực tiếp, kèm khả năng truy cập cao
Hiện trạng vị trí cuộn theo từng snap point
Dễ dàng tùy chỉnh bằng CSS
Vì Sao Đây Là Tin Tức Quan Trọng?
✅ Tự động hỗ trợ truy cập dành cho người dùng sử dụng trình đọc màn hình và bàn phím
✅ Hoạt động song song hoàn hảo với thuộc tính
✅ Không cần thêm một dòng mã JavaScript nào để vận hành
✅ Có thể thay đổi giao diện hoàn toàn chỉ bằng CSS
Đây là bước đột phá giúp các nhà phát triển tạo ra trải nghiệm cuộn tương tác, trực quan và có khả năng truy cập thuận tiện chỉ bằng CSS — vốn trước đây cần lượng lớn mã JS phức tạp.
Ví Dụ Thực Tế Về Carousel (Có JavaScript Fallback)
Dưới đây là demo một carousel đơn giản sử dụng JavaScript nhằm hỗ trợ trình duyệt cũ, tuy nhiên với Chrome 135 trở lên, bạn hoàn toàn có thể triển khai mà không cần JS.
Bạn có thể thấy, phần container sử dụng CSS như sau để tạo nút điều hướng:
.scroll-container::scroll-button(start) {
content: '◀';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
}
.scroll-container::scroll-button(end) {
content: '▶';
position: absolute;
right: 0;
top: 50%;
transform: translateY(-50%);
}
Không cần JavaScript phức tạp, không cần sự kiện lắng nghe. Chỉ cần sử dụng scroll-snap cộng với pseudo-elements, trình duyệt sẽ tự động xử lý.
Tại Sao Điều Này Lại Quan Trọng?
Lợi Ích Khi Sử Dụng ::scroll-button() và ::scroll-marker()
Ưu điểm
Diễn giải
Native accessibility
Tích hợp sẵn hỗ trợ đọc màn hình, dùng bàn phím thuận tiện
Keyboard support built-in
Dễ dàng điều khiển bằng phím mà không cần thêm mã
Zero JavaScript needed
Giảm được lượng mã JS, giúp tối ưu tốc độ và hiệu năng
Fully stylable with CSS
Tùy biến giao diện linh hoạt chỉ với CSS
Sử dụng pseudo-elements mới giúp giảm tải khối lượng code JavaScript nặng nề, đồng thời cải thiện hiệu năng và hỗ trợ người dùng khuyết tật một cách tự nhiên, chuẩn xác.
Tình Trạng Hỗ Trợ Trình Duyệt (Tính Đến Chrome 135)
Với sự xuất hiện của ::scroll-button() và ::scroll-marker(), chúng ta đang ở ngưỡng cửa của một kỷ nguyên mới trong phát triển giao diện web. Không còn cần những thư viện slider nặng nề hay JavaScript phức tạp, giờ đây các carousel và slider trở nên truy cập dễ dàng, thân thiện với tất cả người dùng và dễ dàng tuỳ biến bằng CSS thuần túy.
Tuy Firefox và Safari vẫn chưa bắt kịp, nhưng với sự phát triển nhanh chóng của web, chỉ còn là vấn đề thời gian cho một cú nhảy vọt toàn diện về tính năng này. Trong khi đó, việc áp dụng dần dần và kết hợp với progressive enhancement sẽ mang lại trải nghiệm tốt nhất cho người dùng.
Bạn đã sẵn sàng để thử sức với ::scroll-button()? Một carousel portfolio, slider sản phẩm hay bản hướng dẫn onboarding? Hãy chia sẻ ý tưởng và cùng trải nghiệm công nghệ CSS hiện đại nhất này!
Tham Khảo
Google Developers. (2024). Introducing ::scroll-button() and ::scroll-marker().