Vimos spinners. Nós olhamos para os pontos. Agora vamos abordar outro padrão comum para carregadores: barras. E faremos neste terceiro artigo da série a mesma coisa que fizemos nos outros, fazendo-o com apenas um elemento e com CSS flexível que facilita a criação de variações.
Série de artigos
- Carregadores de elemento único: The Spinner
- Carregadores de elemento único: os pontos
- Carregadores de elemento único: as barras — Você está aqui
- Carregadores de elemento único: indo para 3D — chegando em 1º de julho
Vamos começar não com um, nem com dois, mas com 20 exemplos de carregadores de barras.
O que?! Você vai detalhar cada um deles? Isso é demais para um artigo!
Pode parecer assim à primeira vista! Mas todos eles contam com a mesma estrutura de código e atualizamos apenas alguns valores para criar variações. Esse é todo o poder do CSS. Não aprendemos como criar um carregador, mas aprendemos diferentes técnicas que nos permitem criar quantos carregadores quisermos usando apenas a mesma estrutura de código.
Vamos fazer algumas barras!
Começamos definindo as dimensões para eles usando width
(ou height
) com aspect-ratio
para manter a proporção:
.bars { width: 45px; aspect-ratio: 1;
}
Nós meio que “falsificamos” três barras com um gradiente linear no fundo – muito semelhante a como criamos carregadores de pontos na Parte 2 desta série.
.bars { width: 45px; aspect-ratio: 1; --c: no-repeat linear-gradient(#000 0 0); /* we define the color here */ background: var(--c) 0% 50%, var(--c) 50% 50%, var(--c) 100% 50%; background-size: 20% 100%; /* 20% * (3 bars + 2 spaces) = 100% */
}
O código acima nos dará o seguinte resultado:
Como os outros artigos desta série, vamos lidar com muitos background
trapaça. Então, se você sentir que estamos pulando rápido demais ou sentir que precisa de um pouco mais de detalhes, verifique-os. Você também pode ler meu Resposta do Stack Overflow onde eu dou uma explicação detalhada sobre como tudo isso funciona.
Animando as barras
Animamos o tamanho ou a posição do elemento para criar o carregador de barra. Vamos animar o tamanho definindo os seguintes quadros-chave de animação:
@keyframes load { 0% { background-size: 20% 100%, 20% 100%, 20% 100%; } /* 1 */ 33% { background-size: 20% 10% , 20% 100%, 20% 100%; } /* 2 */ 50% { background-size: 20% 100%, 20% 10% , 20% 100%; } /* 3 */ 66% { background-size: 20% 100%, 20% 100%, 20% 10%; } /* 4 */ 100% { background-size: 20% 100%, 20% 100%, 20% 100%; } /* 5 */
}
Veja o que está acontecendo lá? Entre 0% e 100%, a animação altera o background-size
do gradiente de fundo do elemento. Cada quadro-chave define três tamanhos de fundo (um para cada gradiente).
E aqui está o que obtemos:
Você consegue imaginar todas as variações possíveis que podemos obter brincando com diferentes configurações de animação para tamanhos ou posições?
Vamos corrigir o tamanho para 20% 50%
e atualize as posições desta vez:
.loader { width: 45px; aspect-ratio: .75; --c: no-repeat linear-gradient(#000 0 0); background: var(--c), var(--c), var(--c); background-size: 20% 50%; animation: load 1s infinite linear;
}
@keyframes load { 0% { background-position: 0% 100%, 50% 100%, 100% 100%; } /* 1 */ 20% { background-position: 0% 50% , 50% 100%, 100% 100%; } /* 2 */ 40% { background-position: 0% 0% , 50% 50% , 100% 100%; } /* 3 */ 60% { background-position: 0% 100%, 50% 0% , 100% 50%; } /* 4 */ 80% { background-position: 0% 100%, 50% 100%, 100% 0%; } /* 5 */ 100% { background-position: 0% 100%, 50% 100%, 100% 100%; } /* 6 */
}
…o que nos dá outro carregador!
Você provavelmente já entendeu o truque. Tudo que você precisa é definir uma linha do tempo que será traduzida em um quadro-chave. Ao animar o tamanho, a posição — ou ambos! — há um número infinito de possibilidades de carregadores ao nosso alcance.
E quando nos sentirmos confortáveis com essa técnica, poderemos ir além e usar um gradiente mais complexo para criar imagens uniformes. mais carregadores.
Espere que nos dois últimos exemplos dessa demonstração, todos os carregadores de barra usem a mesma marcação e estilos subjacentes e diferentes combinações de animações. Abra o código e tente visualizar cada quadro de forma independente; você verá como é relativamente trivial fazer dezenas - se não centenas - de variações.
Ficando sofisticado
Você se lembra do truque da máscara que fizemos com os carregadores de pontos em o segundo artigo desta série? Podemos fazer o mesmo aqui!
Se aplicarmos toda a lógica acima dentro do mask
propriedade, podemos usar qualquer configuração de plano de fundo para adicionar uma coloração sofisticada aos nossos carregadores.
Vamos fazer uma demonstração e atualizá-la:
Tudo o que fiz foi atualizar todos os background-*
com mask-*
e adicionei uma coloração gradiente. Tão simples quanto isso, ainda assim temos outro carregador legal.
Então não há diferença entre os pontos e as barras?
Não há diferença! Escrevi dois artigos diferentes para cobrir o máximo de exemplos possível, mas em ambos estou contando com as mesmas técnicas:
- Gradientes para criar as formas (pontos ou barras ou talvez outra coisa)
- Animando
background-size
e / oubackground-position
para criar a animação do carregador - Adicionando máscara para adicionar um toque de cores
Arredondando as barras
Vamos tentar algo diferente desta vez, onde podemos arredondar as bordas das nossas barras.
Usando um elemento e seu ::before
e ::after
pseudos, definimos três barras idênticas:
.loader { --s: 100px; /* control the size */ display: grid; place-items: center; place-content: center; margin: 0 calc(var(--s) / 2); /* 50px */
}
.loader::before,
.loader::after { content: ""; grid-area: 1/1;
}
.loader,
.loader::before,
.loader::after { height: var(--s); width: calc(var(--s) / 5); /* 20px */ border-radius: var(--s); transform: translate(calc(var(--_i, 0) * 200%));
}
.loader::before { --_i: -1; }
.loader::after { --_i: 1; }
Isso nos dá três barras, desta vez sem depender de um gradiente linear:
Agora o truque é preencher essas barras com um lindo gradiente. Para simular um gradiente contínuo, precisamos brincar com background
propriedades. Na figura acima, a área verde define a área coberta pela carregadeira. Essa área deve ser do tamanho do gradiente e, se fizermos as contas, é igual a multiplicar os dois lados rotulados S
no diagrama, ou background-size: var(--s) var(--s)
.
Como nossos elementos são colocados individualmente, precisamos atualizar a posição do gradiente dentro de cada um para garantir que todos eles se sobreponham. Dessa forma, estamos simulando um gradiente contínuo, embora na verdade sejam três deles.
Para o elemento principal (colocado no centro), o fundo precisa estar no centro. Usamos o seguinte:
.loader { /* etc. */ background: linear-gradient() 50% / var(--s) var(--s);
}
Para o pseudoelemento à esquerda, precisamos do fundo à esquerda
.loader::before { /* etc. */ background: linear-gradient() 0% / var(--s) var(--s);
}
E para o pseudo à direita, o fundo precisa ser posicionado à direita:
.loader::after { background: linear-gradient() 100% / var(--s) var(--s);
}
Usando a mesma variável CSS, --_i
, que usamos para a tradução, podemos escrever o código assim:
.loader { --s: 100px; /* control the size */ --c: linear-gradient(/* etc. */); /* control the coloration */ display: grid; place-items: center; place-content: center;
}
.loader::before,
.loader::after{ content: ""; grid-area: 1/1;
}
.loader,
.loader::before,
.loader::after{ height: var(--s); width: calc(var(--s) / 5); border-radius: var(--s); background: var(--c) calc(50% + var(--_i, 0) * 50%) / var(--s) var(--s); transform: translate(calc(var(--_i, 0) * 200%));
}
.loader::before { --_i: -1; }
.loader::after { --_i: 1; }
Agora, tudo o que precisamos fazer é animar a altura e adicionar alguns atrasos! Aqui estão três exemplos em que tudo o que é diferente são as cores e os tamanhos:
Resumindo
Espero que até agora você esteja se sentindo super encorajado por todos os poderes que você tem para fazer animações de carregamento de aparência complexa. Tudo o que precisamos é de um elemento, seja gradientes ou pseudos, para desenhar as barras e, em seguida, alguns quadros-chave para mover as coisas. Essa é a receita completa para obter um número infinito de possibilidades, então saia e comece a preparar algumas coisas legais!
Até o próximo artigo, deixarei para vocês uma divertida coleção de carregadores onde estou combinando os pontos e os bares!
Série de artigos
- Carregadores de elemento único: The Spinner
- Carregadores de elemento único: os pontos
- Carregadores de elemento único: as barras — Você está aqui
- Carregadores de elemento único: indo para 3D — chegando em 1º de julho
Carregadores de elemento único: as barras publicado originalmente em Truques de CSS. Você deve receba o boletim informativo.
- "
- 3d
- a
- adicionado
- Todos os Produtos
- Outro
- responder
- Aplicar
- ÁREA
- por aí
- artigo
- artigos
- fundo
- barras
- antes
- entre
- Ambos os lados
- Pode obter
- código
- coleção
- combinações
- comum
- integrações
- Configuração
- conteúdo
- ao controle
- cobrir
- crio
- criado
- acordo
- detalhe
- detalhado
- DID
- diferença
- diferente
- dimensões
- Ecrã
- cada
- elementos
- etc.
- exemplos
- RÁPIDO
- Figura
- Primeiro nome
- Fixar
- flexível
- seguinte
- QUADRO
- engraçado
- mais distante
- obtendo
- vai
- Verde
- Grade
- altura
- SUA PARTICIPAÇÃO FAZ A DIFERENÇA
- esperança
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTTPS
- independentemente
- IT
- Julho
- APRENDER
- Deixar
- pequeno
- carregar
- carregamento
- olhou
- a manter
- fazer
- FAZ
- Fazendo
- máscara
- matemática
- poder
- mais
- mover
- multiplicando
- Cria
- Próximo
- número
- aberto
- Outros
- parte
- padrão
- Jogar
- jogar
- por favor
- posição
- posicionado
- possibilidades
- possível
- poder
- Propriedades
- propriedade
- publicado
- volta
- mesmo
- Série
- formas
- semelhante
- simples
- solteiro
- Tamanho
- tamanhos
- So
- alguns
- algo
- espaços
- começo
- técnicas
- A
- coisa
- coisas
- três
- tempo
- tocar
- Transformar
- Atualizar
- atualização
- us
- usar
- O Quê
- sem
- trabalho