Desafiei-me a criar uma experiência visualmente dinâmica e interativa apenas em HTML e CSS (sem Javascript). Até agora, não encontrei nenhum recurso que eu precisasse em CSS e HTML puro. Este talvez seja um pouco mais difícil.
Eu preciso impedir que o usuário clicar duas vezes <a>
, <input type="submit">
e <button>
tags. Isso evita que eles enviem um formulário duas vezes ou acidentalmente façam 2 solicitações GET para um URL. Como isso pode ser feito em CSS puro? Mesmo que não possamos definir disabled
sem o JS, deve haver alguma técnica de máscara ou combinação de estilos que possa lidar com isso aqui em 2020.
Aqui está um exemplo simples de uma tentativa:
.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>
Infelizmente, isso é desativado antes que o evento de clique real seja acionado por algum motivo. Talvez as âncoras não sejam a melhor maneira de testar? Vou continuar a fazer novas tentativas.
pointer-events: all
por padrão, mas não nos estados: active ou: focus? Como definidopointer-events: none
para esses estados?el:active, el:focus
combinado com eventos-ponteiroRespostas:
Uma idéia é ter uma camada que apareça na parte superior do elemento após o primeiro clique para evitar o segundo.
Aqui está uma idéia básica em que considerarei uma duração
1s
entre dois cliques que você pode diminuir. Tente clicar no botão / link e você perceberá que só pode clicar novamente depois1s
.Estou adicionando uma pequena sobreposição para ver melhor o truque
fonte
<a>
tag<a href="#" onclick="console.log('lalala')">Click me</a>
para vincular com o restante do código, nada registra no console. imho isso significa que o link não é clicado<a>
tag. Tentei testar com os botões de envio, mas monitorar o inspetor de rede é estranho e inconsistente. Quando clico no link, ele não dispara. Se você definir um destino para uma âncora e clicar no link, ele desativará o link, mas não passará para a âncora.A primeira solução
A idéia é usar
radio button
state by:checked
para fazer modificações. Escondemosradio
círculo e quando:checked
para<a>
fazerpointer-events: none;
e parabuttons
com tipos diferentes, os escondemos e mostramosdisabled
.A segunda solução
Este serve para
links
. A ideia é usar:target
. O Targeelement
está oculto em primeiro lugar. Então, quando é direcionado, use:target
parapointer-events: none;
de<a>
.Mostrar snippet de código
fonte