2012-02-16 19 views
6

Tôi đã tìm kiếm xung quanh rất nhiều và thấy mọi người gợi ý rằng:Tôi có thể tô màu nền của các mục đã chọn trong HTML, chỉ chọn các tùy chọn với CSS không?

::-moz-selection {background: red;} 
::selection {background: red; } 

..works cho màu nền của các mặt hàng đang được chọn trong một lựa chọn nhiều mục mẫu. (Lưu ý: Ý tôi là các mục đã chọn, không phải là các mục có tiêu điểm).

Tôi không thể làm việc này. Tôi có làm sai không?

#dropdowns select::selection { 
    background: red; 
} 

Cheers:/

Setup: Sử dụng Chrome dành cho Mac

+0

tương tự: http://stackoverflow.com/questions/8619406/css-selected-pseudo-class-tương tự-to-checked-nhưng-cho-cho-chọn-các yếu tố – BoltClock

Trả lời

23

Thay vì chỉ thiết lập một background-color bạn cũng có thể thiết lập một tuyến tính gradient như nền:

option:checked { 
    background: red linear-gradient(0deg, red 0%, red 100%); 
} 

này hoạt động trong IE11 và Chrome mới nhất và Firefox. Safari chỉ bỏ qua nó. Không kiểm tra IE/Edge.

Nếu bạn muốn thiết lập màu nền duy nhất cho tập trung nhiều lựa chọn bạn có thể sử dụng đoạn mã này:

select[multiple]:focus option:checked { 
    background: red linear-gradient(0deg, red 0%, red 100%); 
} 

Xem toàn bộ bản demo ở đây: http://codepen.io/marceltschopp/pen/PNyqKp

+2

Tôi cho rằng đây là câu trả lời đã chọn. –

+0

Vì vậy, rõ ràng bạn chỉ có thể thay thế màu đánh dấu mặc định bằng một hình ảnh chứ không phải màu khác? Làm cho tinh thần ... – BoltClock

+1

Tính năng này hoạt động trên Microsoft Edge. "IE/Edge" thường đề cập đến chế độ Edge trên IE11, tương tự như IE11. Nếu bạn muốn nói về trình duyệt mới, hãy gọi nó là "Microsoft Edge" hoặc "Edge" nhưng không gọi nó là IE. Nó không phải là IE. – BoltClock

2

::selection không áp dụng cho tùy chọn đã chọn; nó áp dụng cho văn bản được đánh dấu. Hoặc bạn hiểu sai các đề xuất của họ hoặc những gì họ nói là không đúng.

Theo this answer, bạn đang nghĩ để có thể sử dụng option:checked cho việc tạo kiểu các mục đã chọn:

#dropdowns option:checked { 
    background: red; 
} 

Nhưng tôi đã không thể có được nó để làm việc cho <select> hoặc <select multiple> yếu tố trong this test fiddle .

+0

Xin chào, cảm ơn bạn đã chỉnh sửa trước khi tôi có cơ hội cho bạn biết nó không hoạt động :) - Wierd! Cảm ơn cho fiddle.Tôi thấy rằng [lựa chọn] loại công trình nếu bạn thấy bạn fiddle sửa đổi ở đây: http://jsfiddle.net/vzDvK/1/ - Kết quả Odd mặc dù, bạn có thể có một cái nhìn xin vui lòng? –

+2

@Mere Development: Bạn có thể sử dụng '[selected]' thay vì ': checked', nhưng nó chỉ áp dụng cho bất kỳ tùy chọn nào được chọn tại thời điểm trang được tải (vì nó là một bộ chọn thuộc tính). Nếu bạn thay đổi lựa chọn, các kiểu sẽ không cập nhật. – BoltClock

+0

Ok cảm ơn vì đã gắn bó với điều này! Vì vậy, chúng tôi đang nói rằng: kiểm tra chỉ không hoạt động cho các tùy chọn vì một số lý do (tham khảo jsfiddle ban đầu của bạn)? Bạn có nghĩ đó là lỗi không? –

0

CSS Selector phù hợp với bạn sẽ là :checked

:: lựa chọn chỉ dành cho văn bản đã được nhấn mạnh:

+0

Cảm ơn bạn đã liên kết tới tài liệu, có vẻ như: đã chọn không hoạt động như mong đợi, tôi sẽ nhận xét ở trên sau một phút. Chúc mừng! –

0

Tôi thấy điều này bởi vì tôi đã có cùng một vấn đề, tôi đã tìm thấy một giải pháp kỳ lạ mà dường như làm việc atleast với chrome và có lẽ những người khác. Giải pháp là sử dụng bộ chọn thuộc tính. Điều này dường như làm việc với chrome, tôi đã thử nghiệm nó trong js fiddle. Một lưu ý phụ rằng hộp đã không ngay lập tức thay đổi màu sắc thành nền đỏ nhưng một khi tôi đã chọn một tùy chọn khác tôi có thể thấy rõ ràng rằng nó đã thực sự chuyển sang màu đỏ. Bạn có thể kiểm tra nó trong jsfiddle được liệt kê ở trên.

http://jsfiddle.net/vzDvK/1/

#dropdowns option[selected] { 
    background: red; 
} 
Các vấn đề liên quan