Community이미지github.com

모션 계층 및 호버 레시피

인터페이스에 통일된 템포와 미세한 호버 및 상태 전환 상호작용(탭, 팝, 호버, 카드, 레이아웃 지속 시간 계층, 스와프 핸드오프, 하이라이트가 자라는 행, 후행 화살표, 슬쩍 밀기, translate 없는 카드 리프트, 스크롤 가장자리 페이드, 복사/토글 버튼의 아이콘/레이블 스왑)을 제공합니다. 애니메이션이 일관되지 않거나, 지속 시간이 흩어진 매직 넘버이거나, 호버가 단순히 색상만 바꾸거나, 제품이 밋밋하거나 완성되지 않은 느낌이 들 때 사용하세요.

모션 계층 및 호버 레시피란 무엇인가요?

이 스킬은 CSS 및 Framer Motion 애니메이션에서 통일된 템포와 일관된 미세 상호작용 레시피(호버, 리프트, 스크롤 페이드, 아이콘/레이블 스왑 등)를 제공합니다. '지속 시간은 구성 요소별 숫자가 아닌 계층(scale)'이라는 핵심 아이디어를 기반으로, 탭(100ms), 팝(150ms), 호버(200ms), 카드(300ms), 레이아웃(500ms)의 5단계 지속 시간 계층을 정의합니다. 이를 통해 모든 애니메이션이 하나의 제품처럼 느껴지도록 하며, 기존의 임의적인 지속 시간 값을 가장 가까운 계층으로 마이그레이션할 수 있습니다. 또한 색상 변경에 그치지 않고 기하학을 부드럽게 움직이는 호버 효과(하이라이트가 행 안으로 자라기, 화살표 도착, 슬쩍 밀기 등)를 제공합니다. Tailwind v4 테마 토큰 및 유틸리티, Framer Motion/WAAPI 타이밍, React 스왑 컴포넌트를 포함하며, Radix 메뉴에서의 scroll-fade 충돌, Tailwind v4 사용자 정의 duration 유틸리티, 호버 게이팅, reduced motion 준수 등 주의할 점도 상세히 안내합니다. 이 스킬은 애니메이션 일관성, 호버 상태, 복사 버튼 피드백, 메뉴 아이콘 전환, 카드 호버, 스크롤 페이드와 같은 미세 상호작용을 개선하는 데 사용됩니다.

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

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

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

모션 계층 및 호버 레시피은(는) 무엇을 하나요?

17개의 프로토타입 앱에서 입증된 두 가지 아이디어:

  1. 지속 시간은 구성 요소별 숫자가 아니라 하나의 척도(scale)입니다. 눈은 공유된 템포를 하나의 제품으로 읽습니다. 작은 것은 더 빠르게 움직입니다.
  2. 호버는 기하학을 부드럽게 움직입니다. 행 안으로 자라는 하이라이트, 도착하는 화살표, 가는 방향으로 기울어지는 슬쩍 밀기, 다음 상태로 굴러가는 레이블. 색상만 바뀌는 호버는 스위치가 켜지듯 읽힙니다.

파일

  • references/recipes.css: Tailwind v4 @theme 토큰 및 @utility 레시피.
  • references/timing.ts: Motion 및 WAAPI를 위한 동일한 계층.
  • references/swap.tsx: IconSwap 및 LabelSwap (React).

계층

계층ms용도
tap100아이콘 교체, 누름
pop150메뉴, 팝오버 또는 툴팁 열기
hover200포인터에 반응하는 행 또는 컨트롤
card300카드 들림, 목록 안정화, 페이지 전환
layout500패널 접힘, 페이지 재배치
  • 진입은 ease-out(cubic-bezier(0.22,1,0.36,1))입니다. 종료는 ease-in이며 한 계층 더 짧게 실행됩니다.
  • 두 요소가 자리를 교환할 때, 나가는 요소는 즉시 사라지고 들어오는 요소는 delay-handoff(50ms) 후에 시작됩니다.
  • 값 트윈(카운터, 막대 채우기, 차트 선 그리기)은 더 오래 실행될 수 있습니다. 눈이 데이터를 따라가기 때문입니다.
  • 의도적인 스프링은 유지하세요.

마이그레이션: 모든 임시 지속 시간을 가장 가까운 계층에 매핑합니다.

임시 값계층
0.12tap
0.15–0.18pop
0.2–0.24hover
0.28–0.35card
0.4–0.5layout

거의 모든 곳에서 화면상 타이밍이 20ms 미만으로 변경될 것으로 예상됩니다.

레시피 (요소당 하나)

  • hover-grow (네비게이션 행, 링크 행):
    • 하이라이트는 ::before로 시작하여 처음에는 안쪽으로 들어가고(3px x 6px) 투명하다가, 페이드 인되면서 전체 행으로 부풀어 오릅니다.
    • :focus-visible, data-state=open 및 aria-current=page에도 표시됩니다.
    • 정사각형 또는 브루탈리스트 디자인(Carbon 스타일)은 대신 평평한 하이라이트를 유지해야 합니다.
  • trail (링크 행, "요금제 보기"):
    • 후행 글리프가 절반 크기로 투명하게 시작하여 부모 .group이 호버되거나 포커스될 때 앞쪽 가장자리에서 커집니다.
    • trail-out (왼쪽 아래에서 자람) + arrow-up-right는 앱을 떠나는 링크를 표시합니다.
  • nudge / nudge-back (슬쩍 밀기, "모두 보기", 뒤로 가기 링크): 목적지 쪽으로 2px 기울임.
  • lift (클릭 가능한 카드):
    • card 계층 동안 한 단계 더 밝은 표면과 한 단계 더 깊은 그림자.
    • 절대 translate 사용 금지: 커서 아래에서 튀는 카드는 사용자가 조준하는 대상을 움직입니다.
  • scroll-fade (스크롤 창):
    • 마스크 기반 가장자리 페이드, 스크롤 가능한 쪽에만 적용됩니다. 컨테이너 자체의 스크롤 타임라인으로 구동되며 배경색이 필요 없습니다.
    • 지원하지 않는 브라우저는 페이드 없이 표시됩니다.
  • IconSwap (메뉴에서 닫기로, 복사에서 체크로, 해에서 달로):
    • 나가는 글리프는 축소되고 -22° 기울이며 ease-in으로 페이드 아웃됩니다.
    • 들어오는 글리프는 핸드오프 지연 후에 따라옵니다.
    • 둘 다 마운트된 상태로 유지되므로 중간에 깔끔하게 역전됩니다.
  • LabelSwap ("링크 복사"에서 "복사됨"으로, "접기"에서 "펼치기"로):
    • 두 레이블이 하나의 그리드 셀에 위치하므로 너비 점프가 없습니다.
    • 숨겨진 레이블은 transition-discrete를 통해 invisible이 되어, 보조 기술이 현재 레이블만 인식합니다.

함정

  • scroll-fade를 자기 자신을 애니메이션하는 요소에 사용 (Radix 메뉴, 팝오버 또는 선택 콘텐츠)은 해당 요소의 종료 애니메이션을 대체합니다. Radix는 끝나지 않는 종료를 기다리며 메뉴가 열린 상태로 유지됩니다. 페이드는 내부의 스크롤 가능한 자식에 적용하세요.
  • scroll-fade는 테두리와 그림자도 마스킹합니다. 테두리가 있는 카드에 직접 적용하지 말고 내부 스크롤러에 적용하세요.
  • Tailwind v4의 사용자 정의 duration-* 유틸리티는 --tw-duration도 설정해야 합니다. 그렇지 않으면 같은 요소의 transition-[…] 유틸리티가 정렬 순서에 따라 우선합니다.
  • line-height를 전달하는 명명된 타입 스텝 (--text-meta--line-height)은 부모의 leading을 상속하는 임의 크기를 대체할 때 변환된 모든 줄을 1px씩 이동시킵니다. 중간 스텝에는 자체 line-height를 지정하지 마세요.
  • 호버를 @media (hover: hover) 뒤에 게이트하세요. :focus-visible에서 동일한 상태를 표시하고 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.

관련 스킬