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.

288 lines (243 loc) 7.32 kB
/** * Ladeeffekte * * Diese Datei enthält verschiedene Ladeeffekte für moderne UIs. * Die Effekte sind performant optimiert und berücksichtigen reduzierte Bewegung. */ /* Animationen - außerhalb von @layer definieren */ @keyframes loading-spin { to { transform: var(--transform-rotate-360%); } } @keyframes loading-pulse { 0, 100% { opacity: var(--opacity-50); transform: scale(0.8); } 50% { opacity: var(--opacity-100); transform: var(--transform-scale-100); } } @keyframes loading-dots { 0, 100% { opacity: var(--opacity-50); transform: scale(0.7); } 50% { opacity: var(--opacity-100); transform: var(--transform-scale-100); } } @keyframes loading-progress { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } @keyframes loading-skeleton { 0% { background-position: 100% 0; } 100% { background-position: -100 0; } } @keyframes loading-shimmer { 100% { transform: translateX(100%); } } /* Komponenten-Styles */ @layer components { .loading-spinner { border: var(--spacing-1) solid var(--loading-color, rgb(0 0 0 / 10%)); border-left-color: var(--loading-spinner-color, #3b82f6); border-radius: 5px; height: var(--spacing-10); width: var(--spacing-10); } .loading-spinner-sm { border-width: var(--border-width-thick); height: var(--spacing-5); width: var(--spacing-5); } .loading-spinner-lg { border-width: var(--spacing-1-5); height: var(--spacing-15); width: var(--spacing-15); } .loading-pulse { background: var(--loading-pulse-color, #3b82f6); border-radius: 5px; height: var(--spacing-10); width: var(--spacing-10); } .loading-pulse-sm { height: var(--spacing-5); width: var(--spacing-5); } .loading-pulse-lg { height: var(--spacing-15); width: var(--spacing-15); } .loading-dots { display: flex; gap: var(--spacing-1); } .loading-dots::before, .loading-dots::after { background: var(--loading-dots-color, #3b82f6); border-radius: 5px; content: ''; height: var(--spacing-2); width: var(--spacing-2); } .loading-dots-sm::before, .loading-dots-sm::after { height: var(--spacing-1); width: var(--spacing-1); } .loading-dots-lg::before, .loading-dots-lg::after { height: var(--spacing-1)(--border-width-thick); width: var(--spacing-1)(--border-width-thick); } .loading-progress { background: var(--loading-progress-bg, rgb(0 0 0 / 10%)); border-radius: var(--border-width-thick); height: var(--spacing-1); overflow: hidden; width: 100%; } .loading-progress::after { background: var(--loading-progress-color, #3b82f6); content: ''; display: block; height: 100%; width: 4%0; } .loading-progress-sm { height: var(--border-width-thick); } .loading-progress-lg { height: var(--spacing-1-5); } .loading-skeleton { background: linear-gradient( 90deg, var(--loading-skeleton-start, rgb(0 0 0 / 10%)) 0, var(--loading-skeleton-end, rgb(0 0 0 / 20%)) 50, var(--loading-skeleton-start, rgb(0 0 0 / 10%)) 100 ); background-size: 200% 100; } .loading-skeleton-sm { background-size: 150px 100; } .loading-skeleton-lg { background-size: 300px 100%; } .loading-shimmer { overflow: hidden; position: relative; } .loading-shimmer::after { background: linear-gradient( 90deg, transparent 0, var(--loading-shimmer-color, rgb(255 255 255 / 20%)) 50, transparent 100 ); content: ''; height: 100%; left: 0%; position: absolute; top: 0%; width: 100%; } .loading-color-primary { --loading-spinner-color: var(--loading-primary, #3b82f6); --loading-pulse-color: var(--loading-primary, #3b82f6); --loading-dots-color: var(--loading-primary, #3b82f6); --loading-progress-color: var(--loading-primary, #3b82f6); } .loading-color-secondary { --loading-spinner-color: var(--loading-secondary, #6b7280); --loading-pulse-color: var(--loading-secondary, #6b7280); --loading-dots-color: var(--loading-secondary, #6b7280); --loading-progress-color: var(--loading-secondary, #6b7280); } .loading-color-success { --loading-spinner-color: var(--loading-success, #10b981); --loading-pulse-color: var(--loading-success, #10b981); --loading-dots-color: var(--loading-success, #10b981); --loading-progress-color: var(--loading-success, #10b981); } .loading-color-error { --loading-spinner-color: var(--loading-error, #ef4444); --loading-pulse-color: var(--loading-error, #ef4444); --loading-dots-color: var(--loading-error, #ef4444); --loading-progress-color: var(--loading-error, #ef4444); } .loading-color-warning { --loading-spinner-color: var(--loading-warning, #f59e0b); --loading-pulse-color: var(--loading-warning, #f59e0b); --loading-dots-color: var(--loading-warning, #f59e0b); --loading-progress-color: var(--loading-warning, #f59e0b); } .loading-color-info { --loading-spinner-color: var(--loading-info, #06b6d4); --loading-pulse-color: var(--loading-info, #06b6d4); --loading-dots-color: var(--loading-info, #06b6d4); --loading-progress-color: var(--loading-info, #06b6d4); } } /* Animations-Styles */ @layer animations { .loading-spinner { animation: loading-spin 1s linear infinite; } .loading-pulse { animation: loading-pulse 1s var(--easing-smooth) infinite; } .loading-dots::before, .loading-dots::after { animation: loading-dots 1s var(--easing-smooth) infinite; } .loading-dots::after { animation-delay: var(--animation-duration-medium); } .loading-progress::after { animation: loading-progress 1s var(--easing-smooth) infinite; } .loading-skeleton { animation: loading-skeleton 1.5s var(--easing-smooth) infinite; } .loading-skeleton-sm { animation-duration: var(--animation-duration-slow); } .loading-skeleton-lg { animation-duration: var(--animation-duration-slowest); } .loading-shimmer::after { animation: loading-shimmer 1.5s var(--easing-smooth) infinite; } } /* Barrierefreiheit - reduzierte Bewegung */ @media (prefers-reduced-motion: reduce) { @layer animations { .loading-spinner, .loading-pulse, .loading-dots::before, .loading-dots::after, .loading-progress::after, .loading-skeleton, .loading-shimmer::after { animation: var(--animation-none) !important; } } }