J'essaie de styliser une case à cocher en utilisant ce qui suit:
<input type="checkbox" style="border:2px dotted #00f;display:block;background:#ff0000;" />
Mais le style n'est pas appliqué. La case à cocher affiche toujours son style par défaut. Comment puis-je lui donner le style spécifié?
Réponses:
MISE À JOUR:
La réponse ci-dessous fait référence à l'état des choses avant la disponibilité généralisée de CSS 3. Dans les navigateurs modernes (y compris Internet Explorer 9 et versions ultérieures), il est plus simple de créer des remplacements de cases à cocher avec votre style préféré, sans utiliser JavaScript.
Voici quelques liens utiles:
Il convient de noter que la question fondamentale n'a pas changé. Vous ne pouvez toujours pas appliquer de styles (bordures, etc.) directement à l'élément de case à cocher et ces styles affectent l'affichage de la case à cocher HTML. Ce qui a changé, cependant, c'est qu'il est désormais possible de masquer la case à cocher réelle et de la remplacer par un élément de style personnel, en utilisant uniquement CSS. En particulier, parce que CSS dispose désormais d'un
:checked
sélecteur largement pris en charge , vous pouvez faire en sorte que votre remplacement reflète correctement l'état coché de la boîte.RÉPONSE ANCIENNE
Voici un article utile sur les cases à cocher de style . Fondamentalement, cet écrivain a constaté qu'elle varie énormément d'un navigateur à l'autre et que de nombreux navigateurs affichent toujours la case à cocher par défaut, quel que soit le style. Il n'y a donc vraiment pas de moyen facile.
Il n'est pas difficile d'imaginer une solution de contournement dans laquelle vous utiliseriez JavaScript pour superposer une image sur la case à cocher et si des clics sur cette image provoquaient la vérification de la vraie case à cocher. Les utilisateurs sans JavaScript verront la case par défaut.
Modifié pour ajouter: voici un joli script qui fait cela pour vous ; il masque l'élément de case à cocher réel, le remplace par une étendue de style et redirige les événements de clic.
la source
Il existe un moyen de le faire en utilisant uniquement CSS. Nous pouvons (ab) utiliser l'
label
élément et le styliser à la place. La mise en garde est que cela ne fonctionnera pas pour Internet Explorer 8 et les versions inférieures.la source
input
ne prennent jamais le focus sur le clavier, ils ne sont donc pas accessibles par le clavier.Vous pouvez obtenir un effet de case à cocher personnalisé assez cool en utilisant les nouvelles capacités fournies avec les
:after
et:before
pseudo-classes. L'avantage à cela est: vous n'avez pas besoin d'ajouter quelque chose de plus au DOM, juste la case à cocher standard.Notez que cela ne fonctionnera que pour les navigateurs compatibles. Je crois que cela est lié au fait que certains navigateurs ne vous permettent pas de définir
:after
et:before
sur les éléments d'entrée. Ce qui signifie malheureusement pour le moment que seuls les navigateurs WebKit sont supportés. Firefox + Internet Explorer permettra toujours aux cases à cocher de fonctionner, sans style, et cela changera, espérons-le, à l'avenir (le code n'utilise pas les préfixes des fournisseurs).Ceci est une solution de navigateur WebKit uniquement (Chrome, Safari, navigateurs mobiles)
Voir l'exemple de violon
Violon à bascule de style bonus Webkit
la source
Avant de commencer (en janvier 2015)
La question et la réponse d'origine ont maintenant environ 5 ans. En tant que tel, il s'agit d'une petite mise à jour.
Premièrement, il existe un certain nombre d'approches en ce qui concerne le style des cases à cocher. le principe de base est:
Vous devrez masquer le contrôle de case à cocher par défaut qui est stylisé par votre navigateur et ne peut pas être remplacé de manière significative à l'aide de CSS.
Avec le contrôle caché, vous devrez toujours être en mesure de détecter et de basculer son état vérifié
L'état vérifié de la case à cocher devra être reflété en stylisant un nouvel élément
La solution (en principe)
Ce qui précède peut être accompli par un certain nombre de moyens - et vous entendrez souvent que l'utilisation de pseudo-éléments CSS3 est la bonne façon. En fait, il n'y a pas vraiment de bonne ou de mauvaise façon, cela dépend de l'approche la plus appropriée au contexte dans lequel vous allez l'utiliser. Cela dit, j'en ai une préférée.
Enveloppez votre case à cocher dans un
label
élément. Cela signifie que même lorsqu'il est masqué, vous pouvez toujours basculer son état coché en cliquant n'importe où dans l'étiquette.Cachez votre case à cocher
Ajoutez un nouvel élément après la case à cocher que vous stylerez en conséquence. Il doit apparaître après la case à cocher afin qu'il puisse être sélectionné à l'aide de CSS et stylisé en fonction de l'
:checked
état. CSS ne peut pas sélectionner «en arrière».La solution (en code)
Afficher l'extrait de code
Raffinement (à l'aide d'icônes)
Mais salut! Je t'entends crier. Et si je veux montrer une jolie petite coche ou une croix dans la boîte? Et je ne veux pas utiliser d'images d'arrière-plan!
Eh bien, c'est là que les pseudo-éléments de CSS3 peuvent entrer en jeu. Ceux-ci prennent en charge la
content
propriété qui vous permet d'injecter des icônes Unicode représentant l'un ou l'autre état. Alternativement, vous pouvez utiliser une source d'icône de police tierce telle que police géniale (bien que assurez-vous de définir également la valeur appropriéefont-family
, par exemple pourFontAwesome
)la source
display: none
.visibility: hidden;
paropacity: 0 !important;
si vous rencontrez toujours des problèmes de tabulation.Je suivrais les conseils de la réponse de SW4 - pour masquer la case à cocher et la couvrir avec une étendue personnalisée, suggérant ce HTML:
L'enveloppe enveloppante permet de cliquer sur le texte sans avoir besoin de la liaison d'attribut "for-id". cependant,
Ne le cachez pas en utilisant
visibility: hidden
oudisplay: none
Cela fonctionne en cliquant ou en tapant, mais c'est une façon boiteuse d'utiliser les cases à cocher. Certaines personnes utilisent encore beaucoup plus efficacement Tabpour déplacer le focus, Spacepour l'activer, et se cacher avec cette méthode la désactive. Si le formulaire est long, on gardera les poignets de quelqu'un à utiliser
tabindex
ou àaccesskey
attribuer. Et si vous observez le comportement de la case à cocher du système, il y a une ombre décente au survol. La case à cocher bien conçue doit suivre ce comportement.La réponse de cobberboy recommande Font Awesome qui est généralement meilleur que le bitmap car les polices sont des vecteurs évolutifs. En travaillant avec le code HTML ci-dessus, je suggère ces règles CSS:
Masquer les cases à cocher
J'utilise juste négatif
z-index
car mon exemple utilise un habillage de case à cocher suffisamment grand pour le couvrir complètement. Je ne le recommande pasleft: -999px
car il n'est pas réutilisable dans toutes les mises en page. La réponse de Bushan wagh fournit un moyen à toute épreuve de le cacher et de convaincre le navigateur d'utiliser tabindex, c'est donc une bonne alternative. Quoi qu'il en soit, les deux ne sont qu'un hack. La bonne façon aujourd'hui est deappearance: none
voir la réponse de Joost :Étiquette de case à cocher Style
Ajouter un habillage de case à cocher
\00f096
est Font Awesomesquare-o
, le rembourrage est ajusté pour fournir un contour en pointillé uniforme sur le focus (voir ci-dessous).Ajouter une case cochée
\00f046
est Font Awesomecheck-square-o
, qui n'est pas la même largeur quesquare-o
, ce qui est la raison du style de largeur ci-dessus.Ajouter un contour de mise au point
Safari ne fournit pas cette fonctionnalité (voir le commentaire de @Jason Sankey), vous devez utiliser
window.navigator
pour détecter le navigateur et l'ignorer s'il s'agit de Safari.Case à cocher Définir la couleur grise pour désactivé
Définir l'ombre du survol sur la case à cocher non désactivée
Demo Fiddle
Essayez de passer la souris sur les cases à cocher et utilisez Tabet Shift+ Tabpour vous déplacer et Spacebasculer.
la source
Vous pouvez styliser les cases à cocher avec une petite ruse en utilisant l'
label
élément un exemple ci-dessous:Et un FIDDLE pour le code ci-dessus. Notez que certains CSS ne fonctionnent pas dans les anciennes versions des navigateurs, mais je suis sûr qu'il existe de fantastiques exemples JavaScript!
la source
Solution simple à mettre en œuvre et facilement personnalisable
Après beaucoup de recherches et de tests, j'ai obtenu cette solution qui est simple à mettre en œuvre et plus facile à personnaliser. Dans cette solution :
Mettez simplement le CSS fluide en haut de votre page et le style de toutes les cases à cocher changera comme ceci:
la source
Vous pouvez éviter d'ajouter du balisage supplémentaire. Cela fonctionne partout sauf IE pour Desktop (mais fonctionne dans IE pour Windows Phone et Microsoft Edge) via la définition de CSS
appearance
:la source
Je préfère utiliser des polices d'icônes (telles que FontAwesome) car il est facile de modifier leurs couleurs avec CSS, et elles évoluent très bien sur les appareils à haute densité de pixels. Voici donc une autre variante CSS pure, utilisant des techniques similaires à celles ci-dessus.
(Ci-dessous est une image statique pour que vous puissiez visualiser le résultat; voir le JSFiddle pour une version interactive.)
Comme pour les autres solutions, il utilise l'
label
élément. Un adjacentspan
contient notre caractère de case à cocher.Voici le JSFiddle pour cela.
la source
font-family: FontAwesome;
parfont-family: 'Font Awesome\ 5 Free';
et mettre à jour le contenu Unicode si vous souhaitez le faire fonctionner dans une nouvelle version.Récemment, j'ai trouvé une solution assez intéressante au problème.
Vous pouvez utiliser
appearance: none;
pour désactiver le style par défaut de la case à cocher, puis écrire le vôtre par dessus, comme décrit ici (exemple 4) .Exemple de violon
Afficher l'extrait de code
Malheureusement, la prise en charge du navigateur est assez mauvaise pour l'
appearance
option. D'après mes tests personnels, Opera et Chrome ne fonctionnaient que correctement. Mais ce serait la voie à suivre pour rester simple lorsqu'un meilleur support est disponible ou que vous souhaitez uniquement utiliser Chrome / Opera."Puis-je utiliser?" lien
la source
appearance
c'est exactement ce dont nous avons besoin pour cela; il suffit de garder à l'esprit qu'il "n'est pas standard et n'est pas conforme aux normes" .Avec du CSS pur, rien de spécial avec
:before
et:after
sans transformation, vous pouvez désactiver l'apparence par défaut, puis la styliser avec une image d'arrière-plan en ligne comme dans l'exemple suivant. Cela fonctionne dans Chrome, Firefox, Safari et maintenant Edge (Chromium Edge).la source
Ma solution
la source
Vous pouvez simplement utiliser
appearance: none
sur les navigateurs modernes, afin qu'il n'y ait pas de style par défaut et que tous vos styles soient appliqués correctement:la source
Vous ne voulez PAS de JavaScript, PAS de bibliothèques externes, la conformité de l'accessibilité et des cases à cocher et des boutons radio?
J'ai fait défiler et faire défiler et des tonnes de ces réponses jettent simplement l'accessibilité par la porte et violent les WCAG à plus d'un titre. J'ai ajouté des boutons radio car la plupart du temps, lorsque vous utilisez des cases à cocher personnalisées, vous souhaitez également des boutons radio personnalisés.
Violons :
Tard dans la soirée, mais en quelque sorte, cela reste difficile en
20192020, j'ai donc ajouté mes trois solutions qui sont accessibles et faciles à déposer.Ce sont tous libres JavaScript , sans bibliothèque externe * et accessible ...
Si vous souhaitez brancher et jouer avec l'un de ces éléments, copiez simplement la feuille de style à partir des violons, modifiez les codes de couleur dans le CSS pour répondre à vos besoins et soyez sur votre chemin. Vous pouvez ajouter une icône de coche svg personnalisée si vous le souhaitez pour les cases à cocher. J'ai ajouté beaucoup de commentaires pour ces gens non CSS'y.
Si vous avez du texte long ou un petit conteneur et que vous rencontrez un habillage de texte sous la case à cocher ou l'entrée du bouton radio, convertissez-le simplement en divs comme celui-ci .
Explication plus longue: j'avais besoin d'une solution qui ne viole pas WCAG, ne s'appuie pas sur JavaScript ou des bibliothèques externes, et qui ne rompt pas la navigation au clavier comme la tabulation ou la barre d'espace pour sélectionner, qui permet les événements de focus, une solution qui permet les cases à cocher désactivées qui sont tous deux enregistrés et non enregistrés, et enfin une solution où je peux personnaliser l'apparence de la case à cocher mais je veux avec différents
background-color
de,border-radius
,svg
arrière - plans, etc.J'ai utilisé une combinaison de cette réponse de @Jan Turoň pour trouver ma propre solution qui semble fonctionner assez bien. J'ai fait un violon de bouton radio qui utilise beaucoup du même code des cases à cocher afin que cela fonctionne aussi avec les boutons radio.
J'apprends toujours l'accessibilité, donc si j'ai raté quelque chose, laissez un commentaire et j'essaierai de le corriger voici un exemple de code de mes cases à cocher:
la source
Voici une solution CSS simple sans code jQuery ou JavaScript.
J'utilise des icônes FontAwseome mais vous pouvez utiliser n'importe quelle image
la source
label
ouspan
. Ça marche!De mon googler, c'est le moyen le plus simple pour le style de case à cocher. Ajoutez simplement
:after
et:checked:after
CSS en fonction de votre conception.la source
Modifiez le style de case à cocher avec CSS3 ordinaire, ne nécessite aucune manipulation JS et HTML.
la source
Un modèle simple et léger également:
https://jsfiddle.net/rvgccn5b/
la source
input
s ne sont pris en charge que dans Chrome, votre code ne fonctionne pas de la même manière dans tous les navigateurs.Je pense que la façon la plus simple de le faire est de styliser a
label
et de rendre l'checkbox
invisible.HTML
CSS
Le
checkbox
, même s'il est masqué, sera toujours accessible et sa valeur sera envoyée lors de la soumission d'un formulaire. Pour les anciens navigateurs, vous devrez peut-être modifier la classe de lalabel
à cochée à l'aide de JavaScript, car je ne pense pas que les anciennes versions d'Internet Explorer comprennent::checked
lecheckbox
.la source
::checked
est faux - il devrait l'être:checked
. (b)checkbox
est faux - ça devrait être[type=checkbox]
Oui! Toutes ces solutions de contournement m'ont amené à la conclusion que le type de case à cocher HTML est nul si vous voulez le styliser.
À titre d'avertissement, ce n'est pas une implémentation CSS. Je pensais juste partager la solution de contournement que j'ai trouvée au cas où quelqu'un d'autre pourrait la trouver utile.
J'ai utilisé l'
canvas
élément HTML5 .L'avantage est que vous n'avez pas à utiliser d'images externes et que vous pouvez probablement économiser de la bande passante.
L'inconvénient est que si un navigateur ne peut pas le rendre correctement, il n'y a pas de solution de rechange. Bien que cela reste un problème en 2017 est discutable.
Mise à jour
J'ai trouvé l'ancien code assez moche, alors j'ai décidé de le réécrire.
Voici une démo qui fonctionne .
La nouvelle version utilise des prototypes et l'héritage différentiel pour créer un système efficace de création de cases à cocher. Pour créer une case à cocher:
Cela ajoutera immédiatement la case à cocher au DOM et connectera les événements. Pour savoir si une case est cochée:
Il est également important de noter que je me suis débarrassé de la boucle.
Update 2
Quelque chose que j'ai négligé de mentionner dans la dernière mise à jour est que l'utilisation du canevas a plus d'avantages que de simplement créer une case à cocher qui ressemble à ce que vous voulez. Vous pouvez également créer des cases à cocher à plusieurs états , si vous le souhaitez.
J'ai légèrement modifié l'
Checkbox
utilisé dans le dernier extrait pour qu'il soit plus générique, permettant de "l'étendre" avec une case à cocher qui a 3 états. Voici une démo . Comme vous pouvez le voir, il a déjà plus de fonctionnalités que la case à cocher intégrée.Quelque chose à considérer lorsque vous choisissez entre JavaScript et CSS.
Code ancien et mal conçu
Démo de travail
Tout d'abord, créez une toile
Ensuite, imaginez un moyen de mettre à jour le canevas lui-même.
La dernière partie est de le rendre interactif. Heureusement, c'est assez simple:
C'est là que vous pourriez avoir des problèmes dans IE, en raison de leur modèle de gestion d'événements étrange en JavaScript.
J'espère que ça aidera quelqu'un; il convenait définitivement à mes besoins.
la source
unchecked (e.g. unchecked -> checked -> "kinda" checked -> unchecked
les états pourraient représenter "explicitement faux", "explicite vrai", "utiliser par défaut", par exemple). J'envisage d'ajouter un exemple à la réponse.C'est la manière la plus simple et vous pouvez choisir les cases à cocher pour donner ce style.
CSS:
HTML:
la source
Modifiez votre style de case à cocher de manière simple.
Voici le lien JsFiddle
la source
Voici une version CSS / HTML uniquement, pas de jQuery ou JavaScript nécessaire du tout, HTML simple et propre et CSS vraiment simple et court.
Voici le JSFiddle
http://jsfiddle.net/v71kn3pr/
Voici le HTML:
Voici le CSS
Cela peut être adapté pour pouvoir avoir une radio ou des cases à cocher individuelles, des groupes de cases à cocher et des groupes de boutons radio.
Ce html / css, vous permettra également de capturer un clic sur l'étiquette, de sorte que la case à cocher sera cochée et décochée même si vous cliquez uniquement sur l'étiquette.
Ce type de case à cocher / bouton radio fonctionne parfaitement avec n'importe quelle forme, pas de problème du tout. Ont également été testés en utilisant PHP, ASP.NET (.aspx), JavaServer Faces et ColdFusion .
la source
la source
la source
Non, vous ne pouvez toujours pas styliser la case à cocher elle-même, mais j'ai (enfin) compris comment styliser une illusion tout en conservant la fonctionnalité de cliquer sur une case à cocher. Cela signifie que vous pouvez le basculer même si le curseur n'est pas parfaitement immobile sans risquer de sélectionner du texte ou de déclencher un glisser-déposer!
Cette solution convient probablement également aux boutons radio.
Ce qui suit fonctionne dans Internet Explorer 9, Firefox 30.0 et Chrome 40.0.2214.91 et n'est qu'un exemple de base. Vous pouvez toujours l'utiliser en combinaison avec des images d'arrière-plan et des pseudo-éléments.
http://jsfiddle.net/o0xo13yL/1/
la source
Étant donné que les navigateurs comme Edge et Firefox ne prennent pas en charge: avant: après sur les balises d'entrée de case à cocher, voici une alternative purement avec HTML et CSS. Bien sûr, vous devez éditer CSS selon vos besoins.
Faites la case à cocher HTML pour ceci:
Appliquer ce style pour la case à cocher pour changer l'étiquette de couleur
la source
Il semble que vous pouvez modifier la couleur de la case à cocher en niveaux de gris en utilisant uniquement CSS.
Ce qui suit convertit les cases à cocher du noir au gris (ce qui correspondait à ce que je voulais):
la source
Mise en œuvre SCSS / SASS
Une approche plus moderne
Pour ceux qui utilisent SCSS (ou facilement convertis en SASS), ce qui suit sera utile. Effectivement, créez un élément à côté de la case à cocher, qui est celle que vous allez styliser. Lorsque la case est cochée, le CSS remodèle l'élément frère (selon votre nouveau style coché). Le code est ci-dessous:
la source
Attention : ce qui suit était vrai au moment de la rédaction, mais en attendant, les choses ont progressé.
Les navigateurs modernes AFAIK affichent des cases à cocher en utilisant le contrôle natif du système d'exploitation, il n'y a donc aucun moyen de les styliser.
la source