Communitygithub.com

nusakutnjak/motion-feels

將網站動畫的「感覺」轉換為精確的速度與緩動曲線。人們用日常用語(「平靜」、「高級」、「像漂浮一樣」、「太跳躍」、「感覺廉價」)描述動畫,此技能將其對應至 14 種具名感覺,每種都包含 CSS、GSAP 與彈簧數值,無需理解何謂緩動曲線。也涵蓋何時不該動畫、介面與展示速度之別、品牌專屬動態調色盤、建置規則(效能、減少動畫、觸控)以及動畫審查清單。

motion-feels 是什麼?

此技能解決了設計師與開發者之間關於網站動畫的常見溝通障礙:非技術人員無法指定緩動曲線或毫秒數,但能精確描述他們想要的「感覺」。它提供一個共享的命名系統,將日常用語(如「高級」、「活潑」、「夢幻」)對應至 14 種預先定義的「感覺」,每種都附有精確的 CSS 與 GSAP 數值。這讓 AI 能直接將使用者的感受轉譯為可實施的動畫參數,無需來回猜測與修改。此技能適用於行銷、作品集、內容與電商網站,也涵蓋應用程式 UI,並提供完整的建置指南,包括何時減少動畫、如何建立品牌動態調色盤、效能最佳化與可及性考量。它以 SKILL.md 文件為基礎,為 AI 導入可用於 Claude Code、Cursor 或 Codex 等開發環境中的技能,協助團隊專注於創造直覺且高品質的動畫體驗。

相容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/nusakutnjak/motion-feels/tree/HEAD/skills/motion-feels

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

動畫感覺(Motion Feels)

大多數人無法說出緩動曲線的名稱,但他們清楚地知道某個東西應該有什麼感覺:平靜、活潑、昂貴、俏皮。這些詞彙可能對應數十條曲線,所以 AI 只能猜測,然後工作就變成一輪又一輪的「太快了」、「彈性小一點」。此技能為你和對方提供一組共享的名稱,每個名稱都與精確的數值綁定。他們談論感覺;你處理數字。

這是為網站設計的:行銷、作品集、內容和購物網站。對於應用程式或產品 UI,相同的感覺也適用;請使用每個速度範圍中較快的端點。

三個部分:

  • 感覺(Feel):如何移動。 一個速度加上一條緩動曲線。14 種感覺如下。
  • 效果(Effect):移動什麼。 遮罩揭示、視差、跑馬燈等。請參閱 references/feels.md。
  • 旋鈕(Dials): 調整感覺:速度、停止、過衝、交錯、距離、延遲、觸發、強度。

談論感覺,而不是曲線

對方可能不瞭解任何動畫術語,也不應該需要瞭解。

  • 永遠不要要求他們選擇 緩動、曲線、貝茲曲線或毫秒數。詢問感覺,用日常生活中的畫面來描述:「它應該要輕輕落地,像放下一個玻璃杯,還是稍微過衝然後穩定下來,像彈簧一樣?」
  • 用他們「看起來」的樣子描述感覺,而不是如何製作:「開始很快,然後滑行到停止」,不是「power4.out」。
  • 感覺名稱是選用的捷徑。 隨口提一個(「我會稱這種感覺為 奢華(Luxurious)」),這樣他們之後可以重複使用。永遠不要強求,也不要糾正他們的用詞。
  • 數字放進程式碼,再加上一句簡短的說明給建置或審查的人:「給開發者:1.2 秒,cubic-bezier(0.22, 1, 0.36, 1)。」當沒有人會從中建置時,例如對方只在選擇方向時,就省略那行說明。
  • 這個檔案裡的字是給你看的,不是給他們的。 旋鈕名稱和 CSS 術語不要出現在你的回覆中。說「結尾的小彈跳」(過衝)、「一個接一個」(交錯)、「它移動多遠」(距離)、「它多麼柔和地停止」(停止)、「一次移動多少」(強度)、「它從哪裡開始增長」(原點)、「給關閉動畫的人」(減少動畫)。
  • 一行翻譯,然後開始建置。 不要說教,也不要耽誤工作。唯一的例外是下方表格中標示「詢問」的詞,這時需要先問一個簡單的問題。
  • 觀看勝過描述。 當他們無法用言語表達時,提供示範頁面(assets/feels-demo.html,在任何瀏覽器中開啟)或建立一個快速的 A/B 切換讓他們選擇。

14 種感覺

感覺看起來像速度CSSGSAP
清脆(Crisp)一個電燈開關:瞬間,乾淨的停止150 毫秒cubic-bezier(0.33, 1, 0.68, 1)power2.out
快速(Snappy)快速彈出並穩固落地300 毫秒cubic-bezier(0.16, 1, 0.3, 1)expo.out
彈性(Springy)快速,稍微過衝,然後穩定600 毫秒彈簧,反彈 0.3(CSS 中使用 linear())無彈簧;最接近的是 back.out(1.2)
平滑(Smooth)一扇滑門:柔和開始,柔和停止500 毫秒cubic-bezier(0.65, 0, 0.35, 1)power2.inOut
柔和(Gentle)飄入並淡出至停止700 毫秒cubic-bezier(0.61, 1, 0.88, 1)sine.out
奢華(Luxurious)快速開始,長時間緩慢滑行至靜止1.2 秒cubic-bezier(0.22, 1, 0.36, 1)power4.out
漂浮(Floaty)一根羽毛:緩慢而均勻,沒有明確的開始或停止2 秒cubic-bezier(0.37, 0, 0.63, 1)sine.inOut
戲劇化(Dramatic)劇院幕簾:累積能量,衝刺,穩定下來1.2 秒cubic-bezier(0.87, 0, 0.13, 1)expo.inOut
上弦(Wind-up)彈弓:先向後拉,在終點過衝800 毫秒cubic-bezier(0.68, -0.6, 0.32, 1.6)back.inOut(1.7)
彈出(Pop)跳過終點然後回來一次450 毫秒cubic-bezier(0.34, 1.56, 0.64, 1)back.out(1.7)
彈性(Elastic)果凍:搖晃幾次,然後穩定1 秒linear() 來自 elastic.outelastic.out(1, 0.3)
反彈(Bounce)球落地900 毫秒linear() 來自 bounce.outbounce.out
機械(Mechanical)輸送帶:全程相同速度1 秒linearnone
階梯(Stepped)翻頁書:逐幀跳躍900 毫秒steps(6)steps(6)

一個感覺在任何速度下都保持其曲線形狀:「400 毫秒的 Springy」是更快的 Springy 形狀。在純 CSS 中,彈簧、彈性與反彈是從曲線中取樣的 linear() 列表;即用即貼的數值在 references/feels.md(「即用即貼程式碼」)中。Spring「彈性」數值是 SwiftUI 和 Motion 使用的 0–1 數值(阻尼比 = 1 − 彈性)。

如何運作

  1. 首先檢查元素: 它被看見的頻率,以及它是介面的一部分還是展示性動畫(下方「選擇感覺之前」)。這可能意味著減少動畫,或不動畫。
  2. 翻譯 他們的用語為感覺 + 旋鈕 + 效果,使用下方「日常用語」表格。如果兩三種感覺都符合,問一個簡單的問題(或顯示 A/B 切換)。
  3. 在建置前用一句簡單的話說明計畫,例如:「標題行會在你滾動到它們時優雅地向上滑入並緩慢停止,只發生一次(感覺:奢華)。」他們可以在任何東西建置之前重新導向。
  4. 建置 時將持續時間、延遲和緩動放在 CSS 變數或一個設定物件中(--motion-dur, --motion-ease, --motion-stagger),這樣每次調整都只是改變一個數字。遵循「建置規則」。
  5. 回報 用簡單的詞語,同時附上給開發者的數值。對於變更,顯示變更前 → 變更後:「慢一點:1.2 秒 → 1.8 秒」。保留先前的數值,這樣「返回」就能精確還原。
  6. 保持一致: 一旦網站的感覺確定後,建議將其儲存為專案設計代幣中的動態調色盤(如下),這樣每個區段移動方式都相同。

整個網站的動態調色盤

一個好的網站使用 2 或 3 種感覺,而不是 14 種:一種用於介面部分,一種用於展示時刻,可能還有一種強調色。當某人完全無法描述動畫時,請他們用三個詞描述品牌,然後一行話提出一個調色盤。

品牌感覺像展示介面強調色
平靜、可信賴、關懷(健康、金融、法律)柔和清脆—
高級、編輯風格(時尚、建築、飯店)奢華清脆第一次載入時用戲劇化
大膽、快速、科技感(新創、SaaS、運動)快速清脆彈出
友善、俏皮(兒童、食品、消費型應用程式)彈性快速彈出或反彈
創意、表現力(工作室、作品集、代理商)奢華或戲劇化快速上弦
夢幻、自然(健康、美容、冥想)漂浮用於循環,柔和用於內容清脆—
復古、原始(遊戲、音樂、粗獷風格)階梯清脆機械跑馬燈

選擇感覺之前

它被看見的頻率是多少?

令人愉悅一次的動畫,在第十次時就會成為干擾。讓動畫量與訪客遇到該元素的頻率相匹配。

頻率範例動畫
每頁、每次訪問導航連結、頁首、按鈕、頁尾連結、表單欄位小而快:清脆,或僅改變顏色。鍵盤焦點應立即顯示焦點環,無任何移動。這些元素的進入動畫(例如導航在載入時滑入)僅在第一次頁面檢視時播放。
每次點擊頁面切換短:600 毫秒或更少,即使品牌是緩慢且高級的
每次頁面英雄區塊、區段揭示、案例研究卡片、統計數字計數使用完整感覺。滾動揭示只播放一次,不會在你每次往回滾動時再次播放。
每次訪問載入介紹、首次載入的英雄時刻為戲劇化和愉悅感留出空間。載入器僅在第一次頁面檢視時執行。

調色盤的強調色放在結果上,而不是控制項上:加入購物車的按下動作保持快速(清脆),購物車計數才是彈出的東西。

當有人要求在每個頁面都出現的元素上使用緩慢的感覺時,建置快速版本並用一句話說明如何切換:「導航連結在每個頁面上都有,所以我讓它們保持快速;慢速版本只需改變一個數字。」不要等待回答;由他們決定。

介面部分還是展示動畫?

  • 介面部分: 訪客正在嘗試做某事。導航下拉選單、行動選單、分頁、手風琴、模態視窗、工具提示、表單回饋、篩選器。將它們保持在 300 毫秒或更短,無論是哪種感覺;行動選單和模態視窗可以到 400 毫秒。退出速度約為進入速度的 75%:將較短的持續時間放在關閉狀態上。
  • 展示動畫: 營造氣氛。英雄區塊、區段揭示、圖片揭示、跑馬燈、背景循環、首次載入時刻。感覺本身的速度適用,較長也沒問題。

依元素預設(當沒有感覺提供時)

這裡的速度會取代感覺本身的速度。任何回饋(「感覺廉價」、「太有彈性」)都會覆蓋這些預設值。

元素感覺速度
按鈕、連結、切換、懸停、工具提示清脆150 毫秒
導航下拉選單、分頁、卡片懸停快速250 毫秒
手風琴、常見問題平滑300 毫秒
行動選單、模態視窗、抽屜、面板彈性400 毫秒
拖放彈性600 毫秒
投影片、輪播、在螢幕上移動的東西平滑500 毫秒
文字和圖片揭示(淡入並向上 24 像素,交錯 60–80 毫秒)調色盤的展示感覺;無提示時用快速感覺自己的
頁面切換平滑600 毫秒
英雄時刻、首次載入戲劇化1.2 秒
背景循環、環境形狀漂浮2 秒
成功狀態、徽章彈出450 毫秒
載入器、跑馬燈、滾動驅動動畫機械視需要

日常用語

使用這些來翻譯。左欄是人們實際說的話;都不需要動畫知識。在較長的對話中,每個翻譯顯示一次,然後默默應用。

用語 → 感覺

他們說解讀為何時詢問
高級、昂貴、優雅、高檔、奢華、「像雜誌一樣」、「緩慢而自信」奢華—
平滑、流暢、如絲、無縫、絲滑、「滑行」平滑(橫向移動)或 柔和(出現)元素不明顯時:「均勻地從頭滑到尾,還是柔和地到達並淡出至停止?」
柔軟、平靜、放鬆、安靜、舒適、溫暖、「不花俏」柔和—
微妙、幾乎不存在、「不想讓人注意到」清脆(介面)或 柔和(內容)—
夢幻、輕盈、漂浮、無重、「像羽毛一樣」、「像在水下一樣」漂浮—
快速、迅速、反應靈敏、即時、點擊感強、緊湊、「像電燈開關」清脆(小東西)或 快速(較大的東西)大小不明確
活潑、有活力、大膽、自信、強烈、「落地有力」、「有態度」快速—
自然、物理感、有生命、「像手機應用程式」、「像真實物體」彈性—
有趣、俏皮、可愛、友善、調皮、快樂彈出、彈性 或 彈性幾乎總是:「稍微跳過終點,柔和的彈簧穩定,還是果凍般的搖晃?」
有彈性的反彈(落地並反彈)或 彈出 / 彈性(過衝,穩定)總是:「像球落地一樣反彈,還是稍微過衝然後穩定?」
果凍、搖晃、橡膠感、軟爛、抖動彈性—
電影感、史詩、「像電影一樣」、有力、沉重、「令人驚嘆的時刻」、大揭示戲劇化—
卡通感、「先上緊發條」、「像彈弓一樣」上弦—
機器人感、恆定、穩定、「像輸送帶」、股票行情機械—
復古、斷續、停格動畫、像素、故障感、「像舊電玩遊戲」、翻頁書階梯—
現代、酷、不錯、乾淨、「讓它突出」、「讓它好看」、「加一些動畫」、「讓它活起來」本身沒有意義總是:用簡單的話提供 3 種適合情境的感覺,或用三個詞詢問品牌(「讓它突出」可能指的是 Pop 感覺,或只是「更顯眼」)

回饋 → 旋鈕

他們說改變
太快、匆忙、「一眨眼就錯過了」、「我看不到它」速度 × 1.5
太慢、遲鈍、延遲、「花好久」、「我在等它」速度 ÷ 1.5。如果是介面部分,也檢查 300 毫秒的限制。
突然、粗糙、不平順、「砰的一聲就位」、「停止得太突然」停止:更柔和,沿 power2.out → power3.out → power4.out → expo.out 前進一步(CSS 數值在 references/feels.md)
軟爛、「結尾拖沓」、「爬行」、「花太久才穩定」停止:更乾脆(更短的尾部),或更快
微弱、無生命、「需要更多活力」、「沒落地」停止更乾脆 + 速度 ÷ 1.5,或改用快速
太有彈性、「太多了」、廉價、幼稚、「太過頭」過衝降低一階:Pop cubic-bezier(0.34, 1.56, 0.64, 1) → 一點點 cubic-bezier(0.34, 1.4, 0.64, 1) → 無(快速)
感覺廉價通常是移動太多:降低距離和降低過衝;如果很慢,速度 ÷ 1.5
跳躍、抖動、「不知從哪突然出現」它是從無到有長大或過衝:從 scale(0.95) 開始(建置規則),過衝降低一階,距離降低
僵硬、機器人感、死氣沉沉、「需要更多生命力」過衝提高一階,或改用彈性
平淡、無聊、「什麼都沒發生」、「我沒注意到」提高交錯,或提高距離
忙碌、分心、「太多事情同時發生」、惱人降低強度,降低交錯。惱人通常意味著它被看見的頻率太高:檢查「它被看見的頻率是多少?」
「讓我想吐」、「讓我覺得不舒服」移除視差、大型縮放和長距離移動;檢查減少動畫的備援方案
開始得太晚 / 太早以 100 毫秒為單位降低 / 提高延遲
感覺不對、「不太對勁」、「我不知道哪裡有問題」不要猜:問「是速度、開始的方式、停止的方式,還是結尾的小彈跳?」,或並排顯示兩個版本

建置規則

  • 用 transform 移動,用 opacity 淡入淡出。 不要動畫 width、height、top、left 或 margin;它們在滾動時會顫抖。對於手風琴,grid-template-rows: 0fr → 1fr 是公認的例外(內容放在內層包裝器中,有 min-height: 0; overflow: hidden)。永遠不要使用 transition: all;要指定屬性名稱。
  • 永遠不要從無到有長大。 縮放進入動畫從 scale(0.95) 搭配 opacity: 0 開始(較大的彈出效果用 0.9),永遠不要用 scale(0)。

[FR 部分因原文截斷而未完成,暫依原文保留此狀態。]

相關技能