Ir al contenido principal

Simulando una colisión con CSS

Volví a Blogger después de tanto tiempo. Una pena haber dejado abandonado blogdesign y retomar muy pocas veces el hábito de indagar acerca de las novedades en el CSS y el diseño web.
Ahora ya casi iniciando los años universitarios, me gustaría volver a escribir acerca de ésto que un tiempo me apasionó y aún me sigue sorprendiendo y fue clave en la elección de mi carrera.
Hace unos días ingresé a mi cuenta de Codepen tras intentos e intentos de acertar con mi usuario y contraseña. Quedé sorprendido de las ingenuidades que publicaba hace años, y mi interés sobre cómo pude lograr todo eso a través de la programación volvió a despertar.
El último pen de mi propiedad se titula "Simulating collision with CSS". A continuación insertado.
Lo que quise demostrar era cómo simular el evento de colisión (que seguido vemos en vídeo juegos) sólo utilizando CSS y sin recurrir a otros lenguajes más oportunos que seguramente lo facilitarían todo. Últimamente los desafíos y experimentos con CSS se basan en esto, romper los límites y dejar a los otros lenguajes boquiabiertos.
Entonces, encontramos un camioncito que podemos manejar con las dos flechas de arriba. Al dirigirlo hacia el camión de la derecha, ambos cambian de color y aparece una señal indicando que entraron en contacto.
Invitados son a reciclar mi pen para utilizarlo como inspiración. Ahora continuaré con el análisis del código que empleé. A medida que redacto este post lo voy descubriendo con paciencia porque realmente no me acuerdo nada.
El HTML no es nada de otro mundo. Usé etiquetas comunes para insertar a los protagonistas.
En cuanto al CSS, las animaciones de la ruta y las nubes son simples agregados. Nótese también la utilización de la fuente Font Awesome para trabajar con íconos en lugar de imágenes o vectores.
Ambos camioncitos, nombrados con las clases ambu y cami están posicionados con absolute y poseen diferentes márgenes.
.ambu, .cami {
  position:absolute;
  bottom:0.2rem;
  font-size:3em;
  transform:rotatey(180deg); /* Los camioncitos miran hacia la derecha */
}
.cami {
  right:10%;
  color:#ddd;
}
.ambu {
  color:white;
  right:60%;
  transition:99999s;
}

El detalle transition:99999s; se relaciona con el truco para manejar el movimiento a través del joystick. Dicho aprendiaje lo extraje de alguna de esas famosas páginas. Agrego a mis tareas buscar un enlace y dejarlo a disposición.
En el código continuamos con este tema del movimiento a control del usuario.
.der:hover ~ .ambu {
  right:calc(10% + 3rem);
  transition:2s right linear, .1s 2s color linear;
  color:red;
}
.izq:hover ~ .ambu {
  right:80%;
  transition:2s right linear;
  transform:rotatey(0deg);
}
.der:hover ~ .cami {
  transition: .1s 2s color linear;
  color:red;
}

Traduciendo, al apoyar el mouse sobre la flecha derecha, la ambulancia disminuye su margen, lo que hace que se aproxime al otro camión. Al apoyar sobre la flecha izquierda, la ambulancia regresa a su posición inicial y mira hacia la izquierda.
En los estilos donde se involucra el pasar el cursor sobre la flecha derecha, observamos un retraso de 2 segundos para que los camioncitos cambien a color rojo. Esto se debe a que es el el tiempo en que se tarda la ambulancia en arribar hasta el encuentro con el segundo camión. Aquí es donde encontramos la explicación a la forma en que se produce la simulación de colisión con CSS.
A continuación se procede a insertar la explosión como un pseudoelemento de cami:
.cami:after {
content: '*';
color: #FFF;
position: absolute;
top: .1em;
left: .9em;
text-shadow: .1em .1em #FFFE37, .1em -.1em #FFFE37, -.1em -.1em #FFFE37, -.1em .1em #FFFE37;
  opacity:0;
}
.der:hover ~ .cami:after {
  opacity:1;
  transition:.1s 2s opacity;
}

Encontramos el mismo retraso, para que la explosión sólo aparezca cuando indicamos que la ambulancia llegó a destino.
Eso es todo, lo demás son sólo animaciones de las nubes y la ruta que estaría bueno que revises y una regla para tamaño de ventana pequeños.
Ojalá mi explicación haya sido clara y este aporte sea de utilidad para quien sea.
Invitame un café en cafecito.app

Comentarios

Más leído

Galería de Imágenes Simple, con Javascript y CSS

¡Hola! Ya extrañaba escribir en mi blog. Vuelvo con esta genial galería de imágenes que es muy fácil de insertar y es súper simple. Sólo es necesario insertar el HTML, y decorarlo un poco con CSS, veamos: <div id="galeria"> <div id="galeria_imagen"> <img id="imgGaleria" src=" URL-IMAGEN-POR-DEFECTO " /></div> <div id="galeria_miniaturas"> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-1 " /> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-2 " /> <img class="miniatura" onclick="javascript:document.getElementById('imgGaleria').src=this.src;" src=" URL-IMAGEN-3 " /> <img class="miniatura" onclick="javascript:document.getEle

Ventana flotante con botón cerrar

Esto será algo muy útil cuando debas dejar algún mensaje o aviso para tus lectores. Se trata de una ventanita, con apariencia similar a las de Windows, que es flotante y tiene la opción de cerrar con un efecto fade utilizando un botón. Insertarla es muy simple, sólo pega este código en un gadget HTML/Javascript y puedes cambiar algunos valores para personalizar la ventana a tu gusto. <div id='ventana-flotante'>    <a class='cerrar' href='javascript:void(0);' onclick='document.getElementById(&apos;ventana-flotante&apos;).className = &apos;oculto&apos;'>x</a>    <div id='contenedor'>        <div class='contenido'> Aquí va el mensaje.        </div>    </div> </div> <style> #ventana-flotante { width: 360px;   /* Ancho de la ventana */ height: 90px;   /* Alto de la ventana */ background: #ceffad;   /* Color de fondo */ position: fixed; top: 200 px; left: 50%;

Tabs, menú de contenidos con pestañas. Versión CSS

Seguro conocerás este sistema de pestañas, que nos permite mostrar de manera alternativa distintos contenidos en un mismo espacio. Hay distintas versiones como con jQuery , o utilizando CSS, más específicamente la pseudoclase :target . Aquí veremos como obtener un resultado similar, pero utilizando la pseudoclase :checked. Comencemos con la estructura. <div id="contenedor">     <input id="tab-1" type="radio" name="radio-set" class="tab-selector-1" checked="checked" />     <label for="tab-1" class="tab-label-1"> Pestaña1 </label>         <input id="tab-2" type="radio" name="radio-set" class="tab-selector-2" />     <label for="tab-2" class="tab-label-2"> Pestaña2 </label>         <input id="tab-3" type="radio" name="radio-set" class="tab-selector-3" />    

Efecto biselado con CSS

Utilizando CSS, podemos crear un efecto de biselado para utilizar en botones, mensajes, contenedores o lo que se les ocurra. Veremos 2 formas de aplicar este efecto, una utilizando bordes y otra implementando la propiedad box-shadow . Con los bordes, encontraremos una forma más tradicional que nos permite que los bordes inferior y lateral derecho sean más oscuros simulando relieve. HTML <div class="biselado"> Texto </div> Hola, soy un cuadro con outset. .biselado { background: #2323ff ;   /* Fondo, debe ser más claro que el borde */ border: 5px outset #4444ff ;   /* Grosor del Borde */   /* Color del Borde */ color: white ;   /* Color del texto */ text-align: center ;   /* Alineación del texto */ text-shadow: -1px -1px rgba(0,0,0,.2); } O podemos lograr el efecto contrario, reemplazando la palabra outset que se encuentra antes del color del borde por inset . Hola, soy un cuadro con inset. Veamos ahora una manera más efectva de simul

Botón circular 3D realista con CSS

El secreto está en la propiedad box-shadow . Luego border-radius para darle forma y ya lo obtenemos. See the Pen Botón tridimensional realista. by Lucas Maidana ( @LucasMaidana ) on CodePen . El HTML típico de un botón. <a class='boton' href='URL-DEL-BOTON'></a> Y el CSS. .boton {   background: url( http://www.ashleyjt.net/windows/images/Android.png )  /* Url de la imagen */  no-repeat center center, #62BC0F /* Color del botón */ ; background-size: 60%;  /* Tamaño de la imagen */   height: 200px;   /* Alto del botón */   width: 200px;   /* Ancho del botón */   display: table;   border-radius: 100%;   cursor: pointer;     box-shadow: /* Sombras externa */ inset 0 10px 15px rgba(255,255,255,.35), inset 0 -10px 15px rgba(0,0,0,.05), inset 10px 0 15px rgba(0,0,0,.05), inset -10px 0 15px rgba(0,0,0,.05), /* Sombra interna */ 0 5px 20px rgba(0,0,0,.1); } /* Al presionar */ .boton:active {   box-shadow: inset 0 5px 30px rgba(0,0,0,.2);  /* S

Texto con borde

¿TEXTO CON BORDE? ¿Posible hacerlo sólo con CSS? SI ES POSIBLE NOTA : Esta propiedad no es compatible con todos los navegadores. Se recomienda Chrome o Firefox. Para lograrlo, debemos aplicar la propiedad text-shadow  para lograr muchas sombras del mismo color simulando un sólo borde. A <div class="texto1"> Texto </div> le aplicaremos: .texto1 { color:white;   /* Color del texto */ text-shadow: 1px 1px 0 blue ,                   -1px -1px blue ,                    1px -1px blue ,                   -1px 1px blue ,                    0 1px blue ,                    1px 0 blue ,                   -1px 0 blue ,                    0 -1px blue ; } Puedes cambiar blue por el color que desees. Aquí mas ejemplos. borde .texto2 { color:#AAFFB1; background:#AAFFB1; padding:20px 80px; text-shadow: 1px 1px 0 #2F7235, -1px -1px #2F7235, 1px -1px #2F7235, -1px 1px #2F7235, 0 1px #2F7235, 1px 0 #2F7235, -1px 0 #2F7235, 0 -1px #2F7235; } texto .