CommunityImagegithub.com

motion-and-hover-polish

Donnez à une interface un tempo commun et un petit vocabulaire de micro-interactions au survol et d'état : paliers de durée (tap/pop/hover/card/layout) pour CSS et Motion, échanges de swap, lignes dont la surbrillance s'agrandit, flèches de suivi, coups de pouce de chevron, soulèvements de carte sans translate, dégradés de bord de défilement, et échanges d'icônes/étiquettes pour les boutons de copie et de bascule. À utiliser lorsque les animations semblent incohérentes, les durées sont des nombres magiques dispersés, les survols ne changent que la couleur, ou qu'un produit semble plat ou inachevé. Déclenché sur : durée d'animation, timing de transition, état de survol, micro-interaction, polissage, retour de bouton de copie, icône de menu pour fermer, flèche retour, survol de carte, dégradé de défilement, jetons de mouvement, durées Framer Motion.

Qu'est-ce que motion-and-hover-polish ?

Cette compétence standardise les micro-interactions de survol et les durées d'animation dans les applications web, en fournissant un système de paliers de durée cohérent et des recettes de survol prêtes à l'emploi. Elle s'appuie sur deux principes fondamentaux : les durées forment une échelle unique (tap/pop/hover/card/layout) pour que l'œil perçoive un tempo partagé, et les survols modifient la géométrie des éléments de manière subtile plutôt que de simplement changer la couleur. La compétence propose des fichiers de référence en CSS Tailwind v4, en Motion (Framer Motion/WAAPI) et un composant React pour les échanges d'icônes et d'étiquettes. Elle inclut des recettes comme `hover-grow` pour les lignes de navigation, `trail` pour les flèches de suivi, `nudge` pour les chevrons, `lift` pour les cartes cliquables (sans translate), `scroll-fade` pour les bords de défilement, ainsi que `IconSwap` et `LabelSwap` pour les boutons de bascule. Des pièges sont documentés (comme les conflits avec les animations de Radix ou les masques de dégradé), et les bonnes pratiques incluent l'utilisation de `@media (hover: hover)` et le respect de `prefers-reduced-motion`. La compétence est déclenchée automatiquement lors de la détection de durées d'animation, de timings de transition, d'états de survol ou de micro-interactions qui semblent incohérents.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Adamparishspok/skills/tree/HEAD/skills/motion-and-hover-polish

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation


name: motion-and-hover-polish description: Donnez à une interface un tempo commun et un petit vocabulaire de micro-interactions au survol et d'état : paliers de durée (tap/pop/hover/card/layout) pour CSS et Motion, échanges de swap, lignes dont la surbrillance s'agrandit, flèches de suivi, coups de pouce de chevron, soulèvements de carte sans translate, dégradés de bord de défilement, et échanges d'icônes/étiquettes pour les boutons de copie et de bascule. À utiliser lorsque les animations semblent incohérentes, les durées sont des nombres magiques dispersés, les survols ne changent que la couleur, ou qu'un produit semble plat ou inachevé. Déclenché sur : durée d'animation, timing de transition, état de survol, micro-interaction, polissage, retour de bouton de copie, icône de menu pour fermer, flèche retour, survol de carte, dégradé de défilement, jetons de mouvement, durées Framer Motion. license: MIT

Paliers de mouvement et recettes de survol

Deux idées, éprouvées dans 17 prototypes d'applications :

  1. Les durées sont une échelle, pas un nombre par composant. L'œil lit un tempo partagé comme celui d'un seul produit. Les éléments plus petits se déplacent plus vite.
  2. Les survols modifient la géométrie, doucement. Une surbrillance qui grandit dans la ligne, une flèche qui arrive, un chevron qui s'incline vers sa destination, une étiquette qui roule vers son état suivant. Les survols qui ne changent que la couleur donnent l'impression d'un interrupteur qui bascule.

Fichiers

  • references/recipes.css : jetons @theme Tailwind v4 et recettes @utility.
  • references/timing.ts : les mêmes paliers pour Motion et WAAPI.
  • references/swap.tsx : IconSwap et LabelSwap (React).

Paliers

PaliermsPour
tap100une icône qui change, une pression
pop150un menu, une popover ou une infobulle qui s'ouvre
hover200une ligne ou un contrôle qui répond au pointeur
card300une carte qui se soulève, une liste qui se stabilise, un changement de page
layout500un panneau qui se réduit, la page qui se remet en page
  • Les entrées ralentissent (cubic-bezier(0.22,1,0.36,1)). Les sorties accélèrent et sont plus courtes d'un palier.
  • Lorsque deux éléments échangent leur place, celui qui sort part immédiatement et celui qui entre commence avec un délai de delay-handoff (50ms).
  • Les interpolations de valeurs (un compteur, une barre de progression, un tracé de graphique) peuvent être plus longues : l'œil suit les données.
  • Conservez les ressorts intentionnels.

Migration : associez chaque durée ad hoc au palier le plus proche.

Valeur ad hocPalier
0.12tap
0.15–0.18pop
0.2–0.24hover
0.28–0.35card
0.4–0.5layout

Attendez-vous à ce que le timing à l'écran change de moins de 20ms presque partout.

Recettes (une par élément)

  • hover-grow (lignes de navigation, liens) :
    • La surbrillance est un ::before qui commence en retrait (3 px sur 6 px) et transparent, puis gonfle jusqu'à occuper toute la ligne en fondu.
    • Elle apparaît aussi pour :focus-visible, data-state=open et aria-current=page.
    • Les designs carrés ou bruts (type Carbon) doivent conserver une surbrillance plate à la place.
  • trail (liens, "Parcourir les forfaits") :
    • Un glyphe de suivi à demi-échelle et transparent jusqu'à ce que le parent .group soit survolé ou focusé, grandissant depuis son bord avant.
    • trail-out (grandit depuis le coin inférieur gauche) plus arrow-up-right marque les liens qui quittent l'application.
  • nudge / nudge-back (chevrons, "Voir tout", liens retour) : une inclinaison de 2 px vers la destination.
  • lift (cartes cliquables) :
    • Un ton de surface plus clair et une ombre plus profonde, sur le palier card.
    • Jamais de translate : une carte qui saute sous le curseur déplace la chose visée.
  • scroll-fade (panneaux défilants) :
    • Dégradés de bord basés sur un masque, uniquement sur un côté qui peut encore défiler. Il est piloté par la timeline de défilement du conteneur lui-même et n'a besoin d'aucune couleur de fond.
    • Les navigateurs non pris en charge n'affichent simplement aucun dégradé.
  • IconSwap (menu en fermer, copier en vérifié, soleil en lune) :
    • Le glyphe sortant rétrécit, s'incline de −22° et disparaît en fondu avec un ease-in.
    • Le suivant suit après le délai de transfert.
    • Les deux restent montés, donc l'inversion se fait proprement en plein vol.
  • LabelSwap ("Copier le lien" en "Copié", "Réduire" en "Agrandir") :
    • Les deux étiquettes sont dans une seule cellule de grille, donc pas de saut de largeur.
    • L'étiquette cachée devient invisible via transition-discrete, donc les technologies d'assistance n'entendent que l'étiquette actuelle.

Pièges

  • scroll-fade sur un élément qui s'anime lui-même (menu Radix, popover ou contenu de select) remplace l'animation de sortie de cet élément. Radix attend une sortie qui ne se termine jamais, et le menu reste ouvert. Placez le dégradé sur un enfant défilant à l'intérieur.
  • scroll-fade masque aussi les bordures et les ombres. Ne le mettez pas sur une carte bordée ; placez-le sur le défileur intérieur.
  • Les utilitaires duration-* personnalisés dans Tailwind v4 doivent aussi définir --tw-duration, sinon une utilitaire transition-[...] sur le même élément gagne selon l'ordre de tri.
  • Les étapes de type nommé qui portent une hauteur de ligne (--text-meta--line-height) décalent chaque ligne convertie d'un pixel lors du remplacement de tailles arbitraires qui héritent du leading du parent. Donnez aux étapes intermédiaires aucune hauteur de ligne propre.
  • Limitez les survols derrière @media (hover: hover). Affichez le même état sur :focus-visible, et respectez prefers-reduced-motion (Motion : <MotionConfig reducedMotion="user">).

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Adamparishspok/skills

Make a website, web app or online store ready for AI agents. Scan it with Cloudflare's Agent Readiness checks, decide which checks apply to this kind of site, ship the discovery files and headers in priority order, and add the AI-first basics the scanner does not score (server-rendered content, JSON-LD, llms.txt). Covers robots.txt AI rules, Content Signals, sitemap, Markdown for Agents (Accept text/markdown), Link headers, API catalog, OAuth discovery, auth.md, MCP server card, A2A agent card, agent skills index, WebMCP, and commerce protocols (ACP, UCP, AP2, MPP, x402). Use when making a site AI-ready, agent-ready or AI-first, or fixing an isitagentready.com or Cloudflare Agent Readiness report. Triggers on: AI ready, agent ready, AI-first, agent readiness, isitagentready, AI Crawl Control, Markdown for Agents, text/markdown, llms.txt, GPTBot, ClaudeBot, AI crawlers, Content-Signal, ai-train, api-catalog, .well-known, oauth-protected-resource, auth.md, MCP server card, agent card, agent skills, WebMCP, a...

Adamparishspok/skills

Install a complete, lean favicon set on any website or web app — the five files modern browsers, iOS and Android actually use, one block of head markup added once in the root layout, and a check that every file resolves. Covers finding the public folder per framework, generating the set from one SVG (or from a RealFaviconGenerator package), dark-mode SVG icons, maskable manifest icons, cache busting and verification. Use when adding, replacing or auditing a favicon, app icon, apple-touch-icon or web manifest. Triggers on: favicon, favicon.ico, favicon.svg, apple-touch-icon, site.webmanifest, manifest.json, app icon, PWA icon, maskable icon, tab icon, RealFaviconGenerator.

Adamparishspok/skills

Consolidate several apps or prototypes onto one shared component library without flattening their looks. Covers finding duplicated local components (buttons, selects, fields, modals, pagers, toasts), making shared components token-sized so each suite or app sets its own measurements, mapping variant names, deciding what stays app-specific, and the tailwind-merge traps that silently break custom tokens. Use when several apps each grew their own Btn/Select/Modal, when a design system's components "don't fit" a second product, or when retheming a family of apps. Triggers on: shared component library, design system consolidation, duplicate components, retheme, suite of apps, shadcn retokened, token-driven components, cn tailwind-merge custom tokens, variant mapping.

Adamparishspok/skills

Build or migrate a UI's neutral palette (grounds, surfaces, lines, ink/text) as an OKLCH formula driven by a few inputs instead of dozens of hand-picked hex values, with light and dark themes, per-step ladder overrides, a fit script that reproduces existing colours, and a browser contrast audit. Use when creating a theme, adding dark mode, retinting a product, auditing text contrast, or consolidating several apps' palettes. Triggers on: palette, neutrals, grey ramp, dark mode, theme tokens, oklch, retint, hue, contrast audit, design tokens, Tailwind @theme colours.

Skills associés