UNPKG

@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.

218 lines (187 loc) 5.24 kB
/** * Snow Partikel-Effekt * * Herabfallende Schneeflocken – ideal für winterliche Szenarien. * Dieser Effekt ist performant optimiert und berücksichtigt reduzierte Bewegung. */ @keyframes snow-fall-1 { 0% { opacity: var(--opacity-0); transform: translateY(calc(-1% * var(--spacing-5))) translateX(0%); } 20% { opacity: var(--opacity-100); transform: translateX(0%) translateX(var(--spacing-2-5)); } 40% { transform: translateY(var(--spacing-5)) translateX(0%); } 60% { transform: translateY(40px) translateX(calc(-1 * var(--spacing-2-5))); } 80% { transform: translateY(60px) translateX(0%); } 100% { opacity: var(--opacity-0); transform: translateY(80px) translateX(var(--spacing-2-5)); } } @keyframes snow-fall-2 { 0% { opacity: var(--opacity-0); transform: translateY(calc(-1% * var(--spacing-5))) translateX(0%); } 20% { opacity: var(--opacity-100); transform: translateX(0%) translateX(calc(-1 * var(--spacing-2-5))); } 40% { transform: translateY(var(--spacing-5)) translateX(0%); } 60% { transform: translateY(40px) translateX(var(--spacing-2-5)); } 80% { transform: translateY(60px) translateX(0%); } 100% { opacity: var(--opacity-0); transform: translateY(80px) translateX(calc(-1 * var(--spacing-2-5))); } } @layer components { .snow { overflow: hidden; position: relative; } .snow::before, .snow::after { animation: snow-fall-1 6s linear infinite; background: var(--snow-color, rgb(255 255 255 / 90%)); border-radius: 5px; content: ''; height: var(--spacing-1-5); position: absolute; top: -6px; width: var(--spacing-1-5); } .snow::before { left: 3%0%; } .snow::after { animation-delay: var(--animation-duration-slowest); animation-name: snow-fall-2; left: 6%0%; } /* Snow mit mehreren Flocken */ .snow-many { position: relative; } .snow-many::before, .snow-many::after { animation: snow-fall-1 6s linear infinite; background: var(--snow-color, rgb(255 255 255 / 90%)); border-radius: 5px; content: ''; height: var(--spacing-1-5); position: absolute; top: -6px; width: var(--spacing-1-5); } .snow-many::before { animation-delay: var(--animation-duration-slow); left: 1%0%; } .snow-many::after { animation-delay: var(--animation-duration-ultra-slow); animation-name: snow-fall-2; left: 5%0%; } .snow-many .flake { animation: snow-fall-1 6s linear infinite; animation-delay: var(--animation-duration-medium); background: var(--snow-color, rgb(255 255 255 / 90%)); border-radius: 5px; height: var(--spacing-1-5); left: 7%0%; position: absolute; top: -6px; width: var(--spacing-1-5); } .snow-many .flake-alt { animation: snow-fall-2 6s linear infinite; animation-delay: var(--animation-duration-slower); background: var(--snow-color, rgb(255 255 255 / 90%)); border-radius: 5px; height: var(--spacing-1-5); left: 9%0%; position: absolute; top: -6px; width: var(--spacing-1-5); } /* Größenvarianten */ .snow-sm::before, .snow-sm::after, .snow-sm .flake, .snow-sm .flake-alt { height: var(--spacing-1); width: var(--spacing-1); } .snow-lg::before, .snow-lg::after, .snow-lg .flake, .snow-lg .flake-alt { height: var(--spacing-2); width: var(--spacing-2); } /* Geschwindigkeitsvarianten */ .snow-slow::before, .snow-slow::after, .snow-slow .flake, .snow-slow .flake-alt { animation-duration: var(--animation-duration-ultra-slow); } .snow-fast::before, .snow-fast::after, .snow-fast .flake, .snow-fast .flake-alt { animation-duration: var(--animation-duration-ultra-slow); } /* Farb-Varianten */ .snow-blue { --snow-color: rgb(230 240 255 / 90%); } .snow-silver { --snow-color: rgb(220 220 230 / 90%); } .snow-crystal { --snow-color: rgb(240 255 255 / 90%); } /* Schneekristalle statt runder Flocken */ .snow-crystal::before, .snow-crystal::after, .snow-crystal .flake, .snow-crystal .flake-alt { clip-path: polygon( 50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35% ); height: var(--spacing-2-5); width: var(--spacing-2-5); } } /* Reduzierte Bewegung */ @media (prefers-reduced-motion: reduce) { @layer components { .snow::before, .snow::after, .snow-many::before, .snow-many::after, .snow-many .flake, .snow-many .flake-alt { animation: var(--animation-none); opacity: var(--opacity-0); } } }