Help us improve
Share bugs, ideas, or general feedback.
Writes CSS keyframe animations compatible with HyperFrames seeking. Covers pause-based timing, fill modes, stagger patterns via custom properties, and decorational loops.
npx claudepluginhub frankxai/claude-skills-library --plugin claude-skills-libraryHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-skills-library:css-animationsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
HyperFrames can seek CSS keyframe animations through its `css` runtime adapter. Use this for simple repeated motifs, background motion, shimmer, glow, masks, and non-sequenced decoration.
Writes CSS keyframe animations compatible with HyperFrames seeking. Covers pause-based timing, fill modes, stagger patterns via custom properties, and decorational loops.
Provides pure CSS animation expertise using keyframes, transitions, timing functions, and Tailwind utilities for lightweight, performant effects without JavaScript.
GSAP animation reference for HyperFrames compositions. Covers gsap.to(), from(), fromTo(), easing, stagger, timelines, and performance best practices.
Share bugs, ideas, or general feedback.
HyperFrames can seek CSS keyframe animations through its css runtime adapter. Use this for simple repeated motifs, background motion, shimmer, glow, masks, and non-sequenced decoration.
For scene choreography, GSAP is usually clearer. CSS animations work best when the motion belongs to one element and has a fixed duration.
data-start value so local animation time matches the clip.animation-duration and animation-iteration-count because the negative-delay fallback cannot represent unbounded duration in environments without WAAPI-backed CSS animations.animation-fill-mode: both so seeked states hold before and after active motion.The adapter discovers elements with computed animation-name, seeks their browser Animation handles when available, and falls back to pausing with negative animation-delay.
<div
id="pulse-ring"
class="clip pulse-ring"
data-start="0"
data-duration="4"
data-track-index="2"
></div>
<style>
.pulse-ring {
width: 280px;
height: 280px;
border: 4px solid rgba(255, 255, 255, 0.7);
border-radius: 50%;
animation-name: pulse-ring;
animation-duration: 1200ms;
animation-timing-function: cubic-bezier(0.2, 0, 0, 1);
animation-iteration-count: 3;
animation-fill-mode: both;
}
@keyframes pulse-ring {
from {
opacity: 0;
transform: scale(0.82);
}
35% {
opacity: 1;
}
to {
opacity: 0;
transform: scale(1.18);
}
}
</style>
Use CSS custom properties to avoid duplicating keyframes:
<div class="clip dots" data-start="1" data-duration="3" data-track-index="3">
<span style="--i: 0"></span>
<span style="--i: 1"></span>
<span style="--i: 2"></span>
</div>
<style>
.dots span {
display: inline-block;
width: 18px;
height: 18px;
margin-right: 10px;
border-radius: 50%;
background: currentColor;
animation: dot-pop 900ms ease-out both;
animation-delay: calc(var(--i) * 120ms);
}
@keyframes dot-pop {
from {
opacity: 0;
transform: translateY(18px) scale(0.75);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
</style>
top, left, width, or height when transforms work.After editing CSS animation compositions:
npx hyperframes lint
npx hyperframes validate
packages/core/src/runtime/adapters/css.ts.animation-fill-mode: https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode