J'ai un élément d'image que je souhaite modifier en cliquant.
<img id="btnLeft">
Cela marche:
#btnLeft:hover {
width:70px;
height:74px;
}
Mais ce dont j'ai besoin c'est:
#btnLeft:onclick {
width:70px;
height:74px;
}
Mais ça ne marche pas, évidemment. Est-il possible d'avoir un onclick
comportement en CSS (c'est-à-dire sans utiliser JavaScript)?
:active
fonctionne lorsque la souris est enfoncée. Selon ce que vous essayez de faire, vous pourrez peut-être le faire fonctionner en utilisant la pseudo-classe CSS4:target
.:target
n'est pas nouveau pour Selectors 4. Il est disponible depuis Selectors 3, qui était déjà une recommandation d'un an au moment de la rédaction.Réponses:
Le plus proche que vous obtiendrez est
:active
:Cependant, cela n'appliquera le style que lorsque le bouton de la souris est maintenu enfoncé. La seule façon d'appliquer un style et de le maintenir appliqué en un clic est d'utiliser un peu de JavaScript.
la source
Réponse à partir de 2019:
La meilleure façon (en fait la seule façon *) de simuler un événement de clic réel en utilisant uniquement CSS (plutôt que de simplement survoler un élément ou de rendre un élément actif, où vous n'avez pas mouseUp ) est d'utiliser le hack de case à cocher. Il fonctionne en attachant un
label
à un<input type="checkbox">
élément via l'for=""
attribut de l'étiquette .Cette fonctionnalité prend en charge un large navigateur (la
:checked
pseudo-classe est IE9 +).Appliquer la même valeur à un
<input>
« s attribut ID et un accompagnant<label>
l »for=""
attribut, et vous pouvez dire au navigateur de nouveau style l'étiquette , cliquez avec le:checked
pseudo-classe, grâce au fait que cliquer sur une étiquette cocher et décocher la "associé"<input type="checkbox">
.* Vous pouvez simuler un événement « choisi » par le
:active
ou:focus
pseudo-classe dans IE7 + (par exemple un bouton qui est normalement50px
large, vous pouvez modifier sa largeur toutactive
:#btnControl:active { width: 75px; }
), mais ceux qui ne sont pas vraies événements « cliquez sur ». Ils sont "en direct" pendant toute la durée de sélection de l'élément (par exemple, Tabavec bing avec votre clavier), ce qui est un peu différent d'un véritable événement de clic, qui déclenche une action sur - généralement -mouseUp
.Démo de base du hack de case à cocher (la structure de code de base pour ce que vous demandez):
Afficher l'extrait de code
Ici, j'ai positionné l'étiquette juste après l'entrée dans mon balisage. C'est pour que je puisse utiliser le sélecteur de frère adjacent (la +clé) pour sélectionner uniquement l'étiquette qui suit immédiatement ma
#demo
case à cocher. Étant donné que la:checked
pseudo-classe s'applique à la case à cocher,#demo:checked + label
ne s'applique que lorsque la case à cocher est cochée.Démo pour redimensionner une image au clic, c'est ce que vous demandez:
Cela étant dit, il y a de mauvaises nouvelles. Étant donné qu'une étiquette ne peut être associée qu'à un seul contrôle de formulaire à la fois , cela signifie que vous ne pouvez pas simplement déposer un bouton à l'intérieur des
<label></label>
balises et l'appeler un jour. Cependant, nous pouvons utiliser du CSS pour donner à l'étiquette un aspect et un comportement assez proches de l'apparence et du comportement d'un bouton HTML.Démo pour imiter un effet de clic de bouton, au-delà de ce que vous demandez:
Afficher l'extrait de code
La plupart du CSS de cette démo sert uniquement à styliser l'élément d'étiquette. Si vous n'avez pas vraiment besoin d'un bouton et que n'importe quel ancien élément suffira, vous pouvez supprimer presque tous les styles de cette démo, similaire à ma deuxième démo ci-dessus.
Vous remarquerez également que j'ai une propriété préfixée là - dedans,
-moz-outline-radius
. Il y a quelque temps, Mozilla a ajouté cette superbe propriété non spécifiée à Firefox, mais les gens de WebKit ont décidé de ne pas l'ajouter , malheureusement. Considérez donc cette ligne de CSS comme une amélioration progressive pour les personnes qui utilisent Firefox.la source
:checked
.Vous pouvez utiliser une pseudo-classe
:target
pour imiter l'événement click, laissez-moi vous donner un exemple.Voici à quoi cela ressemble: http://jsfiddle.net/TYhnb/
Une chose à noter, cela n'est limité qu'aux hyperliens, donc si vous devez utiliser un autre lien que l'hyperlien, comme un bouton, vous voudrez peut-être le pirater un peu, comme le style d'un hyperlien pour ressembler à un bouton.
la source
Si vous donnez l'élément a,
tabindex
vous pouvez utiliser la:focus
pseudo-classe pour simuler un clic.HTML
CSS
http://jsfiddle.net/NaTj5/
la source
tabindex=-1
l'élément est toujours focalisable, mais uniquement par la souris, pas le clavier, ce qui est mieux dans ce cas. vous pouvez également utiliser unoutline:0
style pour supprimer la bordure bleue lorsque vous vous concentrezEdit: Répondu avant que OP ne précise ce qu'il voulait. Ce qui suit est pour un onclick similaire à javascripts onclick, pas la
:active
pseudo-classe.Cela ne peut être réalisé qu'avec Javascript ou le Checkbox Hack
Le hack de case à cocher vous permet essentiellement de cliquer sur une étiquette, qui "vérifie" une case à cocher, vous permettant de styliser l'étiquette comme vous le souhaitez.
La démo
la source
id
attributs pour les lier ensemble.TylerH a fait une très bonne réponse, et je n'ai eu qu'à mettre à jour cette dernière version du bouton.
la source
Que diriez-vous d'une solution CSS pure sans être (que) hacky?
@TylerH a une excellente réponse mais c'est une solution assez complexe. J'ai une solution pour ceux d'entre vous qui veulent juste un simple effet "onclick" avec du css pur sans un tas d'éléments supplémentaires.
Nous utiliserons simplement les transitions css. Vous pourriez probablement faire de même avec des animations.
L'astuce consiste à modifier le délai de la transition afin qu'il dure lorsque l'utilisateur clique.
Ici, j'ajoute également la classe "cliquée" afin que javascript puisse également fournir l'effet si nécessaire. J'utilise un filtre ombre portée 0px car il mettra en surbrillance le bleu graphique transparent donné de cette façon pour mon cas.
J'ai un filtre à 0s ici pour qu'il ne prenne pas effet. Lorsque l'effet est libéré, je peux ensuite ajouter la transition avec un retard afin qu'elle fournisse un bel effet "cliqué".
Cela me permet de le configurer de sorte que lorsque l'utilisateur clique sur le bouton, il surligne le bleu puis s'éteint lentement (vous pouvez bien sûr utiliser d'autres effets également).
Bien que vous soyez limité ici dans le sens où l'animation à mettre en évidence est instantanée, elle fournit toujours l'effet souhaité. Vous pouvez probablement utiliser cette astuce avec l'animation pour produire une transition globale plus fluide.
la source
D'accord, c'est peut-être un vieux post ... mais c'était le premier résultat dans google et j'ai décidé de faire votre propre mix à ce sujet comme ..
D'abord je vais utiliser FOCUS
La raison en est que cela fonctionne bien pour l'exemple que je montre, si quelqu'un veut un événement de type souris, utilisez Active
LE CODE HTML:
LE CODE CSS:
LIEN JS FIDDLE: http://jsfiddle.net/00wwkjux/
Alors pourquoi est-ce que je poste ceci dans un vieux fil de discussion, eh bien parce que les exemples ici varient et j'ai pensé en fournir un à la communauté qui est un exemple de travail.
Comme l'a déjà répondu le créateur du fil, ils ne veulent que l'effet dure pendant l'événement de clic. Maintenant, bien que ce ne soit pas exact pour ce besoin, c'est proche. active s'animera lorsque la souris est enfoncée et toutes les modifications dont vous avez besoin pour durer plus longtemps doivent être effectuées avec javascript.
la source
Avertissement! Réponse particulièrement simple ci-dessous! :)
Vous pouvez réellement avoir un changement qui persiste (comme un bloc / popup qui apparaît et reste visible après un clic) avec seulement CSS (et sans utiliser le hack de case à cocher) malgré ce que beaucoup de réponses (sinon correctes) prétendent ici, aussi longtemps car vous n'avez besoin que de persévérance pendant le vol stationnaire.
Jetez donc un œil aux réponses de Bojangles et TylerH si celles-ci fonctionnent pour vous, mais si vous voulez une réponse simple et CSS qui gardera un bloc visible après avoir été cliqué (et peut même faire disparaître le bloc avec un clic de suivi), puis voir cette solution.
J'avais une situation similaire, j'avais besoin d'une div popup avec onClick où je ne pouvais pas ajouter de JS ou changer le balisage / HTML (une solution vraiment CSS) et cela est possible avec quelques mises en garde. Vous ne pouvez pas utiliser l'astuce: target qui peut créer une belle fenêtre contextuelle à moins que vous ne puissiez changer le code HTML (pour ajouter un 'id') afin qu'il ne soit pas utilisé.
Dans mon cas, le popup div était contenu dans l'autre div, et je voulais que le popup apparaisse au-dessus de l'autre div, et cela peut être fait en utilisant une combinaison de: active et: hover:
Exemple (ainsi que celui qui permet de cliquer sur la popup pour la faire disparaître) sur:
http://davesource.com/Solutions/20150324.CSS-Only-Click-to-Popup-Div/
J'ai également inséré un exemple d'extrait de code ci-dessous, mais le positionnement dans le bac à sable stackoverflow est étrange, j'ai donc dû mettre le texte `` cliquez ici '' après le innerDiv, ce qui n'est normalement pas nécessaire.
la source
J'ai le code ci-dessous pour le survol et le clic de la souris et cela fonctionne:
et ce code cache l'image lorsque vous cliquez dessus:
la source
J'ai eu un problème avec un élément qui devait être de couleur ROUGE au survol et être BLEU au clic pendant le survol. Pour y parvenir avec css vous avez besoin par exemple:
J'ai lutté pendant un certain temps jusqu'à ce que je découvre que l' ordre des sélecteurs CSS était le problème que j'avais. Le problème était que j'ai changé de place et que le sélecteur actif ne fonctionnait pas. Ensuite, j'ai découvert que
:hover
pour aller d'abord et ensuite:active
.la source
vous pouvez utiliser: cible
pour cible générale
ou filtrer par nom de classe
ou filtrer par nom d'ID
la source
:target
est déjà publiée, donc pas besoin d'une autre. De plus, l'interrogateur demande comment avoir un effet "onclick", pas afficher / masquer d'autres éléments.