Advertisement
  1. Web Design
  2. HTML/CSS
  3. CSS

Creando una colección de animaciones de carga en CSS3

Scroll to top
Read Time: 10 min

() translation by (you can also view the original English article)

La pre-carga es una señal común en el diseño web moderno. Como usuarios esperamos que la web sea rápida y fluida - no nos gusta esperar por las cosas. La pre-carga ofrece información visual en caso de que el contenido aún esté cargando, de esta manera manejamos las expectativas y reducimos la posibilidad de que el usuario abandone el sitio.

Fundamentos de CSS3 para la Creación de Pre-cargadores

Antes de sumergirnos en la creación de nuestra colección de pre-cargadores, primero hablaré sobre algunos atributos de CSS3 que son esenciales para la creación de estos tipos de pre-cargadores.

Pseudo Elementos :before :after

Los pseudo elementos son realmente útiles en la ayuda para la creación de pre-cargadores. Los pseudo elementos crean esencialmente un elemento falso antes y después del elemento HTML en cuestión.

“Pseudo se deriva del griego pseudēs que significa falso.”

Esto es similar a la creción de un elemento extra que en realidad no existe pero que pueden ser estilizados usando CSS. Estos pseudo elementos no son necesarios para la creación de pre-cargadores en CSS3 pero nos permiten ser muy prácticos y usar el mínimo de elementos.

Los pseudo elementos pueden ser estilizados de la misma manera que lo harías con cualquier otro elemento HTML, la única diferencia es que usted debe especificar una propiedad del contenido. Si no se especifica esto el pseudo elemento no se utilizará. La propiedad del contenido puede contener cualquier texto que pueda ser de utilidad si su pre-cargador debe contener palabras como “Cargando...” Sin embargo, si no necesita texto de contenido entonces puede dejar en blanco la propiedad.

Animación CSS3

Los pseudo elementos CSS son útiles pero no esenciales para la creación de pre-cargadores CSS3, pero la propiedad de animación lo es. Sin esta propiedad el pre-cargador fallará para animar y solo será una representación estática - nada útil para indicar que el contenido está cargando.

“El componente principal de las animaciones con CSS son los @keyframes, la regla CSS donde se crea la animación. Pensar en @keyframes como etapas a lo largo de una linea de tiempo. Dentro de @keyframes, puede definir esas etapas, cada una con una declaración de estilo diferente.” - Introducción sobre animaciones CSS para principiante

Nota: antes de saltar a la demo valdría la pena señalar que los prefijos para cada navegador no están incluidos en los fragmentos de código. Si necesita los prefijos entonces vea los ejemplos en codepen.

1. Ondas de Audio

La idea detrás de este pre-cargador es crear una animación similar a las ondas de audio.

HTML

Esto se consigue mediante la creación de cinco etiquetas span, cada uno representando una barra de audio.

1
<div id="preloader_1">
2
          <span></span>
3
  			<span></span>
4
  			<span></span>
5
  			<span></span>
6
  			<span></span>
7
  		</div>

CSS

El efecto se consigue animando la altura de cada elemento de 5px a 30px. La etiqueta también se mueve hacia abajo en el eje Y por 15px para dar el efecto que esta creciendo desde el centro.

1
#preloader_1{
2
    position:relative;
3
}
4
#preloader_1 span{
5
	display:block;
6
	bottom:0px;
7
	width: 9px;
8
	height: 5px;
9
	background:#9b59b6;
10
	position:absolute;
11
    animation: preloader_1 1.5s	 infinite ease-in-out;
12
}
13
14
#preloader_1 span:nth-child(2){
15
left:11px;
16
animation-delay: .2s;
17
18
}
19
#preloader_1 span:nth-child(3){
20
left:22px;
21
animation-delay: .4s;
22
}
23
#preloader_1 span:nth-child(4){
24
left:33px;
25
animation-delay: .6s;
26
}
27
#preloader_1 span:nth-child(5){
28
left:44px;
29
animation-delay: .8s;
30
}
31
@keyframes preloader_1 {
32
    0% {height:5px;transform:translateY(0px);background:#9b59b6;}
33
    25% {height:30px;transform:translateY(15px);background:#3498db;}
34
    50% {height:5px;transform:translateY(0px);background:#9b59b6;}
35
    100% {height:5px;transform:translateY(0px);background:#9b59b6;}
36
}

Por defecto la animación de cada etiqueta sucede al mismo tiempo. El effecto de la onda Mexicana es creado agregando la propiedad animation-delay a cada etiqueta con un desplazamiento de 2 milisegundos. Cada etiqueta es seleccionada usando el selector nth-child().

2. Cuadro Circular

Este pre-cargador usa cuatro cuadrados que se desplazan, giran, cambian de color y se convierten en círculos.

HTML

Es creado mediante cuatro etiquetas span. Cada una es un círculo/cuadrado y tiene su propia animación aplicada al mismo.

1
<div id="preloader_2">
2
    		<span></span>
3
			<span></span>
4
			<span></span>
5
			<span></span>
6
		</div>

CSS

Todas las cuatro se transforman de un cuadrado a un círculo ajustando la propiedad border-radius de 0px (cuadrado) a 20px (círculo).

1
#preloader_2{
2
position: relative;
3
left: 50%;
4
width: 40px;
5
height: 40px;
6
}
7
#preloader_2 span{
8
    display:block;
9
	bottom:0px;
10
	width: 20px;
11
	height: 20px;
12
	background:#9b59b6;
13
	position:absolute;
14
}
15
#preloader_2 span:nth-child(1){
16
animation: preloader_2_1 1.5s infinite ease-in-out;
17
}
18
#preloader_2 span:nth-child(2){
19
left:20px;
20
animation: preloader_2_2 1.5s infinite ease-in-out;
21
22
}
23
#preloader_2 span:nth-child(3){
24
top:0px;
25
animation: preloader_2_3 1.5s infinite ease-in-out;
26
}
27
#preloader_2 span:nth-child(4){
28
top:0px;
29
left:20px;
30
animation: preloader_2_4 1.5s infinite ease-in-out;
31
}
32
33
@-keyframes preloader_2_1 {
34
    0% {-transform: translateX(0px) translateY(0px)  rotate(0deg); border-radius:0px;}
35
    50% {-transform: translateX(-20px) translateY(-10px) rotate(-180deg); border-radius:20px;background:#3498db;}
36
    80% {-transform: translateX(0px) translateY(0px) rotate(-360deg); border-radius:0px;}
37
     100% {-transform: translateX(0px) translateY(0px) rotate(-360deg); border-radius:0px;}
38
}
39
@-keyframes preloader_2_2 {
40
    0% {-transform: translateX(0px) translateY(0px)  rotate(0deg);border-radius:0px;}
41
    50% {-transform: translateX(20px) translateY(-10px) rotate(180deg);border-radius:20px;background:#f1c40f;}
42
    80% {-transform: translateX(0px) translateY(0px) rotate(360deg);border-radius:0px;}
43
    100% {-transform: translateX(0px) translateY(0px) rotate(360deg);border-radius:0px;}
44
}
45
@-keyframes preloader_2_3 {
46
    0% {-transform: translateX(0px) translateY(0px)  rotate(0deg);border-radius:0px;}
47
    50% {-transform: translateX(-20px) translateY(10px) rotate(-180deg); border-radius:20px;background:#2ecc71;}
48
    80% {-transform: translateX(0px) translateY(0px) rotate(-360deg);border-radius:0px;}
49
     100% {-transform: translateX(0px) translateY(0px) rotate(-360deg); border-radius:0px;}
50
}
51
52
53
@-keyframes preloader_2_4 {
54
    0% {-transform: translateX(0px) translateY(0px)  rotate(0deg); border-radius:0px;}
55
    50% {-transform: translateX(20px) translateY(10px) rotate(180deg); border-radius:20px;background:#e74c3c;}
56
    80% {-transform: translateX(0px) translateY(0px) rotate(360deg); border-radius:0px;}
57
     100% {-transform: translateX(0px) translateY(0px) rotate(360deg);border-radius:0px;}
58
}

Cada uno también gira y se mueve a lo largo de los ejes X & Y en dirección opuesta a la posición actual. El color de cada etiqueta es animada desde un púrpura uniforme a su propio color independiente. Esto da la impresión de que las formas se fusionan en varios círculos desde un cuadrado.

3. Cruzando Figuras

El pre-cargador es un div que utiliza los pseudo elementos :before y :after de los que hablamos previamente.

HTML

1
<div id="preloader_3"></div>

CSS

1
#preloader_3{
2
    position:relative;
3
}
4
#preloader_3:before{
5
	width:20px;
6
	height:20px;
7
	border-radius:20px;
8
	background:blue;
9
	content:'';
10
	position:absolute;
11
	background:#9b59b6;
12
	animation: preloader_3_before 1.5s infinite ease-in-out;
13
}
14
15
#preloader_3:after{
16
	width:20px;
17
	height:20px;
18
	border-radius:20px;
19
	background:blue;
20
	content:'';
21
	position:absolute;
22
	background:#2ecc71;
23
	left:22px;
24
	animation: preloader_3_after 1.5s infinite ease-in-out;
25
}
26
27
@keyframes preloader_3_before {
28
    0% {transform: translateX(0px) rotate(0deg)}
29
    50% {transform: translateX(50px) scale(1.2) rotate(260deg); background:#2ecc71;border-radius:0px;}
30
      100% {transform: translateX(0px) rotate(0deg)}
31
}
32
@keyframes preloader_3_after {
33
    0% {transform: translateX(0px)}
34
    50% {transform: translateX(-50px) scale(1.2) rotate(-260deg);background:#9b59b6;border-radius:0px;}
35
  	100% {transform: translateX(0px)}
36
}

Una animación es colocada en #preloader_3:before y otra en #preloader_3:after. Cada animación cambia a un color diferente en el momento opuesto. Muy parecido al anterior pre-cargador, donde cada pseudo elemento cambia de un círculo a un cuadrado animando la propiedad border-radius .

4. La serpiente

La serpiente es creada de una colección de etiquetas span donde cada una es estilizada para formar un círculo.

HTML

Esta es la estructura, pero siempre se puede tratar de crear el pre-cargador con tres círculos y en lugar de tener demasiadas etiquetas span solo usar el div #preloader_4 con los pesudo elementos :before y :after.

1
<div id="preloader_4">
2
    		<span></span>
3
			<span></span>
4
			<span></span>
5
			<span></span>
6
			<span></span>
7
		</div>

CSS

La animación es creada mediante la transformación de la posición Y de cada animación por -10px y cambiando de color azul a amarillo. Para crear el efecto de sombra debajo de la serpiente se añade que cada etiqueta span cambie el tamaño de su sombra vertical de 0px a 20px.

1
#preloader_4{
2
    position:relative;
3
}
4
#preloader_4 span{
5
	position:absolute;
6
	width:20px;
7
	height:20px;
8
	background:#3498db;
9
	opacity:0.5;
10
border-radius:20px;
11
	-animation: preloader_4 1s infinite ease-in-out;
12
13
}
14
#preloader_4 span:nth-child(2){
15
	left:20px;
16
	animation-delay: .2s;
17
}
18
#preloader_4 span:nth-child(3){
19
	left:40px;
20
	animation-delay: .4s;
21
}
22
#preloader_4 span:nth-child(4){
23
	left:60px;
24
	animation-delay: .6s;
25
}
26
#preloader_4 span:nth-child(5){
27
	left:80px;
28
	animation-delay: .8s;
29
}
30
@keyframes preloader_4 {
31
    0% {opacity: 0.3; transform:translateY(0px);    box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.1);}
32
    50% {opacity: 1; transform: translateY(-10px); background:#f1c40f;	box-shadow: 0px 20px 3px rgba(0, 0, 0, 0.05);}
33
  	100%  {opacity: 0.3; transform:translateY(0px);	box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.1);}
34
}

Parecido al pre-cargador 1, agregamos la propiedad animation-delay a cada etiqueta span y compensamos el retraso de cada etiqueta span con 2 milisegundos y creamos el efecto de onda.

5. Disco Giratorio

Esto es... una cosa giratoria.

HTML

Aquí simplemente estamos usando un div para el círculo central y el pseudo elemento :after para crear las líneas exteriores.

1
 <div id="preloader5"></div>

CSS

Añadiendo el borde a la parte superior e inferior mediando la propiedad border-radius con 50px crea las dos líneas exteriores. La animación es agregada al div principal solo para cambiar el color principal del div y crear el efecto giratorio agregando la propiedad transform: rotate() . La animación del pseudo elemento :after es agregada para cambiar de color el borde exterior.

1
#preloader5{
2
    position:relative;
3
	width:30px;
4
	height:30px;
5
	background:#3498db;
6
	border-radius:50px;
7
	animation: preloader_5 1.5s infinite linear;
8
}
9
#preloader5:after{
10
	position:absolute;
11
	width:50px;
12
	height:50px;
13
	border-top:10px solid #9b59b6;
14
	border-bottom:10px solid #9b59b6;
15
	border-left:10px solid transparent;
16
	border-right:10px solid transparent;
17
	border-radius:50px;
18
	content:'';
19
	top:-20px;
20
	left:-20px;
21
	animation: preloader_5_after 1.5s infinite linear;
22
}
23
@keyframes preloader_5 {
24
    0% {transform: rotate(0deg);}
25
    50% {transform: rotate(180deg);background:#2ecc71;}
26
    100% {transform: rotate(360deg);}
27
}
28
@keyframes preloader_5_after {
29
    0% {border-top:10px solid #9b59b6;border-bottom:10px solid #9b59b6;}
30
    50% {border-top:10px solid #3498db;border-bottom:10px solid #3498db;}
31
    100% {border-top:10px solid #9b59b6;border-bottom:10px solid #9b59b6;}
32
}

6. Ventana Reluciente

Tenemos algo parecido a Microsoft en esto...

HTML

Este pre-cargador es creado usando un div y cuatro etiquetas span para crear cada cuadrado.

1
 <div id="preloader6">
2
    		<span></span>
3
			<span></span>
4
			<span></span>
5
			<span></span>
6
		</div>

CSS

Estos cuadrados se colocan en un orden de rejilla. La animación es agregada al div principal para hacer girar todo el pre-cargador.Otra animación es agregada a las etiquetas span que las escala de 100% a 50%. Después agregamos la propiedad animation-delay a cada etiqueta span para crear el efecto de pulsación.

1
#preloader6{
2
    position:relative;
3
	width: 42px;
4
	height: 42px;
5
	animation: preloader_6 5s infinite linear;
6
}
7
#preloader6 span{
8
	width:20px;
9
	height:20px;
10
	position:absolute;
11
	background:red;
12
	display:block;
13
	animation: preloader_6_span 1s infinite linear;
14
}
15
#preloader6 span:nth-child(1){
16
background:#2ecc71;
17
18
}
19
#preloader6 span:nth-child(2){
20
left:22px;
21
background:#9b59b6;
22
	animation-delay: .2s;
23
24
}
25
#preloader6 span:nth-child(3){
26
top:22px;
27
background:#3498db;
28
	animation-delay: .4s;
29
}
30
#preloader6 span:nth-child(4){
31
top:22px;
32
left:22px;
33
background:#f1c40f;
34
	animation-delay: .6s;
35
}
36
@keyframes preloader_6_span {
37
   0% { transform:scale(1); }
38
   50% { transform:scale(0.5); }
39
   100% { transform:scale(1); }
40
}

Conclusión

La gran ventana al usar pre-cargadores CSS3 en lugar de imágenes pre-cargadoras es que ellos son escalables y están listos para la pantalla retina. Eso significa que no importa desde que dispositivo se muestran siempre estarán nítidos, limpios y a prueba, (ten en cuenta que no todos los navegadores antiguos soportan animaciones CSS3).

Mediante la comprensión de algunas propiedades y técnicas CSS3 deberías ser capaz de crear tus propios pre-cargadores. Son divertidos para crear y con un poco de experimentación puedes hacer animaciones realmente geniales para evitar que los usuarios abandonen tu sitio.

Si has creado algún pre-cargador recientemente me encantaría verlo. Siéntase libre de dejarlo en los comentarios.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.