CSS: lớp giả được chọn tương tự như: đã chọn, nhưng dành cho các phần tử <select>


86

Có cách nào để tạo kiểu cho <option>phần tử đang được chọn trong một <select>phần tử không?

Sau đó, tôi có thể cung cấp màu nền cho phần tử tùy chọn hiện được chọn không? Bằng cách đó, tôi có thể tạo kiểu cho tùy chọn hiện có thể xem được trong menu thả xuống đã đóng.

Câu trả lời:


123

các :checkedpseudo-class ban đầu áp dụng đối với các yếu tố như vậy có HTML4 selectedcheckedthuộc tính

Nguồn: w3.org


Vì vậy, CSS này hoạt động, mặc dù colorkhông thể tạo kiểu trong mọi trình duyệt:

option:checked { color: red; }

Một ví dụ về điều này trong hoạt động, ẩn mục hiện được chọn khỏi danh sách thả xuống.

option:checked { display:none; }
<select>
    <option>A</option>
    <option>B</option>
    <option>C</option>
</select>


Để tạo kiểu cho tùy chọn hiện được chọn trong menu thả xuống đã đóng , bạn có thể thử đảo ngược logic:

select { color: red; }
option:not(:checked) { color: black; } /* or whatever your default style is */

5
Bạn đã kiểm tra nó? Nó dường như không hoạt động đối với tôi trên FF8. cập nhật: nó cũng không hoạt động trong Chromium 15.
Brigand

1
@emmett Tôi cũng đã kiểm tra nó trong Chrome 16. Như tôi đã nói trong nhận xét trước đây của mình, nó tạo kiểu cho tùy chọn đã chọn trong danh sách thả xuống, nhưng không tạo kiểu cho tùy chọn trong vùng có thể xem đã đóng.
Web_Designer

2
@Web_Designer Ok, tôi thấy sự cố. Tôi đã chỉnh sửa câu trả lời của mình bằng một giải pháp khác (khó hiểu).
Emmett 23/12/11

câu trả lời được chấp nhận không hoạt động đối với tôi trong chrome. bạn có thể kiểm tra ở đây: jsfiddle.net/hk4s0ech
Andre Chenier

17

Trên thực tế, bạn chỉ có thể tạo kiểu cho một vài thuộc tính CSS trên : các phần tử tùy chọn đã sửa đổi . colorcũng không hoạt động, background-colornhưng bạn có thể đặt a background-image.

Bạn có thể kết hợp điều này với gradient để thực hiện thủ thuật.

option:hover,
option:focus,
option:active,
option:checked {
  background: linear-gradient(#5A2569, #5A2569);
}
<select>
  <option>A</option>
  <option>B</option>
  <option>C</option>
</select>

Hoạt động trên gecko / webkit.


Câu trả lời được chấp nhận không hoạt động với tôi, nhưng giải pháp này đã làm được. Cảm ơn bạn!
Anthony Hilyard

Lưu ý rằng bạn cũng có thể áp dụng bộ lọc cho nó như sau: Option: check {filter: grayscale (1);} Điều này tương tự như cách ngày nay bạn có thể tạo kiểu cho hộp kiểm và nút radio trong Chrome để làm cho chúng không có màu xanh lam.
KS74

3

Điều này đã làm việc cho tôi:

select option {
   color: black;
}
select:not(:checked) {
   color: gray;
}
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.