Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

GPU Animations

ABCrimson edited this page Mar 7, 2026 · 1 revision

GPU Animations

All animations are GPU-composited, using only transform, opacity, and scale properties that run on the compositor thread.

Entry Animations with @starting-style

[data-command-dialog][data-state="open"] {
 @starting-style {
 opacity: 0;
 scale: 0.96;
 translate: 0 8px;
 }
 opacity: 1;
 scale: 1;
 translate: 0 0;
 transition:
 opacity 200ms linear(...),
 scale 250ms linear(...),
 translate 250ms linear(...),
 display 250ms allow-discrete;
}

@starting-style defines the initial animation state, enabling CSS-only entry animations without JavaScript.

Spring Easing via linear()

/* Critically-damped spring approximation */
--ease-spring: linear(
 0, 0.009, 0.035 2.1%, 0.141, 0.281 6.7%, 0.723 12.9%, 0.938 16.7%,
 1.017, 1.077, 1.121, 1.149 24.3%, 1.159, 1.163, 1.161, 1.154 29.9%,
 1.129 32%, 1.051 36.4%, 1.017 38.8%, 0.991, 0.977 43%, 0.974 44.8%,
 0.975 47.2%, 0.997 53.3%, 1.003 55.5%, 1.003 58.1%, 1 63.2%, 0.999 70.2%, 1
);

This linear() function approximates a physically-accurate spring with slight overshoot.

Scroll-Driven Animations

[data-command-list] {
 scroll-timeline: --list-scroll block;
}
/* Top fade — appears as you scroll down */
[data-command-list]::before {
 animation: fade-edge-top linear both;
 animation-timeline: --list-scroll;
 animation-range: 0px 24px;
}

Display Transitions

transition: display 250ms allow-discrete;

transition-behavior: allow-discrete allows smooth transitions for display: none ↔ display: block.

Performance Techniques

Technique CSS Property Purpose
Layer promotion will-change: transform Creates GPU layer
Rendering containment contain: layout style paint Isolates repaint boundaries
Off-screen skip content-visibility: auto Skips rendering for off-screen items
Intrinsic sizing contain-intrinsic-size: auto 44px Provides estimated size for skipped items

Reduced Motion

All animations are disabled when the user prefers reduced motion:

@media (prefers-reduced-motion: reduce) {
 * {
 animation-duration: 0.01ms !important;
 transition-duration: 0.01ms !important;
 }
}

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /