Instant
100 ms · opacityPercezione istantanea senza transizione spaziale. Ideale per badge e tooltip.
La grammatica del movimento Qoovex: vivo ma calmo, semantico, interrompibile e comprensibile anche con movimento ridotto.
@qoovex/ui/styles/base.css · @qoovex/ui/lib/motionQuattro ruoli semantici: la durata descrive il motivo della transizione, non il componente. Le proprietà restano esplicite — nessun ruolo autorizza transition-all.
--motion-duration-instantPercezione immediata e opacity breve senza latenza apparente.
Da evitare: Movimento spaziale e lifecycle di superficie.
--motion-duration-feedbackHover fine-pointer, press e risposta tattile locale.
Da evitare: Stato persistente e attese asincrone.
--motion-duration-stateContinuità tra checked, selected, expanded e stato reale.
Da evitare: Entrata o uscita di overlay.
--motion-duration-surfacePresence, distanza spaziale e orientamento tra superfici.
Da evitare: Input frequente e feedback di controllo.
Due curve che coprono l'intera gamma: standard per feedback diretto, emphasized per presenza spaziale. Entrambe favoriscono decelerazione naturale.
--ease-standardcubic-bezier(0.2, 0, 0, 1)Feedback e cambi di stato ordinari. Risposta controllata e diretta.
--ease-emphasizedcubic-bezier(0.16, 1, 0.3, 1)Decelerazione più leggibile per presence e distanza spaziale.
Controlla la preferenza di preview, esegui, inverti o ripeti rapidamente l'input. I quattro specimen semantici condividono lo stesso stato reale ma applicano ruoli differenti; gli altri esempi isolano easing e consumer runtime.
Percezione istantanea senza transizione spaziale. Ideale per badge e tooltip.
Risposta locale alla pressione del cursore o del tocco. Hover attivo solo su pointer fine.
Continuità tra stati: se invertito durante il moto, retargetta dalla posizione corrente senza scatti.
Decelerazione enfatizzata per orientamento spaziale. Lifecycle e presence rispettati in uscita.
Ogni interazione attraversa quattro fasi. La fase osservata non sostituisce lo stato del prodotto: serve a verificare causalità, retargeting e corrispondenza finale.
Come usare i token nei componenti. CSS è la scelta predefinita; resolveMotionTransition serve solo quando il consumer ha bisogno di valori numerici a runtime.
.my-element {
transition-property: opacity, transform;
transition-duration:
var(--motion-duration-instant),
var(--motion-duration-state);
transition-timing-function:
var(--ease-standard),
var(--ease-standard);
}
@media (prefers-reduced-motion: reduce) {
.my-element {
transition-property: opacity;
transition-duration:
var(--motion-duration-feedback);
}
}import {
resolveMotionTransition
} from "@qoovex/ui/lib/motion";
const styles = getComputedStyle(el);
const t = resolveMotionTransition(
styles,
"state", // ruolo durata
"standard", // curva easing
prefersReduced
);
// → { duration: 0.2, ease: [0.2, 0, 0, 1] }transform spaziale — cambia solo colore, opacity o proprietà non spaziali.--motion-duration-feedback per le transizioni residue.{ duration: 0 } quando reduced è attivo.