@casoon/dragonfly
Version:
Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.
223 lines (194 loc) • 5.77 kB
CSS
/**
* Stars Partikel-Effekt
*
* Funkelnde Sterne, die langsam über den Bildschirm ziehen – für einen Nachthimmel-Effekt.
* Dieser Effekt ist performant optimiert und berücksichtigt reduzierte Bewegung.
*/
@keyframes stars-twinkle {
0, 100% {
opacity: var(--opacity-30);
transform: scale(0.8);
}
50% {
opacity: var(--opacity-100);
transform: var(--transform-scale-100);
}
}
@keyframes stars-drift {
0% {
transform: translateX(0%) translateY(0%);
}
25% {
transform: translateX(var(--spacing-1)) translateY(var(--border-width));
}
50% {
transform: translateX(var(--spacing-1)) translateY(0%);
}
75% {
transform: translateX(var(--spacing-1)) translateY(calc(-1 * var(--border-width)));
}
100% {
transform: translateX(0%) translateY(0%);
}
}
@layer components {
.stars {
overflow: hidden;
position: relative;
}
.stars::before,
.stars::after,
.stars .star {
animation:
stars-twinkle 4s var(--easing-smooth) infinite,
stars-drift 20s linear infinite;
background: var(--stars-color, rgb(255 255 200));
border-radius: 5px;
box-shadow: 0 0 var(--spacing-1) var(--border-width) var(--stars-glow, rgb(255 255 200 / 70%));
content: '';
height: var(--spacing-1);
position: absolute;
width: var(--spacing-1);
}
.stars::before {
right: 2%0%;
top: 3%0%;
}
.stars::after {
animation-delay: var(--animation-duration-slow), 5s;
right: 5%0%;
top: 6%0%;
}
.stars .star {
animation-delay: var(--animation-duration-slowest), 10s;
right: 8%0%;
top: 2%0%;
}
.stars .star-alt {
animation:
stars-twinkle 4s var(--easing-smooth) infinite,
stars-drift 20s linear infinite;
animation-delay: var(--animation-duration-ultra-slow), 15s;
background: var(--stars-color, rgb(255 255 200));
border-radius: 5px;
box-shadow: 0 0 var(--spacing-1) var(--border-width) var(--stars-glow, rgb(255 255 200 / 70%));
height: var(--spacing-1);
position: absolute;
right: 3%0%;
top: 7%0%;
width: var(--spacing-1);
}
/* Dichte Sterne */
.stars-dense {
position: relative;
}
.stars-dense::before,
.stars-dense::after,
.stars-dense .star,
.stars-dense .star-alt,
.stars-dense .star-extra,
.stars-dense .star-extra-alt {
animation:
stars-twinkle 4s var(--easing-smooth) infinite,
stars-drift 20s linear infinite;
background: var(--stars-color, rgb(255 255 200));
border-radius: 5px;
box-shadow: 0 0 var(--spacing-1) var(--border-width) var(--stars-glow, rgb(255 255 200 / 70%));
content: '';
height: var(--spacing-1);
position: absolute;
width: var(--spacing-1);
}
.stars-dense .star-extra {
animation-delay: var(--animation-duration-slower), 8s;
right: 1%0%;
top: 4%0%;
}
.stars-dense .star-extra-alt {
animation-delay: 2.5s, 12s;
right: 7%0%;
top: 5%0%;
}
/* Größenvarianten */
.stars-sm::before,
.stars-sm::after,
.stars-sm .star,
.stars-sm .star-alt,
.stars-sm .star-extra,
.stars-sm .star-extra-alt {
box-shadow: 0 0 var(--border-width-thick) 0.5 var(--spacing-1) var(--stars-glow, rgb(255 255 200 / 70%));
height: var(--border-width-thick);
width: var(--border-width-thick);
}
.stars-lg::before,
.stars-lg::after,
.stars-lg .star,
.stars-lg .star-alt,
.stars-lg .star-extra,
.stars-lg .star-extra-alt {
box-shadow: 0 0 6px var(--border-width-thick) var(--stars-glow, rgb(255 255 200 / 70%));
height: var(--spacing-1);
width: var(--spacing-1);
}
/* Animationsvarianten */
.stars-slow::before,
.stars-slow::after,
.stars-slow .star,
.stars-slow .star-alt,
.stars-slow .star-extra,
.stars-slow .star-extra-alt {
animation-duration: var(--animation-duration-ultra-slow), 30s;
}
.stars-fast::before,
.stars-fast::after,
.stars-fast .star,
.stars-fast .star-alt,
.stars-fast .star-extra,
.stars-fast .star-extra-alt {
animation-duration: var(--animation-duration-slowest), 15s;
}
/* Farbvarianten */
.stars-white {
--stars-color: rgb(255 255 255);
--stars-glow: rgb(255 255 255 / 70%);
}
.stars-blue {
--stars-color: rgb(200 220 255);
--stars-glow: rgb(200 220 255 / 70%);
}
.stars-gold {
--stars-color: rgb(255 215 0);
--stars-glow: rgb(255 215 0 / 70%);
}
.stars-multi .star {
--stars-color: rgb(255 150 150);
--stars-glow: rgb(255 150 150 / 70%);
}
.stars-multi .star-alt {
--stars-color: rgb(150 255 150);
--stars-glow: rgb(150 255 150 / 70%);
}
.stars-multi .star-extra {
--stars-color: rgb(150 150 255);
--stars-glow: rgb(150 150 255 / 70%);
}
.stars-multi .star-extra-alt {
--stars-color: rgb(255 255 150);
--stars-glow: rgb(255 255 150 / 70%);
}
}
/* Reduzierte Bewegung */
@media (prefers-reduced-motion: reduce) {
@layer components {
.stars::before,
.stars::after,
.stars .star,
.stars .star-alt,
.stars-dense .star-extra,
.stars-dense .star-extra-alt {
animation: var(--animation-none);
opacity: var(--opacity-70);
transform: var(--transform-scale-100);
}
}
}