2012-01-13 36 views
68

Tôi biết có một lớp học giả CSS3 :checked chính thức, nhưng có lớp học giả :unchecked và chúng có cùng hỗ trợ trình duyệt không?CSS3: không được đánh dấu giả lớp

Sitepoint's reference không đề cập đến một, tuy nhiên điều này whatwg spec (bất kể đó là gì).

tôi biết kết quả tương tự có thể đạt được khi :checked:not() pseudo-classes được kết hợp, nhưng tôi vẫn tò mò:

input[type="checkbox"]:not(:checked) { 
    /* styles */ 
} 

Edit:

W3C khuyến cáo giống nhau kỹ thuật

Có thể chọn hộp kiểm không được chọn bằng cách sử dụng lớp giả phủ định:

:not(:checked) 

Trả lời

4

Không có: không được kiểm soát lớp học giả tuy nhiên nếu bạn sử dụng: kiểm tra lớp giả và các anh chị em chọn bạn có thể phân biệt giữa hai quốc gia. Tôi tin rằng tất cả các trình duyệt mới nhất đều hỗ trợ: lớp giả được kiểm tra, bạn có thể tìm thêm thông tin từ tài nguyên này: http://www.whatstyle.net/articles/18/pretty_form_controls_with_css

Bạn sẽ nhận được hỗ trợ trình duyệt tốt hơn với jquery ... bạn có thể sử dụng chức năng nhấp để phát hiện khi nào nhấp vào xảy ra và nếu được chọn hay không, khi đó bạn có thể thêm lớp học hoặc xóa lớp học nếu cần ...

61

:unchecked không được xác định trong thông số kỹ thuật Selectors hoặc CSS UI 3, cũng không xuất hiện ở cấp 4 Selectors.

Thực tế, báo giá từ W3C là taken from the Selectors 4 spec. Vì Bộ chọn 4 khuyến nghị sử dụng :not(:checked), bạn có thể giả định rằng không có :unchecked giả tương ứng. Hỗ trợ trình duyệt cho :not():checked giống nhau, do đó không phải là vấn đề.

Điều này có vẻ không phù hợp với :enabled:disabled bang, đặc biệt là kể từ khi một yếu tố có thể không kích hoạt hay vô hiệu hóa (ví dụ: ngữ nghĩa hoàn toàn không phù hợp), tuy nhiên có vẻ như không được bất kỳ lời giải thích cho sự mâu thuẫn này.

(:indeterminate không tính, bởi vì một yếu tố tương tự có thể không được kiểm soát, kiểm tra cũng như không xác định vì không áp dụng ngữ nghĩa.)

+0

Chỉ cần thêm vào câu trả lời này mà chọn: không (: đã chọn) hoạt động hoàn hảo trên Chrome, nhưng nó không hoạt động trên IE (được kiểm tra vào ngày 9 và 11). –

+0

@Bruno Finger:: checked và: not (: checked) cả hai đều hoạt động trên IE, ngoại trừ cả hai đều bị ảnh hưởng bởi lỗi khi thay đổi trạng thái đã kiểm tra không cập nhật kiểu phần tử được nhắm mục tiêu liên quan đến kiểm tra/yếu tố không được chọn. – BoltClock

16

Tôi nghĩ rằng bạn đang cố gắng hơn những điều phức tạp. Một giải pháp đơn giản là chỉ tạo kiểu hộp kiểm của bạn theo mặc định với các kiểu không được kiểm tra và sau đó thêm kiểu trạng thái đã chọn.

input[type="checkbox"] { 
    // Unchecked Styles 
} 
input[type="checkbox"]:checked { 
    // Checked Styles 
} 

Tôi xin lỗi vì đã đưa ra một chuỗi cũ nhưng cảm thấy như nó có thể đã sử dụng câu trả lời tốt hơn.

EDIT (2016/03/03):

bang W3C Specs rằng :not(:checked) như tấm gương của họ để lựa chọn trạng thái không được kiểm soát.Tuy nhiên, đây rõ ràng là trạng thái không được chọn và sẽ chỉ áp dụng các kiểu đó cho trạng thái không được chọn. Điều này rất hữu ích cho việc thêm kiểu dáng chỉ cần thiết vào trạng thái không được chọn và sẽ cần được loại bỏ khỏi trạng thái đã chọn nếu được sử dụng trên bộ chọn input[type="checkbox"]. Xem ví dụ dưới đây để làm rõ.

input[type="checkbox"] { 
    /* Base Styles aka unchecked */ 
    font-weight: 300; // Will be overwritten by :checked 
    font-size: 16px; // Base styling 
} 
input[type="checkbox"]:not(:checked) { 
    /* Explicit Unchecked Styles */ 
    border: 1px solid #FF0000; // Only apply border to unchecked state 
} 
input[type="checkbox"]:checked { 
    /* Checked Styles */ 
    font-weight: 900; // Use a bold font when checked 
} 

Nếu không sử dụng :not(:checked) trong ví dụ trên bộ chọn :checked sẽ cần thiết để sử dụng một border: none; để đạt được cùng ảnh hưởng.

Sử dụng input[type="checkbox"] để tạo kiểu cơ sở để giảm trùng lặp.

Sử dụng input[type="checkbox"]:not(:checked) cho các kiểu bỏ chọn rõ ràng mà bạn không muốn áp dụng cho trạng thái đã chọn.

+0

Có những cách sử dụng khác của bộ chọn css khi nó có ích/biểu cảm mặc dù: javascript, kiểm tra trình duyệt tự động – nruth

+2

Điều này không phải lúc nào cũng có thể. Các phần tử biểu mẫu đặc biệt nổi tiếng vì không cho phép bạn hoàn nguyên chúng về giao diện mặc định của chúng thông qua các quy tắc xếp tầng. (Mặc dù tại sao bất cứ ai muốn chỉ cung cấp cho kiểm tra hoặc chỉ kiểm tra đầu vào một cái nhìn tùy chỉnh và cảm thấy trong khi để lại bạc hà khác là vượt ra ngoài tôi.) – BoltClock

+0

Một trường hợp khác, điều này là không thể: Hơn 2 nút radio. Ví dụ: bạn có thể muốn một kiểu khi tùy chọn # 1 là: được chọn và một tùy chọn khác khi tùy chọn khác là: được chọn. Giải pháp là ': not (: checked)' – Navin

-1
<style> 

input, span { 
    background: red; 
} 

:indeterminate, :indeterminate + span { 
    background: limegreen; 
} 
</style> 

</head> 

<body> 

<input type="checkbox"> <span>Everything in this paragraph should have a green background.</span> 


<script type="text/javascript"> 
    document.getElementsByTagName("input")[0].indeterminate = true; 
</script> 
0

Cách tôi xử lý việc này đã chuyển đổi tên lớp của nhãn dựa trên điều kiện. Bằng cách này, bạn chỉ cần một nhãn và bạn có thể có các lớp khác nhau cho các tiểu bang khác nhau ... Hy vọng rằng sẽ giúp!

Các vấn đề liên quan