Understanding CSS Custom Properties: ”-sd-animation: sd-fadeIn; –sd-duration: 0ms; –sd-easing: ease-in;”
Custom properties (CSS variables) have become an essential tool for writing flexible, maintainable styles. The snippet –sd-animation: sd-fadeIn; –sd-duration: 0ms; –sd-easing: ease-in; appears in many codebases and design systems as a compact way to configure animation behavior. This article explains what each part means, why you might use this pattern, and how to implement it effectively.
What these custom properties do
- –sd-animation: sd-fadeIn;
Defines a named animation variant.sd-fadeInwould typically map to a keyframes animation (or a shorthand class) that changes opacity and possibly transform values to produce a fade-in effect. - –sd-duration: 0ms;
Controls how long the animation runs.0mseffectively disables motion; the animated properties will jump to their final values instantly. Using a variable allows you to override duration easily across components. - –sd-easing: ease-in;
Sets the timing function that controls acceleration of the animation.ease-instarts slow and speeds up, giving a subtle, natural entrance.
Why use CSS variables for animation settings
- Theming & consistency: Define animation tokens once and reuse them across components for consistent motion language.
- Runtime overrides: Easily change animation timing or behavior with media queries (e.g., prefers-reduced-motion) or per-component overrides.
- Readability: Variables with clear names (like
–sd-duration) act as documentation for designers and developers. - Composability: Combine variables with utility classes or component styles to create flexible motion systems.
Example implementation
- Define keyframes and default tokens:
css
@keyframes sd-fadeIn {from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: translateY(0); }}
:root { –sd-animation: sd-fadeIn; –sd-duration: 300ms; –sd-easing: ease;}
- Apply variables in a component:
css
.card { animation-name: var(–sd-animation); animation-duration: var(–sd-duration); animation-timing-function: var(–sd-easing); animation-fill-mode: both;}
- Respect user motion preferences:
css
@media (prefers-reduced-motion: reduce) { :root { –sd-duration: 0ms; }}
- Override per-instance:
css
.card.fast { –sd-duration: 120ms; –sd-easing: ease-out;}
Common patterns and tips
- Use
animation-fill-mode: bothorforwardsto keep the end state visible. - Pair opacity and transform to get smoother, more performant animations (transform is GPU-accelerated).
- Avoid using zero durations unless you want to completely disable motion; instead, use very short durations for subtle effects.
- Provide semantic variable names when integrating into design systems (e.g.,
–motion-duration-enter,–motion-easing-expressive).
Troubleshooting
- If an animation doesn’t run, ensure
animation-namereferences a valid keyframes name and thatanimation-durationis greater than0ms. - Conflicting overrides can come from more-specific selectors—check cascade order when variables don’t take effect.
- When variables are undefined in a scoped context, provide sensible fallbacks with var() like
animation-duration: var(–sd-duration, 250ms);.
Conclusion
The trio –sd-animation, –sd-duration, and –sd-easing form a compact, powerful pattern for managing animations via CSS variables. They improve consistency, allow easy overrides, and help respect user preferences. Use them as tokens in your design system to make motion predictable and maintainable across your UI.
Leave a Reply