147 votes

Pseudo-classe CSS3 :unchecked

Je sais qu'il existe une version officielle de CSS3 :checked mais existe-t-il une pseudo-classe :unchecked et ont-ils le même support de navigateur ?

Référence de Sitepoint n'en mentionne pas, mais cette whatwg spec (quel qu'il soit).

Je sais qu'il est possible d'obtenir le même résultat lorsque le :checked y :not() Les pseudo-classes sont combinées, mais je suis toujours curieux :

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

Editer :

Le w3c recommande la même technique

Une case à cocher non cochée peut être sélectionnée en utilisant la pseudo-classe de négation :

:not(:checked)

136voto

BoltClock Points 249668

:unchecked n'est pas défini dans les spécifications de niveau 3 des sélecteurs ou de l'interface utilisateur CSS, et n'apparaît pas non plus dans le niveau 4 des sélecteurs.

En fait, la citation du W3C est la suivante extrait de la spécification Selectors 4 . Desde Sélecteurs 4 recommande d'utiliser :not(:checked) on peut supposer sans risque qu'il n'existe pas d'équivalent dans les pays de l'UE. :unchecked pseudo. Prise en charge des navigateurs pour les :not() y :checked est identique, ce qui ne devrait pas poser de problème.

Cela peut sembler contradictoire avec la :enabled y :disabled d'autant plus qu'un élément peut être ni l'un ni l'autre ni activé ni désactivé (c'est-à-dire que la sémantique ne s'applique pas du tout), mais il ne semble pas y avoir d'explication à cette incohérence.

( :indeterminate ne compte pas, car un élément ne peut être ni non vérifié, ni vérifié, ni indéterminé, car la sémantique ne s'applique pas).

52voto

Michael Stramel Points 137

Je pense que vous essayez de compliquer les choses à l'excès. Une solution simple est de styliser votre case à cocher par défaut avec les styles non cochés, puis d'ajouter les styles de l'état coché.

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

Je m'excuse de faire remonter un vieux fil de discussion, mais j'ai eu l'impression qu'une meilleure réponse aurait pu être apportée.

MODIFIER (3/3/2016) :

Les spécifications du W3C stipulent que :not(:checked) comme exemple de sélection de l'état non coché. Cependant, il s'agit explicitement de l'état non coché et ces styles ne seront appliqués qu'à l'état non coché. Ceci est utile pour ajouter un style qui n'est nécessaire que pour l'état non coché et qui devrait être supprimé de l'état coché s'il était utilisé pour l'état coché. input[type="checkbox"] sélecteur. Voir l'exemple ci-dessous pour plus de clarté.

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
}

Sans utiliser :not(:checked) dans l'exemple ci-dessus, le :checked aurait dû utiliser un sélecteur border: none; pour obtenir le même effet.

Utiliser le input[type="checkbox"] pour le style de base afin de réduire les doublons.

Utiliser le input[type="checkbox"]:not(:checked) pour les styles explicites non cochés que vous ne souhaitez pas appliquer à l'état coché.

5voto

Jeff Wooden Points 1695

Il n'existe pas de pseudo classe :unchecked, mais si vous utilisez la pseudo classe :checked et le sélecteur sibling, vous pouvez différencier les deux états. Je pense que tous les navigateurs les plus récents supportent la pseudo classe :checked, vous pouvez trouver plus d'informations dans cette ressource : http://www.whatstyle.net/articles/18/pretty_form_controls_with_css

Vous allez obtenir un meilleur support des navigateurs avec jquery... vous pouvez utiliser une fonction click pour détecter quand le click se produit et s'il est coché ou non, ensuite vous pouvez ajouter une classe ou supprimer une classe si nécessaire...

-2voto

Daniel Ram Points 156

La façon dont j'ai géré cela a été de changer le nom de classe d'une étiquette en fonction d'une condition. De cette façon, vous n'avez besoin que d'une seule étiquette et vous pouvez avoir différentes classes pour différents états... J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X