Ich habe ein Bildelement, das ich beim Klicken ändern möchte.
<img id="btnLeft">
Das funktioniert:
#btnLeft:hover {
width:70px;
height:74px;
}
Aber was ich brauche ist:
#btnLeft:onclick {
width:70px;
height:74px;
}
Aber es funktioniert offensichtlich nicht. Ist es überhaupt möglich, sich onclick
in CSS zu verhalten (dh ohne JavaScript zu verwenden)?
:active
funktioniert bei gedrückter Maus. Je nachdem, was Sie versuchen, können Sie es möglicherweise mithilfe der CSS4-Pseudoklasse zum Laufen bringen:target
.:target
ist für Selectors 4 nicht neu. Es ist seit Selectors 3 verfügbar, was zum Zeitpunkt des Schreibens bereits eine Empfehlung für ein Jahr war.Antworten:
Der nächste, den Sie bekommen, ist
:active
:Dies wird jedoch nur angewendet, wenn die Maustaste gedrückt gehalten wird. Der einzige Weg , einen Stil anwenden und halten sie angewendet Onclick ist ein bisschen JavaScript zu verwenden.
quelle
Antwort ab 2019:
Der beste Weg (eigentlich der einzige Weg *), ein tatsächliches Klickereignis nur mit CSS zu simulieren (anstatt nur auf einem Element zu schweben oder ein Element zu aktivieren , wenn Sie nicht mouseUp haben ), ist die Verwendung des Checkbox-Hacks. Es funktioniert, indem ein a über die Beschriftung
label
an ein<input type="checkbox">
Element angehängt wirdfor=""
Attribut wird.Diese Funktion bietet umfassende Browserunterstützung (die
:checked
Pseudoklasse ist IE9 +).Wenden Sie den gleichen Wert auf ein
<input>
‚s ID - Attribut und ein begleitendes<label>
‘ sfor=""
Attribut, und Sie können den Browser neu Stil sagen , das Etikett auf Klick mit der:checked
Pseudo-Klasse, dank der Tatsache , dass ein Etikett klicken , wird prüfen , und deaktivieren Sie die "damit verbundenen"<input type="checkbox">
.* Sie können ein "ausgewähltes" Ereignis über die
:active
oder die:focus
Pseudoklasse in IE7 + simulieren (z. B. für eine Schaltfläche, die normalerweise50px
breit ist, können Sie ihre Breite ändern, währendactive
:)#btnControl:active { width: 75px; }
, aber dies sind keine echten "Klick" -Ereignisse. Sie sind während der gesamten Auswahl des Elements "live" (z. B. durch TabDrücken der Tastatur). Dies unterscheidet sich ein wenig von einem echten Klickereignis, bei dem - normalerweise - eine Aktion ausgelöst wirdmouseUp
.Grundlegende Demo des Checkbox-Hacks (die grundlegende Codestruktur für das, was Sie fragen):
Code-Snippet anzeigen
Hier habe ich das Etikett direkt nach der Eingabe in meinem Markup positioniert. Auf diese Weise kann ich mit dem nebenstehenden Geschwister-Selektor (dem +Schlüssel) nur das Etikett auswählen, das unmittelbar auf mein
#demo
Kontrollkästchen folgt . Da die:checked
Pseudoklasse für das Kontrollkästchen gilt,#demo:checked + label
gilt sie nur, wenn das Kontrollkästchen aktiviert ist.Demo zum Ändern der Größe eines Bilds beim Klicken, was Sie fragen:
Wenn das gesagt ist, gibt es einige schlechte Nachrichten. Da eine Beschriftung jeweils nur einem Formularsteuerelement zugeordnet werden kann, können Sie nicht einfach eine Schaltfläche in die
<label></label>
Tags einfügen und sie einen Tag lang aufrufen. Wir können es jedoch etwas CSS verwenden, um das Etikett so aussehen zu lassen, dass es dem Aussehen und Verhalten einer HTML-Schaltfläche ziemlich nahe kommt.Demo zum Imitieren eines Schaltflächenklick-Effekts über das hinaus, was Sie verlangen:
Code-Snippet anzeigen
Der größte Teil des CSS in dieser Demo dient nur zum Stylen des Beschriftungselements. Wenn Sie eigentlich keinen Knopf brauchen und ein altes Element ausreicht, können Sie fast alle Stile in dieser Demo entfernen, ähnlich wie in meiner zweiten Demo oben.
Sie werden auch feststellen, dass ich dort eine Eigenschaft mit Präfix habe
-moz-outline-radius
. Vor einiger Zeit hat Mozilla Firefox diese großartige, nicht spezifikationsgerechte Eigenschaft hinzugefügt, aber die Leute bei WebKit haben entschieden, dass sie sie leider nicht hinzufügen werden. Betrachten Sie diese CSS-Linie als eine progressive Verbesserung für Benutzer von Firefox.quelle
:checked
.Sie können die Pseudoklasse verwenden
:target
, um ein Klickereignis nachzuahmen. Lassen Sie mich Ihnen ein Beispiel geben.So sieht es aus: http://jsfiddle.net/TYhnb/
Beachten Sie, dass dies nur auf Hyperlinks beschränkt ist. Wenn Sie also einen anderen Link als einen Hyperlink verwenden müssen, z. B. eine Schaltfläche, möchten Sie ihn möglicherweise ein wenig hacken, z. B. indem Sie einen Hyperlink so gestalten, dass er wie eine Schaltfläche aussieht.
quelle
Wenn Sie dem Element ein geben
tabindex
, können Sie das verwenden:focus
Pseudoklasse verwenden, um einen Klick zu simulieren.HTML
CSS
http://jsfiddle.net/NaTj5/
quelle
tabindex=-1
das Element verwenden, ist es weiterhin fokussierbar, jedoch nur mit der Maus, nicht mit der Tastatur, was in diesem Fall besser ist. Sie können auch einenoutline:0
Stil verwenden, um den blauen Rand zu entfernen, wenn Sie fokussiert sindBearbeiten: Beantwortet, bevor OP klarstellte, was er wollte. Das Folgende gilt für einen Onclick, der javascripts onclick ähnelt, nicht für die Pseudoklasse
:active
.Dies kann nur mit Javascript oder dem Checkbox Hack erreicht werden
Mit dem Checkbox-Hack können Sie im Wesentlichen auf ein Etikett klicken, das ein Kontrollkästchen "aktiviert", sodass Sie das Etikett nach Ihren Wünschen gestalten können.
Die Demo
quelle
id
Attribute verwenden müssen, um sie miteinander zu verbinden.TylerH gab eine wirklich gute Antwort und ich musste nur der letzten Button-Version ein Update geben.
quelle
Wie wäre es mit einer reinen CSS-Lösung, ohne (das) hackig zu sein?
@ TylerH hat eine großartige Resonanz, ist aber eine ziemlich komplexe Lösung. Ich habe eine Lösung für diejenigen unter Ihnen, die nur einen einfachen "Onclick" -Effekt mit reinem CSS ohne eine Reihe zusätzlicher Elemente wünschen.
Wir werden einfach CSS-Übergänge verwenden. Ähnliches könnten Sie wahrscheinlich mit Animationen tun.
Der Trick besteht darin, die Verzögerung für den Übergang so zu ändern, dass sie beim Klicken des Benutzers anhält.
Hier füge ich auch die "angeklickte" Klasse hinzu, damit Javascript auch den Effekt liefern kann, wenn es nötig ist. Ich verwende den 0px-Schlagschattenfilter, da er die gegebene transparente Grafik auf diese Weise für meinen Fall blau hervorhebt.
Ich habe hier einen Filter bei 0s, damit er nicht wirksam wird. Wenn der Effekt freigegeben ist, kann ich den Übergang mit einer Verzögerung hinzufügen, so dass ein schöner "angeklickter" Effekt erzielt wird.
Auf diese Weise kann ich es so einrichten, dass beim Klicken des Benutzers auf die Schaltfläche Blau hervorgehoben und dann langsam ausgeblendet wird (Sie können natürlich auch andere Effekte verwenden).
Während Sie hier in dem Sinne eingeschränkt sind, dass die hervorzuhebende Animation sofort erfolgt, bietet sie dennoch den gewünschten Effekt. Sie könnten diesen Trick wahrscheinlich mit Animation verwenden, um einen reibungsloseren Gesamtübergang zu erzielen.
quelle
Okay, dies ist vielleicht ein alter Beitrag ... aber er war das erste Ergebnis in Google und entschied sich, einen eigenen Mix daraus zu machen als ..
Zuerst werde ich FOCUS verwenden
Der Grund dafür ist, dass es für das Beispiel, das ich zeige, gut funktioniert. Wenn jemand ein Ereignis vom Typ "Maus nach unten" möchte, verwenden Sie es Aktiv"
DER HTML-CODE:
DER CSS-CODE:
JS FIDDLE LINK: http://jsfiddle.net/00wwkjux/
Warum poste ich das in einem alten Thread, weil die Beispiele hier unterschiedlich sind und ich dachte, ich würde der Community eines zurückgeben, was ein funktionierendes Beispiel ist.
Wie bereits vom Thread-Ersteller beantwortet, soll der Effekt nur während des Klickereignisses anhalten. Nun, während dies für dieses Bedürfnis nicht genau ist, ist es nahe. active wird animiert, während die Maus gedrückt ist, und alle Änderungen, die Sie länger benötigen, müssen mit Javascript vorgenommen werden.
quelle
Warnung! Besonders einfache Antwort unten! :) :)
Sie können tatsächlich eine Änderung vornehmen, die bestehen bleibt (z. B. ein Block / Popup, der nach einem Klick angezeigt wird und sichtbar bleibt), und zwar nur mit CSS (und ohne Verwendung des Kontrollkästchen-Hacks), obwohl viele der (ansonsten korrekten) Antworten hier so lange behaupten da Sie nur während des Schwebefluges Ausdauer brauchen.
Schauen Sie sich also die Antworten von Bojangles und TylerH an, wenn diese für Sie funktionieren, aber wenn Sie eine einfache und nur CSS-Antwort wünschen, die einen Block nach dem Klicken sichtbar hält (und den Block sogar mit einem nachfolgenden Klick verschwinden lassen kann), dann siehe diese Lösung.
Ich hatte eine ähnliche Situation, ich brauchte ein Popup-Div mit onClick, in dem ich kein JS hinzufügen oder das Markup / HTML (eine echte CSS-Lösung) ändern konnte, und dies ist mit einigen Einschränkungen möglich. Sie können den Trick: target nicht verwenden, mit dem ein schönes Popup erstellt werden kann, es sei denn, Sie können den HTML-Code (um eine 'ID' hinzuzufügen) so ändern, dass er nicht mehr angezeigt wird.
In meinem Fall war das Popup-Div im anderen Div enthalten, und ich wollte, dass das Popup über dem anderen Div angezeigt wird. Dies kann mithilfe einer Kombination aus: active und: hover: erfolgen.
Beispiel (sowie eines, bei dem Sie auf das Popup klicken können, um es verschwinden zu lassen) unter:
http://davesource.com/Solutions/20150324.CSS-Only-Click-to-Popup-Div/
Ich habe unten auch ein Code-Snippet-Beispiel eingefügt, aber die Positionierung in der Stackoverflow-Sandbox ist seltsam, sodass ich den Text "Hier klicken" nach innerDiv setzen musste, was normalerweise nicht benötigt wird.
quelle
Ich habe den folgenden Code für Mauszeiger und Mausklick und es funktioniert:
und dieser Code verbirgt das Bild, wenn Sie darauf klicken:
quelle
Ich hatte ein Problem mit einem Element, das beim Schweben ROT und beim Klicken BLAU BLAU sein musste. Um dies mit CSS zu erreichen, benötigen Sie zum Beispiel:
Ich kämpfte einige Zeit, bis ich herausfand, dass die Reihenfolge der CSS-Selektoren das Problem war, das ich hatte. Das Problem war, dass ich die Plätze gewechselt habe und der aktive Selektor nicht funktionierte. Dann fand ich heraus, dass
:hover
ich zuerst und dann gehen sollte:active
.quelle
Sie können verwenden: Ziel
für allgemeines Ziel
oder nach Klassennamen filtern
oder nach ID-Namen filtern
quelle
:target
ist bereits veröffentlicht, sodass keine weitere erforderlich ist. Darüber hinaus fragt der Fragesteller, wie ein "Onclick" -Effekt erzielt werden soll, ohne andere Elemente ein- oder auszublenden.