Introducción:
Hola chicos, no he podido dejar de hacer animaciones, así que hoy les traigo otra, esta vez vamos a hacer un corazón muy bonito, el cual vamos a clonar 4 veces para luego darle 3 animaciones.
Creando corazones con CSS
En este caso lo primero que hice fue crear un elemento div llamado container (contenedor), dentro de este contenedor formaremos el corazón con 2 círculos, un cuadrado y 2 veces un cuarto de círculo para darle curva extra al corazoncito.
Programando la parte HTML
<div class="container">
<div class="col">
<div class="heart heart1">
<div class="circle"></div>
<div class="halfMoon"></div>
</div>
</div>
</div>
</div>
Bien, creo que esta parte del código amerita una explicación.
Luego de crear el contenedor, está la clase col que cumple la función de dividir el espacio en 5 columnas para que luego hayan 5 corazones en cada una. Mientras que la clase heart es un contenedor mas pequeño donde colocamos las figuras.
Por otro lado heart1 es la clase usada para establecer 2 de las animaciones. Ahora la clase circle es donde formamos las figuras de círculos y el cuadrado usando un after y un before en el CSS.
Y por ultimo la clase halfMoon es donde creamos la forma de un cuarto de círculo, como halfMoon es la base cree un .halfMoon::before y after para girarlos y darles la posición adecuada.
Programando la parte CSS
Aquí solo centraremos los contenedores y crearemos las figuras (los círculos y el cuadrado) del corazón.
.container{
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
overflow: hidden;
z-index: -1;
margin: 0px;
font-size: 0px;
padding: 0px;
}
.col{
display:inline-block;
width: 19%;
}
.heart{
/*content*/
width: 150px;
height: 150px;
position: relative;
top: 120vh;
z-index:-1;
}
.circle{
/*circle2*/
width:90px;
height:90px;
content:'';
background-color: crimson;
position: absolute;
margin: 35px 0px 0px 30px;
transform: rotate(-135deg);
}
.circle::after{
/*square*/
width: 90px;
height: 90px;
content:'';
background-color: crimson;
border-radius: 45px;
position: absolute;
margin: 44px 0px;
}
.circle::before{
/*circle1*/
width: 90px;
height: 90px;
content:'';
background-color: crimson;
position: absolute;
z-index: 1;
margin: 0px 44px;
border-radius: 45px;
}
.halfMoon{
background: transparent;
height: 90px;
width: 45px;
position: absolute;
border-radius: 76px 0px 0px 0px;
margin: 82px 81px;
transform: rotate(45deg);
}
.halfMoon::before{
background: black;
height: 90px;
width: 45px;
border-radius: 76px 0px 0px 0px;
content: '';
position: absolute;
margin: 45px -40px;
transform: rotate(78.5deg);
}
.halfMoon::after{
background: black;
height: 90px;
width: 45px;
border-radius: 0px 0px 0px 76px;
content: '';
margin: 3px 7px;
position: absolute;
transform: rotate(369deg);
}
Con esto ya tenemos un corazón, y faltan 4. Para crear más solo vamos a repetir un poco el código en el HTML, claro todo esto debe estar dentro del contenedor.
<div class="col"> <div class="heart heart2"> <div class="circle"></div> <div class="halfMoon"></div> </div> </div> <div class="col"> <div class="heart heart3"> <div class="circle"></div> <div class="halfMoon"></div> </div> </div> <div class="col"> <div class="heart heart4"> <div class="circle"></div> <div class="halfMoon"></div> </div> </div> <div class="col"> <div class="heart heart5"> <div class="circle"></div> <div class="halfMoon"></div> </div> </div>
Animación de los corazones en CSS
A continuación veremos las 3 animaciones creadas para darle un poco de fluidez a los corazones.
1. Movimiento vertical
En esta parte los corazones salen de la parte inferior de la pantalla (por decirlo de alguna forma) y van subiendo hasta desaparecer en distintos tiempos.
@keyframes Linear-motion{
0%{
top:100vh;
}
100%{
top:-20vh;
}
}
2. Movimiento a la izquierda
Al mismo tiempo que los corazones se mueven hacia arriba también se desplazan un poco a la izquierda y luego regresan a su posición.
@keyframes MoveLeft{
0%{
margin-left: 0%;
}
50%{
margin-left:50%;
}
100%{
margin-left: 0%;
}
}
Ahora establecemos las 2 animaciones para los 5 corazoncitos con un poco de retraso usando animation-delay, sin esto los corazones se mueven al mismo tiempo.
.heart1{
animation: 20s Linear-motion infinite,MoveLeft 23s infinite;
animation-delay: 5s;
}
.heart2{
animation: 12s Linear-motion infinite, MoveLeft 15s infinite;
animation-delay: 1s;
}
.heart3{
animation: 12s Linear-motion infinite, MoveLeft 15s infinite;
animation-delay: 18s;
}
.heart4{
animation: 16s Linear-motion infinite, MoveLeft 19s infinite;
animation-delay: 11s;
}
.heart5{
animation: 15s Linear-motion infinite, MoveLeft 18s infinite;
animation-delay: 5s;
}Cambio de color
3. Cambio de color
Aquí veremos como es que cada uno de los corazones cambian de color.
@keyframes colors{
0%{
background-color: #b30000;
}
25%{
background-color: #24248f;
}
50%{
background-color: #ff1a9f;
}
75%{
background-color: #fbd204;
}
100%{
background-color: #b30000;
}
}
Para establecer la animación de esta parte de código tuve que especificar con que corazón quería trabajar, para ello aprendí a llamar a una clase hijo. Y como el corazón tiene tres partes (círculo, círculo, cuadrado) tuve que poner la animación en cada una de ellas.
.heart.heart1 .circle{
animation: 12s colors infinite;
animation-delay: 0s;
}
.heart.heart1 .circle::before{
animation: 12s colors infinite;
animation-delay: 0s;
}
.heart.heart1 .circle::after{
animation: 12s colors infinite;
animation-delay: 0s;
}
.heart.heart2 .circle{
animation: 12s colors infinite;
animation-delay: 3s;
}
.heart.heart2 .circle::before{
animation: 12s colors infinite;
animation-delay: 3s;
}
.heart.heart2 .circle::after{
animation: 12s colors infinite;
animation-delay: 3s;
}
.heart.heart3 .circle{
animation: 12s colors infinite;
animation-delay: 6s;
}
.heart.heart3 .circle::before{
animation: 12s colors infinite;
animation-delay: 6s;
}
.heart.heart3 .circle::after{
animation: 12s colors infinite;
animation-delay: 6s;
}
.heart.heart4 .circle{
animation: 12s colors infinite;
animation-delay: 9s;
}
.heart.heart4 .circle::before{
animation: 12s colors infinite;
animation-delay: 9s;
}
.heart.heart4 .circle::after{
animation: 12s colors infinite;
animation-delay: 9s;
}
.heart.heart5 .circle{
animation: 12s colors infinite;
animation-delay: 5s;
}
.heart.heart5 .circle::before{
animation: 12s colors infinite;
animation-delay: 5s;
}
.heart.heart5 .circle::after{
animation: 12s colors infinite;
animation-delay: 5s;
}
Aquí les dejo un enlace donde pueden ver el código funcionando Heart-Animation.
Y en este otro el código para verlo o descargarlo desde github.
Eso es todo, se que es una explicación muy resumida y espero mejorar en el futuro.
Extra:
Otras animaciones:
- Muñequito (doll) – animación CSS
- Gusanito rosado (litle pink worm) – animación CSS
- Fondo animado de tetris en CSS – (CSS tetris animation)