Me he desafiado a mí mismo para crear una experiencia visualmente dinámica e interactiva en HTML y CSS solamente (sin Javascript). Hasta ahora, no he encontrado ninguna característica que necesitara que no pudiera hacer en CSS y HTML puro. Este es quizás un poco más difícil.
Tengo que evitar que el usuario hace doble clic <a>
, <input type="submit">
y <button>
las etiquetas. Esto es para evitar que envíen dos veces un formulario o realicen accidentalmente 2 solicitudes GET a una URL. ¿Cómo se puede hacer esto en CSS puro? Incluso si no podemos establecer disabled
sin JS, debería haber alguna técnica de enmascaramiento o combinación de estilos que pueda manejarlo aquí en 2020.
Aquí hay un ejemplo simple de un intento:
.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>
Desafortunadamente, esto lo deshabilita antes de que se active el evento de clic real por alguna razón. ¿Quizás las anclas no son la mejor manera de probar? Continuaré haciendo más intentos.
pointer-events: all
por defecto, pero no en los estados: activo o: ¿foco? ¿Como establecidopointer-events: none
para esos estados?el:active, el:focus
combinado con eventos de punteroRespuestas:
Una idea es tener una capa que aparezca en la parte superior del elemento después del primer clic para evitar el segundo.
Aquí hay una idea básica donde consideraré una duración de
1s
entre dos clics que puede disminuir. Intente hacer clic en el botón / enlace y notará que puede hacer clic nuevamente solo después1s
.Estoy agregando una pequeña superposición para ver mejor el truco
fuente
<a>
etiqueta<a href="#" onclick="console.log('lalala')">Click me</a>
para vincular con el resto del código, nada se registra en la consola. En mi opinión, el enlace no se hace clic<a>
etiqueta. Intenté probar con los botones de envío, pero monitorear al inspector de red es extraño e inconsistente. Cuando hago clic en el enlace, no activa el clic. Si establece un objetivo en un ancla y hace clic en el enlace, deshabilitará el enlace pero no saltará al ancla.La primera solución
La idea es usar
radio button
state by:checked
para hacer modificaciones. Escondemos elradio
círculo y cuándo:checked
para<a>
hacerpointer-events: none;
y parabuttons
diferentes tipos los ocultamos y mostramosdisabled
unos.La segunda solución
Este se adapta para
links
. La idea es usar:target
. El objetivoelement
está oculto en primer lugar. Luego, cuando se dirige el uso:target
depointer-events: none;
de<a>
.Mostrar fragmento de código
fuente