Je me suis mis au défi de créer une expérience visuellement dynamique et interactive en HTML et CSS uniquement (sans Javascript). Jusqu'à présent, je n'ai rencontré aucune fonctionnalité dont j'avais besoin que je ne pouvais pas faire en CSS et HTML pur. Celui-ci est peut-être un peu plus difficile.
Je dois empêcher l'utilisateur d' un double-clic <a>
, <input type="submit">
et les <button>
tags. C'est pour les empêcher de soumettre deux fois un formulaire ou de faire accidentellement 2 requêtes GET à une URL. Comment cela peut-il être fait en CSS pur? Même si nous ne pouvons pas définir disabled
sans JS, il devrait y avoir une technique de masquage ou une combinaison de styles qui peuvent le gérer ici en 2020.
Voici un exemple simple d'une tentative:
.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>
Malheureusement, cela le désactive avant que l'événement de clic réel ne soit déclenché pour une raison quelconque. Peut-être que les ancres ne sont pas la meilleure façon de tester? Je continuerai de faire de nouvelles tentatives.
pointer-events: all
par défaut, mais pas dans les états: actif ou: focus? Comme définipointer-events: none
pour ces États?el:active, el:focus
combiné avec des événements de pointeurRéponses:
Une idée est d'avoir un calque qui vient sur le dessus de l'élément après le premier clic pour éviter le second.
Voici une idée de base où je considérerai une durée
1s
comprise entre deux clics que vous pourrez diminuer. Essayez de cliquer sur le bouton / lien et vous remarquerez que vous ne pouvez cliquer à nouveau qu'après1s
.J'ajoute une petite superposition pour mieux voir l'astuce
la source
<a>
tag<a href="#" onclick="console.log('lalala')">Click me</a>
pour établir un lien avec le reste du code, rien ne se connecte à la console. à mon humble avis, le lien n'est pas cliqué<a>
balise. J'ai essayé de tester avec des boutons de soumission, mais la surveillance de l'inspecteur de réseau est étrange et incohérente. Lorsque je clique sur le lien, il ne déclenche pas le clic. Si vous définissez une cible sur une ancre et cliquez sur le lien, cela désactivera le lien mais ne passera pas à l'ancre.La première solution
L'idée est d'utiliser
radio button
state by:checked
pour effectuer des modifications. Nous masquons leradio
cercle et lorsque:checked
pour<a>
fairepointer-events: none;
et pourbuttons
différents types, nous les masquons et lesdisabled
affichons.La deuxième solution
Celui-ci convient pour
links
. L'idée est d'utiliser:target
. Targeelement
est d'abord caché. Puis , quand est ciblé l' utilisation:target
àpointer-events: none;
des<a>
.Afficher l'extrait de code
la source