Ich habe mich herausgefordert, eine visuell dynamische und interaktive Erfahrung nur in HTML und CSS (kein Javascript) zu schaffen. Bisher bin ich auf keine Funktion gestoßen, die ich in reinem CSS und HTML nicht ausführen konnte. Dieser ist vielleicht etwas schwieriger.
Ich brauche den Benutzer aus einem Doppelklick zu verhindern <a>
, <input type="submit">
und <button>
Tags. Dies soll verhindern, dass sie ein Formular doppelt senden oder versehentlich 2 GET-Anforderungen an eine URL senden. Wie geht das in reinem CSS? Auch wenn wir disabled
ohne JS nicht einstellen können, sollte es eine Maskierungstechnik oder eine Kombination von Stilen geben, die hier im Jahr 2020 damit umgehen können.
Hier ist ein einfaches Beispiel für einen Versuch:
.clicky:focus{
display: none;
pointer-events: none;
}
<a href="#down" class="clicky">test</a>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p id="down">target</p>
Leider wird dies deaktiviert, bevor das eigentliche Klickereignis aus irgendeinem Grund ausgelöst wird. Vielleicht sind Anker nicht der beste Weg, um zu testen? Ich werde weitere Versuche machen.
pointer-events: all
standardmäßig, aber nicht in den Zuständen: active oder: focus? Wiepointer-events: none
für diese Staaten eingestellt?el:active, el:focus
kombiniert mitAntworten:
Eine Idee ist, eine Ebene zu haben, die nach dem ersten Klick oben auf dem Element angezeigt wird, um die zweite zu vermeiden.
Hier ist eine Grundidee, bei der ich eine Dauer
1s
zwischen zwei Klicks berücksichtigen werde , die Sie verringern können. Wenn Sie versuchen, auf die Schaltfläche / den Link zu klicken, werden Sie feststellen, dass Sie erst danach erneut klicken können1s
.Ich füge eine kleine Überlagerung hinzu, um den Trick besser zu sehen
quelle
<a>
Tag zu funktionieren<a href="#" onclick="console.log('lalala')">Click me</a>
, um mit dem Rest des Codes zu verknüpfen, protokolliert nichts an der Konsole. Imho bedeutet es, dass der Link nicht angeklickt wird<a>
Tag ist. Ich habe versucht, mit Senden-Schaltflächen zu testen, aber die Überwachung des Netzwerkinspektors ist seltsam und inkonsistent. Wenn ich auf den Link klicke, wird der Klick nicht ausgelöst. Wenn Sie ein Ziel auf einen Anker setzen und auf den Link klicken, wird der Link deaktiviert, aber nicht zum Anker gesprungen.Die erste Lösung
Die Idee ist,
radio button
state by:checked
zu verwenden, um Änderungen vorzunehmen. Wir versteckenradio
Kreise und wann:checked
für<a>
machenpointer-events: none;
und fürbuttons
mit verschiedenen Typen verstecken wir sie und zeigen siedisabled
.Die zweite Lösung
Dieser passt für
links
. Die Idee ist zu verwenden:target
. Targeelement
wird zuerst versteckt. Dann , wenn verwendet man gezielt:target
aufpointer-events: none;
den<a>
.Code-Snippet anzeigen
quelle