Advertisement
  1. Web Design
  2. CSS3

Criando Pré-Carregadores em CSS3

Scroll to top
Read Time: 9 min

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Pré-carregadores são algo bastante comum no web design moderno. Como usuários, esperamos que a web seja rápida e fluida - não gostamos de esperar pelas coisas. Pré-carregadores oferecem uma resposta visual que indica que algum conteúdo está sendo carregado, adiministrando expectativas, reduz as chances dos usuários abandonarem seu site.

O Básico do CSS3 para a Criação de Pré-Carregadores

Antes de começarmos a construir nossa coleção de pré-carregadores, discutiremos algumas das características do CSS3 que são essenciais para a criação desse tipo de pré-carregadores

Os Pseudo-elementoss :before :after

Pseudo-elementos são bastante úteis na criação de pré-carregadores com CSS3. Eles criam um elemento falso antes ou depois do elemento HTML em questão.

“Pseudo é uma palavra que deriva do termo grego pseudēs, que significa falso.”

É o mesmo que criar um elemento que não existe, porém, passível de ser estilizado com CSS. Esses pseudo-elementos não são necessários para a criação de pré-carregadores com CSS3, mas facilitam bastante na hora de minimizar o código HTML.

Pseudo-elementos podem ser estilizados da mesma forma que você faria com qualquer outro elemento HTML, a única diferença é que você precisa especificar a propriedade content deles. Se não espicificá-la, o elemento não renderizará. A propriedade content pode conter qualquer texto que seja útil para o seu pré-carregador, como "Carregando...", entretanto, se não precisar de qualquer texto extra, você pode atribuir uma cadeia de caracteres vazia, para essa propriedade.

Animação em CSS3

Os pseudo-elementos do CSS são úteis, porém, não essenciais para a criação de pré-carregadores, contudo, a propriedade animation é. Sem ela, o pré-carregador falhará em ser animado e passaria a ser um simples adorno visual estático - algo não muito útil para indicar que algum conteúdo está em carregamento.

“O principal componente de animações em CSS é o @keyframes, a regra do CSS onde a animação é criada. Pense no @keyframes como estágios em uma linha do tempo. Dentro da @keyframes, você pode definir esses estágios, cada um com seus própriso estilos declarados.” - Uma introdução à Animação em CSS

Nota: antes de seguirmos para a demonstração, é importante atentar que os prefixos dos motores dos navegadores não estão inlusos nos trechos de códigos abaixo. Se precisar desses prefixos, por favor, veja os exemplos no codepen.

1. Onda de Áudio

A ideia por trás desse pré-carregador é criar uma animação equivalente a uma onda de áudio.

HTML

Ela é obtida através da criação de cinco elementos spans, cada um representando uma barra de áudio.

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

CSS

O efeito é obtido através da animação da altura de cada span, de 5px para 30px. A span também se movimenta para baixo no eixo Y em 15px, para dar o efeito de que está crescendo a partir do 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 padrão, a animação em cada span acontece ao mesmo tempo. O efeito da Onda Mexicana é criado a partir da adição de um atraso, com a propriedade animation-delay, a cada span com um valor de 2 milisegundos. Cada span é selecionada através do uso do seletor nth-child().

2. Quadrado Circular

Esse pré-carregador usa quatro quadrados que se transformam, giram e mudam de cor até se tornarem círculos.

HTML

Ele é criado usando quatro spans; Cada um é um círculo/quadrado e possui sua própria animação.

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

CSS

Todos eles vão de quadrados até se transformarem em círculos, ajustando a propriedade border-radius de 0px (quadrado) para 20px (círulo).

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 um também se movimenta nos eixos X & Y em direções opostas à sua posição atual. A cor de cada span também é animada e vai do púrpura até a cor definida para cada um. Isso dá a impressão de vários círculos fundindo em um único quadrado.

3. Formas Cruzadas

O pré-carregador de Formas Cruzadas é uma única div que utiliza os pseudo-elementos :before e :after que mencionamos anteriormente.

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
}

Uma animação é criada para o pseudo-elemento #preloader_3:before e outra para o pseudo-elemento #preloader_3:after. Cada animação muda uma cor diferente em tempos distintos. De forma semelhante ao pré-carregador anterior, cada pseudo-elemento sai de um círculo e vira um quadrado, ao animar a propriedade border-radius.

4. A Cobra

A cobra é criada a partir de um conjunto de spans, onde cada um é estilizado de forma que virem um círculo.

HTML

Eis o código HTML, mas você poderia, facilmente, criar esse pré-carregador usando, apenas, três círculos, ao usar apenas #preloader_4 com os pseudo-elementos :before e :after.

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

CSS

A animação é criada ao mudar a posição Y de cada animação em -10px e mudar a cor do azul para o amarelo. Para criar o efeito de sombra, adicionamos um sombreamento a cada span que modifica sua sombra vertical de 0px para 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
}

Semelhante ao pré-carregador 1, ao adicionar animation-delay a cada span e atrasar cada uma delas em 2 milisegundos, cria-se o efeito de onda.

5. Disco Giratório

Esse é um disco.. que gira.

HTML

Usaremos uma única div para o círculo central e o pseudo-elemento :after para criar as linhas externas.

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

CSS

Adicionando uma borda às partes superior e inferior, e atribuindo uma border-radius de 50px, criar-se duas linhas esternas. Adicionamos uma animação à div principal só para alterar sua cor, e criamos o efeito de rotação adicionando transform: rotate(). A animação do pseudo-elemento :after é adicionada para alterar a cor da borda externa.

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. Janela Brilhante

Nós incorporamos um pouco da Microsoft nessa daqui...

HTML

Esse pré-carregador é criado com uma div e quatro spans para cada quadrado.

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

CSS

Esse quadrados são posicionados na forma de grade. A animação é adicionada à div principal para rotacionar todo o pré-carregador. Outra animação é adicionada às spans que mudam de tamanho, indo de 100% para 50%. Nós, então, adicionamos animation-delay a cada span para criar o efeito de pulsação.

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
}

Conculsão

A grande vantagem de usar pré-carregadores em CSS3 ao invés de imagens é que eles são escaláveis e já adaptados para telas retina. Isso significa que, não importa em qual aparelho eles estejam, sempre estarão bem vivos, limpos e preparados para o futuro (contudo, tenha em mente que, nem todos os navegadores antigos dão suporte a animações em CSS).

Compreendendo algumas propriedades e técnicas importantes do CSS3, você deve ser capaz de criar seus próprios pré-carregadores. Eles são bacanas de se criar e, experimentando um pouco, você pode criar várias animações bem legais, que podem evitar que seus usuários deixem seu site.

Se você já criou algum pré-carregador legal, gostaria de vê-los! Sinta-se a vontade de deixar o link deles na área dos comentários.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no 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.