Rzuciłem sobie wyzwanie, aby stworzyć wizualnie dynamiczną i interaktywną obsługę tylko w HTML i CSS (bez Javascript). Jak dotąd nie spotkałem się z żadną potrzebną funkcją, której nie mogłem zrobić w czystym CSS i HTML. Ten jest może nieco trudniejszy.
Muszę uniemożliwi użytkownikowi podwójne kliknięcie <a>
, <input type="submit">
i <button>
tagów. Zapobiega to podwójnemu przesłaniu formularza lub przypadkowemu wysłaniu 2 żądań GET do adresu URL. Jak można to zrobić w czystym CSS? Nawet jeśli nie możemy ustawić disabled
bez JS, powinna istnieć jakaś technika maskowania lub połączenie stylów, które poradzą sobie tutaj w 2020 roku.
Oto prosty przykład próby:
.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>
Niestety powoduje to wyłączenie z jakiegoś powodu faktycznego zdarzenia kliknięcia. Może kotwice nie są najlepszym sposobem na przetestowanie? Będę kontynuował próby.
pointer-events: all
domyślnie, ale nie w stanach: aktywny lub: fokus? Jak ustawionepointer-events: none
dla tych stanów?el:active, el:focus
połączeniu ze zdarzeniami wskaźnikowymiOdpowiedzi:
Jednym z pomysłów jest posiadanie warstwy, która pojawia się na górze elementu po pierwszym kliknięciu, aby uniknąć drugiego.
Oto podstawowy pomysł, w którym rozważę czas
1s
pomiędzy dwoma kliknięciami, który możesz zmniejszyć. Spróbuj kliknąć przycisk / link, a zauważysz, że możesz kliknąć ponownie dopiero później1s
.Dodałem małą nakładkę, aby lepiej zobaczyć sztuczkę
źródło
<a>
tagiem<a href="#" onclick="console.log('lalala')">Click me</a>
aby połączyć się z resztą kodu, nic nie loguje się na konsolę. imho oznacza to, że link nie został kliknięty<a>
tag. Próbowałem testować za pomocą przycisków przesyłania, ale monitorowanie inspektora sieci jest dziwne i niespójne. Kiedy klikam link, nie uruchamia kliknięcia. Jeśli ustawisz cel na kotwicę i klikniesz link, spowoduje to wyłączenie linku, ale nie przejdzie do kotwicy.Pierwsze rozwiązanie
Chodzi o to, aby użyć
radio button
stanu przez:checked
do modyfikacji. Chowamyradio
koło i gdy:checked
dla<a>
markipointer-events: none;
i dlabuttons
z różnymi rodzajami je ukrywać i pokazywaćdisabled
te.Drugie rozwiązanie
Ten pasuje do
links
. Chodzi o to, aby użyć:target
. Targeelement
jest najpierw ukryty. Wtedy, gdy jest ukierunkowane wykorzystanie:target
dopointer-events: none;
z<a>
.Pokaż fragment kodu
źródło