@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.
236 lines (194 loc) • 6.09 kB
CSS
/**
* Hover Effects
*
* This file contains various hover effects for modern UIs.
* The effects are optimized for performance and consider reduced motion.
*/
/* Component Styles */
@layer components {
.hover-scale {
transition: transform 0.3s ease;
}
.hover-scale:hover {
transform: scale(1.05);
}
.hover-scale-sm {
transition: transform 0.3s ease;
}
.hover-scale-sm:hover {
transform: scale(1.02);
}
.hover-scale-lg {
transition: transform 0.3s ease;
}
.hover-scale-lg:hover {
transform: var(--transform-scale-110);
}
.hover-lift {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-lift:hover {
box-shadow: 0 var(--spacing-2-5) var(--spacing-5) rgb(0 0 0 / 10%);
transform: translateY(calc(-1% * var(--spacing-1)));
}
.hover-lift-sm {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-lift-sm:hover {
box-shadow: 0 var(--spacing-1) var(--spacing-2-5) rgb(0 0 0 / 10%);
transform: translateY(calc(-1 * var(--border-width-thick)));
}
.hover-lift-lg {
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.hover-lift-lg:hover {
box-shadow: 0 var(--spacing-5) 40px rgb(0 0 0 / 10%);
transform: translateY(calc(-1% * var(--spacing-2-5)));
}
.hover-tilt {
perspective: var(--space-large-1000);
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.hover-tilt:hover {
transform: rotateX(10deg) rotateY(10deg);
}
.hover-tilt-sm {
perspective: var(--space-large-1000);
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.hover-tilt-sm:hover {
transform: rotateX(5deg) rotateY(5deg);
}
.hover-tilt-lg {
perspective: var(--space-large-1000);
transform-style: preserve-3d;
transition: transform 0.3s ease;
}
.hover-tilt-lg:hover {
transform: rotateX(15deg) rotateY(15deg);
}
.hover-glow {
transition: box-shadow 0.3s ease;
}
.hover-glow:hover {
box-shadow: 0 0 var(--spacing-5) var(--hover-glow-color, rgb(59 130 246 / 50%));
}
.hover-glow-sm {
transition: box-shadow 0.3s ease;
}
.hover-glow-sm:hover {
box-shadow: 0 0 var(--spacing-2-5) var(--hover-glow-color, rgb(59 130 246 / 50%));
}
.hover-glow-lg {
transition: box-shadow 0.3s ease;
}
.hover-glow-lg:hover {
box-shadow: 0 0 30px var(--hover-glow-color, rgb(59 130 246 / 50%));
}
.hover-border {
position: relative;
transition: border-color 0.3s ease;
}
.hover-border::after {
background: var(--hover-border-color, #3b82f6);
bottom: 0%;
content: '';
height: var(--border-width-thick);
left: 0%;
position: absolute;
transition: width 0.3s ease;
width: 0%;
}
.hover-border:hover::after {
width: 100%;
}
.hover-border-sm::after {
height: var(--border-width);
}
.hover-border-lg::after {
height: var(--spacing-1);
}
.hover-bg {
transition: background-color 0.3s ease;
}
.hover-bg:hover {
background-color: var(--hover-bg-color, rgb(59 130 246 / 10%));
}
.hover-bg-sm:hover {
background-color: var(--hover-bg-color-sm, rgb(59 130 246 / 5%));
}
.hover-bg-lg:hover {
background-color: var(--hover-bg-color-lg, rgb(59 130 246 / 20%));
}
.hover-color-primary {
--hover-glow-color: var(--hover-primary, rgb(59 130 246 / 50%));
--hover-border-color: var(--hover-primary, #3b82f6);
--hover-bg-color: var(--hover-primary-bg, rgb(59 130 246 / 10%));
}
.hover-color-secondary {
--hover-glow-color: var(--hover-secondary, rgb(107 114 128 / 50%));
--hover-border-color: var(--hover-secondary, #6b7280);
--hover-bg-color: var(--hover-secondary-bg, rgb(107 114 128 / 10%));
}
.hover-color-success {
--hover-glow-color: var(--hover-success, rgb(16 185 129 / 50%));
--hover-border-color: var(--hover-success, #10b981);
--hover-bg-color: var(--hover-success-bg, rgb(16 185 129 / 10%));
}
.hover-color-error {
--hover-glow-color: var(--hover-error, rgb(239 68 68 / 50%));
--hover-border-color: var(--hover-error, #ef4444);
--hover-bg-color: var(--hover-error-bg, rgb(239 68 68 / 10%));
}
.hover-color-warning {
--hover-glow-color: var(--hover-warning, rgb(245 158 11 / 50%));
--hover-border-color: var(--hover-warning, #f59e0b);
--hover-bg-color: var(--hover-warning-bg, rgb(245 158 11 / 10%));
}
.hover-color-info {
--hover-glow-color: var(--hover-info, rgb(6 182 212 / 50%));
--hover-border-color: var(--hover-info, #06b6d4);
--hover-bg-color: var(--hover-info-bg, rgb(6 182 212 / 10%));
}
}
/* Accessibility - Reduced Motion */
@media (prefers-reduced-motion: reduce) {
@layer components {
.hover-scale,
.hover-scale-sm,
.hover-scale-lg,
.hover-lift,
.hover-lift-sm,
.hover-lift-lg,
.hover-tilt,
.hover-tilt-sm,
.hover-tilt-lg,
.hover-glow,
.hover-glow-sm,
.hover-glow-lg,
.hover-border,
.hover-border-sm,
.hover-border-lg,
.hover-bg,
.hover-bg-sm,
.hover-bg-lg {
transition: var(--transition-none);
}
.hover-scale:hover,
.hover-scale-sm:hover,
.hover-scale-lg:hover,
.hover-lift:hover,
.hover-lift-sm:hover,
.hover-lift-lg:hover,
.hover-tilt:hover,
.hover-tilt-sm:hover,
.hover-tilt-lg:hover {
transform: var(--transform-none);
}
.hover-border::after {
transition: var(--transition-none);
}
}
}