CommunityImagengithub.com

Motion y ajustes de hover

Proporciona una interfaz con un tempo compartido y un pequeño vocabulario de microinteracciones de hover y estado: duraciones escalonadas (tap/pop/hover/card/layout) para CSS y Motion, intercambios con hand-off, filas cuyo resaltado crece, flechas finales, empujones de chevron, elevaciones de tarjeta sin translate, desvanecimientos en bordes de scroll, e intercambios de icono/etiqueta para botones de copia y alternancia. Útil cuando las animaciones se sienten inconsistentes, las duraciones son números mágicos dispersos, los hovers solo cambian de color, o un producto se siente plano o sin terminar. Se activa con: duración de animación, temporización de transición, estado hover, microinteracción, pulido, feedback de botón de copia, icono de menú para cerrar, flecha atrás, hover de tarjeta, desvanecimiento de scroll, tokens de movimiento, duraciones de Framer Motion.

¿Qué es Motion y ajustes de hover?

Esta habilidad estandariza las duraciones de animación y las microinteracciones de hover a través de cinco niveles de duración (tap, pop, hover, card, layout) que se aplican de manera consistente en CSS, Framer Motion y WAAPI. Proporciona recetas prácticas para efectos de hover que transforman la geometría (no solo el color), como resaltados que crecen, flechas que aparecen, chevrones que se inclinan y etiquetas que se deslizan, creando una sensación de producto pulido y coherente. Incluye componentes React como IconSwap y LabelSwap para transiciones fluidas de iconos y etiquetas, con un hand-off de 50ms entre elementos que entran y salen. También aborda trampas comunes como el desvanecimiento de scroll en elementos animados, la prioridad de utilidades de Tailwind v4, y la accesibilidad mediante el respeto de prefers-reduced-motion y el uso de :focus-visible. Está diseñada para aplicaciones web con React, Tailwind CSS y/o Framer Motion, y proporciona archivos de referencia con tokens CSS y TypeScript.

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

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación


name: motion-and-hover-polish description: Proporciona una interfaz con un tempo compartido y un pequeño vocabulario de microinteracciones de hover y estado: duraciones escalonadas (tap/pop/hover/card/layout) para CSS y Motion, intercambios con hand-off, filas cuyo resaltado crece, flechas finales, empujones de chevron, elevaciones de tarjeta sin translate, desvanecimientos en bordes de scroll, e intercambios de icono/etiqueta para botones de copia y alternancia. Útil cuando las animaciones se sienten inconsistentes, las duraciones son números mágicos dispersos, los hovers solo cambian de color, o un producto se siente plano o sin terminar. Se activa con: duración de animación, temporización de transición, estado hover, microinteracción, pulido, feedback de botón de copia, icono de menú para cerrar, flecha atrás, hover de tarjeta, desvanecimiento de scroll, tokens de movimiento, duraciones de Framer Motion. license: MIT

Niveles de movimiento y recetas de hover

Dos ideas, probadas en 17 aplicaciones prototipo:

  1. Las duraciones son una escala, no un número por componente. El ojo lee un tempo compartido como un solo producto. Las cosas más pequeñas se mueven más rápido.
  2. Los hovers mueven la geometría, suavemente. Un resaltado que crece dentro de la fila, una flecha que llega, un chevron que se inclina hacia donde va, una etiqueta que rueda hacia su siguiente estado. Los hovers que solo cambian de color se leen como un interruptor que se acciona.

Archivos

  • references/recipes.css: Tokens @theme y recetas @utility de Tailwind v4.
  • references/timing.ts: Los mismos niveles para Motion y WAAPI.
  • references/swap.tsx: IconSwap y LabelSwap (React).

Niveles

NivelmsPara
tap100un icono que cambia, una pulsación
pop150apertura de un menú, popover o tooltip
hover200una fila o control respondiendo al puntero
card300una tarjeta elevándose, una lista asentándose, un cambio de página
layout500un panel colapsando, la página refluyendo
  • Las entradas se desaceleran (cubic-bezier(0.22,1,0.36,1)). Las salidas aceleran y se ejecutan un nivel más corto.
  • Cuando dos cosas intercambian lugares, la que sale se va de una vez y la que entra comienza delay-handoff (50ms) después.
  • Los interpolaciones de valores (un contador, un relleno de barra, el dibujo de una línea de gráfico) pueden durar más: el ojo sigue los datos.
  • Mantén los springs deliberados.

Migración: asigna cada duración ad-hoc al nivel más cercano.

Valor ad-hocNivel
0.12tap
0.15–0.18pop
0.2–0.24hover
0.28–0.35card
0.4–0.5layout

Espera que la temporización en pantalla cambie en menos de 20ms en casi todas partes.

Recetas (una por elemento)

  • hover-grow (filas de navegación, filas de enlaces):
    • El resaltado es un ::before que comienza insertado (3px por 6px) y transparente, luego se expande hasta la fila completa mientras se desvanece.
    • También se muestra para :focus-visible, data-state=open y aria-current=page.
    • Los diseños cuadrados o brutalistas (tipo Carbon) deben mantener un resaltado plano en su lugar.
  • trail (filas de enlaces, "Explorar planes"):
    • Un glifo final a media escala y transparente hasta que el padre .group se pasa el cursor o se enfoca, creciendo desde su borde delantero.
    • trail-out (crece desde la esquina inferior izquierda) más arrow-up-right marcan los enlaces que salen de la aplicación.
  • nudge / nudge-back (chevrones, "Ver todo", enlaces de retorno): una inclinación de 2px hacia el destino.
  • lift (tarjetas clickeables):
    • Un paso de superficie más claro y un paso de sombra más profundo, durante el nivel card.
    • Nunca usar translate: una tarjeta que salta bajo el cursor mueve lo que se está apuntando.
  • scroll-fade (paneles desplazables):
    • Desvanecimientos de borde basados en máscara, solo en el lado que aún puede desplazarse. Se impulsa por la propia línea de tiempo de desplazamiento del contenedor y no necesita color de fondo.
    • Los navegadores no compatibles simplemente no muestran desvanecimiento.
  • IconSwap (menú a cerrar, copiar a verificado, sol a luna):
    • El glifo saliente se encoge, se inclina −22° y se desvanece con una aceleración.
    • El entrante sigue después del retardo de hand-off.
    • Ambos permanecen montados, por lo que se revierte limpiamente a medio vuelo.
  • LabelSwap ("Copiar enlace" a "Copiado", "Contraer" a "Expandir"):
    • Ambas etiquetas se sientan en una celda de cuadrícula, por lo que no hay salto de ancho.
    • La etiqueta oculta se vuelve invisible mediante transition-discrete, así que la tecnología de asistencia solo escucha la actual.

Trampas

  • scroll-fade en un elemento que se anima a sí mismo (menú Radix, contenido de popover o select) reemplaza la animación de salida de ese elemento. Radix espera una salida que nunca termina, y el menú permanece abierto. Pon el desvanecimiento en un hijo desplazable dentro.
  • scroll-fade también enmascara bordes y sombras. No lo pongas en una tarjeta con borde; ponlo en el desplazador interior.
  • Las utilidades de duration-* personalizadas en Tailwind v4 también deben establecer --tw-duration, o una utilidad transition-[…] en el mismo elemento gana dependiendo del orden de ordenación.
  • Los pasos de tipo nombrados que llevan una altura de línea (--text-meta--line-height) desplazan cada línea convertida en un píxel al reemplazar tamaños arbitrarios que heredaban el interlineado del padre. Da a los pasos intermedios ninguna altura de línea propia.
  • Protege los hovers detrás de @media (hover: hover). Muestra el mismo estado en :focus-visible, y respeta 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 relacionados