CSS3:チェックされていない疑似クラス


108

公式のCSS3 :checked疑似クラスがあることは知っていますが、:unchecked疑似クラスはありますか?それらは同じブラウザーをサポートしていますか?

Sitepointのリファレンスで言及されていませんが、このwhatwg仕様(それが何であれ)は言及しています。

:checked:not()疑似クラスを組み合わせると同じ結果が得られることはわかっていますが、私はまだ興味があります。

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

編集:

w3cは同じ手法を推奨します

チェックされていないチェックボックスは、否定疑似クラスを使用して選択できます。

:not(:checked)

回答:


104

:unchecked セレクタまたはCSS UIレベル3仕様では定義されておらず、セレクタのレベル4にも表示されていません。

実際、W3Cからの引用はSelectors 4の仕様に基づいています。以来セレクタ4が使用することをお勧めします:not(:checked)、それは何の対応が存在しないと仮定しても安全だ:unchecked擬似。以下のためのブラウザのサポート:not()とは、:checkedそれが問題になることはありませんので、同じです。

これは、と矛盾に見えるかもしれません:enabledし、:disabled要素をすることができ、特に以来、状態どちらも有効でもなく(つまり、セマンティクスは完全には適用されません)無効、しかし、この矛盾のための任意の説明があるように表示されません。

:indeterminateセマンティクスが適用されないため、要素は同様に未チェック、チェック、不確定のいずれでもないため、カウントされません。)


この回答に追加すると、:not(:checked)を選択するとChromeでは完全に機能しますが、IEでは機能しません(9と11でテスト済み)。
Bruno Finger

@Bruno Finger::checkedと:not(:checked)はどちらもIEで動作するはずですが、チェック済みのステータスを変更しても、チェック済み/未チェックに関連して対象となる要素のスタイルが更新されないというバグの影響は同じです素子。
BoltClock

35

あなたは物事を複雑にしすぎていると思います。簡単な解決策は、デフォルトでチェックされていないスタイルでチェックボックスをスタイルし、チェックされた状態のスタイルを追加することです。

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

古いスレッドを表示したことをお詫びしますが、もっと良い答えを使用できたように感じました。

編集(2016年3月3日):

W3C仕様で:not(:checked)は、チェックされていない状態を選択する例として、ただし、これは明示的にチェックされていない状態であり、これらのスタイルはチェックされていない状態にのみ適用されます。これは、チェックされていない状態でのみ必要であり、input[type="checkbox"]セレクターで使用される場合はチェックされた状態から削除する必要があるスタイリングを追加するのに役立ちます。説明については、以下の例を参照してください。

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
}

:not(:checked)上記の例で使用しない場合、:checkedセレクターはborder: none;同じ効果を得るためにa を使用する必要がありました。

input[type="checkbox"]重複を減らすために、ベーススタイリングにforを使用します。

input[type="checkbox"]:not(:checked)チェックされた状態に適用したくない明示的なチェックされていないスタイルにを使用します。


cssセレクターのその他の使用法がありますが、それは便利です/表現力があります:javascript、自動ブラウザーテスト
nruth

2
これは常に可能であるとは限りません。特にフォーム要素は、カスケードルールによってそれらをデフォルトのルックアンドフィールに戻せないことで悪名高くなっています。(他のミントを残しながら、チェックされた入力またはチェックされていない入力のみにカスタムのルックアンドフィールを与えることを望む理由は他にありません。)
BoltClock

これが不可能なもう1つのケース:3つ以上のラジオボタン。たとえば、option#1が:checkedの場合は1つのスタイルが必要で、他のものが:checkedの場合は別のスタイルが必要な場合があります。解決策は:not(:checked)
Navin

あなたはスタイルだけ望む特定のものを望んでいた場合は、理由を使用しない:first-child:last-childまたは:nth-childとの組み合わせで、セレクタを:checked:not(:checked)私があなたのコメントを誤解しない限り、あなたが指定した状況をカバーしません。
Michael Stramel

@MichaelStramelはHTMLの順序をCSSに入れますか?いいえ、ありがとう
inetphantom

3

:unchecked疑似クラスはありませんが、:checked疑似クラスと兄弟セレクターを使用すると、両方の状態を区別できます。最新のブラウザはすべて:checked疑似クラスをサポートしていると思います。詳細については、次のリソースをご覧ください。http//www.whatstyle.net/articles/18/pretty_form_controls_with_css

jqueryでより良いブラウザーサポートを取得しようとしています...クリック機能を使用して、クリックが発生したことを検出できます。チェックされているかどうかにかかわらず、必要に応じてクラスを追加したり、クラスを削除したりできます...


-2

これを処理する方法は、条件に基づいてラベルのclassNameを切り替えることでした。この方法で必要なラベルは1つだけで、州ごとに異なるクラスを設定できます。お役に立てれば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.