Efeitos de Brilho e Animações para Modo Escuro em CSS3

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.

Tags: CSS3 box-shadow animations keyframes dark-mode

Publicado em 9-19 19:06