Criação de Efeitos de Brilho com CSS
A propriedade box-shadow é fundamental para criar iluminação em elementos da página. Vamos explorar técnicas progressivas:
.elemento-brilho {
width: 80px;
height: 80px;
border-radius: 50%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
box-shadow:
0 0 20px rgba(102, 126, 234, 0.8),
0 0 40px rgba(118, 75, 162, 0.6),
0 0 60px rgba(255, 255, 255, 0.4);
}
Múltiplas camadas de sombra permitem criar profundidade. A ordem dos valores importa - as sombras listadas primeiro aparecem acima das subsequentes.
Combinação com Border-Radius
A junção entre bordas arredondadas e sombras cria gradientes luminosos mais orgânicos:
.ciclo-glow {
position: relative;
width: 120px;
height: 120px;
background-color: transparent;
border-radius: 50%;
z-index: 10;
}
.ciclo-glow::before {
content: '';
position: absolute;
inset: -20px;
background: radial-gradient(circle, #ff00cc, transparent 70%);
filter: blur(15px);
border-radius: 50%;
opacity: 0.7;
}
Animações com Elementos Brilhantes
Elementos estáticos podem ganhar vida através de animações CSS. Criamos contêineres com variáveis customizadas para controle dinâmico:
<div class="animacao-luz">
<span style="--indice: 1;"></span>
<span style="--indice: 2;"></span>
<span style="--indice: 3;"></span>
</div>
.container-animado {
position: relative;
min-height: 450px;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
.animal-nulo {
position: absolute;
animation: girar-luz 7s linear infinite;
}
@keyframes girar-luz {
from {
transform: rotate(0deg);
filter: hue-rotate(0deg);
}
to {
transform: rotate(360deg);
filter: hue-rotate(360deg);
}
}
.elemento-ponto {
position: absolute;
top: calc(60px * var(--indice));
left: calc(60px * var(--indice));
width: 12px;
height: 12px;
background: cyan;
border-radius: 50%;
box-shadow: 0 0 15px cyan, 0 0 30px cyan;
}
Efeito Vagalumes Flutuantes
Para simular movimento natural como vagalumes, utilizamos posicionamento fixo combinado com múltiplas keyframes:
<!-- Estrutura HTML -->
<section class="jardim-noite">
<div class="luz-vagalume" style="--t: 0;"></div>
<div class="luz-vagalume" style="--t: 1;"></div>
<div class="luz-vagalume" style="--t: 2;"></div>
<div class="luz-vagalume" style="--t: 3;"></div>
<div class="luz-vagalume" style="--t: 4;"></div>
</section>
.zona-escura {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: #0d0d1a;
overflow: hidden;
}
particula-luz {
position: absolute;
width: 6px;
height: 6px;
border-radius: 50%;
animation: flutuar 18s ease-in-out infinite;
pointer-events: none;
--x: calc(var(--t) * 20vw);
--y: calc(var(--t) * 15vh);
}
particula-luz::after {
content: '';
position: absolute;
inset: -10px;
background: radial-gradient(circle, yellow, transparent 60%);
filter: blur(8px);
animation: piscar 3s ease-in-out infinite;
}
Trajetórias Personalizadas
Cada partícula possui caminho único através de @keyframes distintos:
@keyframes trajeto-a {
0% { transform: translate(10vw, 80vh) scale(0.9); }
25% { transform: translate(40vw, 60vh) scale(0.7); }
50% { transform: translate(25vw, 40vh) scale(1.1); }
75% { transform: translate(60vw, 70vh) scale(0.8); }
100% { transform: translate(10vw, 80vh) scale(0.9); }
}
@keyframes trajetoria-b {
0% { transform: translate(80vw, 30vh) scale(1.2); }
25% { transform: translate(50vw, 10vh) scale(0.6); }
50% { transform: translate(70vw, 50vh) scale(1); }
75% { transform: translate(30vw, 20vh) scale(0.9); }
100% { transform: translate(80vw, 30vh) scale(1.2); }
}
@keyframes pulsar-intensidade {
0%, 50%, 100% { opacity: 0.3; }
25%, 75% { opacity: 1; }
}
Estrelas e Cometas no Céu Noturno
Commbine pontos estáticos com linhas em movimento para criar cenários celestiais:
<!-- HTML do cenário -->
<div class="cenario-espaco">
<div class="estrelas-fixas"></div>
<div class="astro-correndo astro-1"></div>
<div class="astro-correndo astro-2"></div>
<div class="astro-correndo astro-3"></div>
</div>
.panorama-noturno {
position: relative;
height: 100vh;
background: linear-gradient(to bottom, #0a0e27 0%, #1a1f3c 100%);
}
brilho-constante {
width: 2px;
height: 2px;
background: white;
box-shadow:
150px 80px white,
420px 150px white,
680px 220px white,
890px 110px white,
230px 340px white,
510px 290px white,
750px 400px white;
}
meteoro-rastreio {
position: absolute;
top: 50px;
left: 100%;
width: 280px;
height: 2px;
transform: rotate(-42deg);
background: linear-gradient(to right, white, transparent);
animation: transito-cielo 8s linear infinite;
}
meteoro-rastreio::before {
content: '';
position: absolute;
right: 0;
top: -2px;
width: 6px;
height: 6px;
border-radius: 50%;
background: white;
box-shadow: 0 0 18px 5px white;
}
Animação de Trajetória Meteórica
@keyframes transito-cielo {
0% {
margin-left: 100%;
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
margin-left: -500px;
opacity: 0;
}
}
.atraso-variavel:nth-child(2n) {
animation-delay: 3.2s;
}
.atraso-variavel:nth-child(3n) {
animation-delay: 5.8s;
}
Varie os tempos de delay e velocidades de cada meteeoro para maior realismo no efeito final.