Article: in data-sd-animate=
This title appears to be incomplete or contains HTML markup that interrupts the phrase. I’ll assume you want an article explaining the use of the HTML attribute shown—specifically the data-sd-animate attribute inside a span—and provide examples and best practices for using data- attributes for animation.
What is data-sd-animate?
data-sd-animate is a custom data attribute (an example of HTML data- attributes) that developers can use to store animation-related metadata on elements—here shown on a element. Browsers ignore unknown data- attributes, but JavaScript can read them (via dataset) and trigger animations or behaviors accordingly.
Why use data- attributes for animation?
- Separation of concerns: Keeps HTML markup declarative while JavaScript handles behavior.
- Flexibility: Store animation names, durations, delays, triggers, or presets directly on elements.
- Progressive enhancement: Pages remain valid and functional when JavaScript is unavailable.
How to use it — examples
1) Simple usage: store an animation name
HTML:
<span data-sd-animate=“fade-in”>Hello</span>
JavaScript:
document.querySelectorAll(’[data-sd-animate]’).forEach(el => {const name = el.dataset.sdAnimate; // “fade-in” el.classList.add(anim-${</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #1F2328; --shiki-dark: #E6EDF3;">name</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #0A3069; --shiki-dark: #A5D6FF;">});});
CSS:
.anim-fade-in { animation: fadeIn 0.6s ease both; }@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
2) With parameters (duration, delay)
HTML:
<span data-sd-animate=“slide-up” data-sd-duration=“400” data-sd-delay=“200”>Hi</span>
JavaScript:
document.querySelectorAll(’[data-sd-animate]’).forEach(el => { const name = el.dataset.sdAnimate; const duration = el.dataset.sdDuration || 300; const delay = el.dataset.sdDelay || 0; el.style.animationDuration = ${</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #1F2328; --shiki-dark: #E6EDF3;">duration</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #0A3069; --shiki-dark: #A5D6FF;">}ms; el.style.animationDelay = ${</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #1F2328; --shiki-dark: #E6EDF3;">delay</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #0A3069; --shiki-dark: #A5D6FF;">}ms; el.classList.add(anim-${</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #1F2328; --shiki-dark: #E6EDF3;">name</span><span class="text-[var(--sdm-c,inherit)] dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]" style="--sdm-c: #0A3069; --shiki-dark: #A5D6FF;">});});
3) Triggering on scroll
Use IntersectionObserver to start animations when elements enter viewport.
const io = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const el = entry.target; el.classList.add(‘in-view’); io.unobserve(el); } });});document.querySelectorAll(’[data-sd-animate]’).forEach(el => io.observe(el));
CSS:
[data-sd-animate] { opacity: 0; transform: translateY(10px); transition: opacity .4s, transform .4s; }[data-sd-animate].in-view { opacity: 1; transform: translateY(0); }
Best practices
- Use clear attribute names and values (e.g., “fade-in”, “slide-left”).
- Keep animation durations reasonable for accessibility.
- Respect prefers-reduced-motion by disabling nonessential animations:
@media (prefers-reduced-motion: reduce) { [data-sd-animate] { transition: none; animation: none; }}
- Avoid overusing inline styles; prefer classes for maintainability.
Accessibility considerations
- Provide alternatives or disable animations for users with motion sensitivity.
- Ensure animated content remains readable and does not interfere with screen readers.
Conclusion
Using custom data attributes like data-sd-animate on span elements is a clean, flexible pattern to declaratively mark elements for animation while keeping behavior in JavaScript. It supports progressive enhancement, easy parameterization, and works well with modern APIs like IntersectionObserver.
Leave a Reply