Ngày phát hành: 24 tháng 3 năm 2025
Kể từ Chrome 135, nhà phát triển và nhà thiết kế web cuối cùng cũng có thể hợp nhất trên một phần tử <select>
có thể truy cập, được chuẩn hoá và có thể tạo kiểu CSS trên web. Quá trình này đã diễn ra trong nhiều năm, với nhiều giờ làm việc kỹ thuật và cộng tác về thông số kỹ thuật. Kết quả là một thành phần vô cùng phong phú và mạnh mẽ, không bị lỗi trong các trình duyệt cũ.
Dưới đây là video về các lựa chọn tuỳ chỉnh sử dụng các tính năng mới này:
Nếu theo dõi sát sao, bạn sẽ nhận thấy một số tên thông số và tính năng đã thay đổi kể từ khi Una yêu cầu ý kiến phản hồi của cộng đồng. May mắn thay, nếu bạn đã làm theo bài đăng đó và quan tâm đến những điểm thay đổi, thì Una cũng có thể giúp bạn.
Ngoài ra, còn có tài liệu mới trên MDN về tính năng chọn tuỳ chỉnh, chứa đầy thông tin chi tiết.
Giới thiệu về appearance: base-select
Thuộc tính CSS mới appearance: base-select
đặt phần tử <select>
vào trạng thái mới, có thể định cấu hình và tạo kiểu, thường được gọi là kiểu "cơ sở":
.custom-select {
&, &::picker(select) {
appearance: base-select;
}
}
Việc sử dụng base-select
mở khoá một số tính năng và hành vi mới:
- Thay đổi trình phân tích cú pháp HTML của trình duyệt cho nội dung bên trong
<select>
. - Thay đổi nội dung hiển thị nội bộ của
<select>
. - Hiển thị các phần và trạng thái nội bộ mới cho
<select>
. - Giao diện tối giản mới, được tối ưu hoá để tuỳ chỉnh.
- Các tuỳ chọn hiển thị nằm ở lớp trên cùng, chẳng hạn như một cửa sổ bật lên.
- Các tuỳ chọn hiển thị được định vị bằng
anchor()
.
Việc sử dụng base-select
mất một số tính năng và hành vi:
<select>
không hiển thị bên ngoài ngăn trình duyệt.- Loại này không kích hoạt các thành phần hệ điều hành di động tích hợp.
<select>
sẽ ngừng lấy chiều rộng của<option>
dài nhất.
<select>
hiện có thể bao gồm nội dung HTML đa dạng thức
Trước khi bạn có thể tuỳ chỉnh <select>
, nếu bạn đặt những thứ như hình ảnh hoặc SVG vào phần tử <option>
, trình duyệt sẽ bỏ qua các phần tử đó.
Hãy xem xét đoạn mã HTML sau đây, trình duyệt sẽ đọc đoạn mã đó như khi bạn tạo:
<select class="custom-select">
<option>
<svg aria-hidden>…</svg>
<span>HTML</span>
</option>
<option>
<svg aria-hidden>…</svg>
<span>CSS</span>
</option>
<option>
<svg aria-hidden>…</svg>
<span>JavaScript</span>
</option>
<option>
<svg aria-hidden>…</svg>
<span>WASM</span>
</option>
</select>
Tuy nhiên, DOM được sử dụng sẽ không bao gồm <svg>
:
<select class="custom-select">
<option>
<span>HTML</span>
</option>
<option>
<span>CSS</span>
</option>
<option>
<span>JavaScript</span>
</option>
<option>
<span>WASM</span>
</option>
</select>
Dưới đây là (từ trái sang phải) Chrome, Safari và Firefox hiển thị HTML trước đó. Nếu trình duyệt hỗ trợ appearance: base-select
thì SVG sẽ xuất hiện trong tuỳ chọn, nếu không thì sẽ không xuất hiện.

Có nguy cơ làm hỏng các trang web hiện có bằng lựa chọn có thể tuỳ chỉnh do các thay đổi đối với trình phân tích cú pháp. Chrome có các tính năng đằng sau thử nghiệm Finch trong trường hợp cần tắt thử nghiệm theo cách khẩn cấp. Nếu mọi thứ diễn ra suôn sẻ, thử nghiệm sẽ kết thúc và mã sẽ được gửi vĩnh viễn vào nguồn.
Có thể tuỳ chỉnh hoàn toàn
Mọi phần của base-select
đều có thể được hoán đổi, tuỳ chỉnh và tạo ảnh động. Dưới đây là một bản minh hoạ sử dụng mọi tính năng mới để tạo ra các trải nghiệm chọn lọc dễ nhận biết và có ý nghĩa.

Bạn có thể tìm thấy nhiều ví dụ khác trong phần tài nguyên ở cuối bài đăng này.
Giao diện JavaScript không thay đổi
Không có rủi ro nào đối với các hoạt động tương tác hiện có của bạn với JavaScript bằng phần tử <select>
.
Tuy nhiên, nếu bắt đầu thêm HTML đa dạng thức vào các phần tử <option>
, bạn nên kiểm thử các giá trị đã chọn vì trình duyệt vẫn phân tích cú pháp và bỏ qua hình ảnh cũng như SVG. Tuy nhiên, logic đã thay đổi để xác định chuỗi nội dung đã chọn và tuỳ thuộc vào các tuỳ chọn bạn có, bạn có thể cần điều chỉnh.
Nếu đang sử dụng thuộc tính value
trên <option>
, bạn không cần lo lắng.
Tài nguyên
Chrome là trình duyệt đầu tiên triển khai base-select
, nhưng mọi trình duyệt đều tham gia vào quy cách và vẫn còn nhiều phần tử "cơ sở" chưa hoàn tất. Đây mới chỉ là bước khởi đầu.
Hãy chú ý theo dõi vì chúng tôi sẽ tiếp tục bổ sung hướng dẫn, ví dụ và tài nguyên về cách tuỳ chỉnh một số phần tử. Trong thời gian chờ đợi, hãy xem các đường liên kết sau đây để biết thêm thông tin.
- Tiêu chuẩn web
- Chrome
- Cộng đồng
Xin cảm ơn đặc biệt tất cả những người đã góp phần vào sự kiện này!