惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
罗磊的独立博客
M
MIT News - Artificial intelligence
D
Docker
量子位
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
月光博客
月光博客
有赞技术团队
有赞技术团队
J
Java Code Geeks
A
About on SuperTechFans
P
Proofpoint News Feed
Jina AI
Jina AI
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
GbyAI
GbyAI
F
Fortinet All Blogs

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
Figma:怎么使用组件化变体去做交互动画? - 少数派
2025-07-17 · via 少数派

首先,“variant”这个词在英语里是“变化”或“另一种形式”的意思,和“variation”意思相近,只是在细微之处有点差别。

所以,我们不用费劲去创建多个外观不同的独立按钮,而是把这些“不同样式”归到一个组件里,这样管理和更新起来会方便很多。


变体和实例的区别

实例的作用是让同一个设计能在不同地方重复使用,这在需要保持视觉一致性的时候很有用。但它不太适合单独管理每个状态的设计。

变体则是一种机制,能让一个组件里包含多个状态,所以在需要组织和管理不同状态时,用变体就很合适。

简单说,两者的区别在于:实例是为了复用设计,而变体是让组件本身能有状态上的变化。

放置文本和图标

先把文本和图标选中,然后按一下 “Shift + A”,就能自动排版了。之后根据实际需要微调一下设计,按钮这部分就基本搞定了。

这里的自动布局默认是让文本和图标在水平方向居中对齐,元素之间的间距也会自动留出来,不用手动调。

这么做的好处是,后续想做那种鼠标放上去会动的按钮会很方便,就像刚才示例里那样。不过这只是个参考,具体怎么设计,还是看你的喜好来调整就行。

组件化

下一步,选中做好的按钮,按快捷键 “⌘+option+k”或者 “ctrl+alt+k”,把它转成组件。之后可以根据需求给组件起个名字,这里我们先暂时叫它 “state”

点一下之后,就会生成一个组件集,里面的按钮会被虚线框起来,就像下面这张图里显示的那样。

被虚线整个框住的区域,就是组件集。而组件集里面包含的各个项目,称之为“变体”。 所以到目前为止,我们已经有了一个组件集,以及两个变体。 

它们的层级关系是这样的:

  • state = 组件设置
  • 默认和变体 2 = 变体

所以按照层级关系来看,是“父级(组件集)> 子级(变体)”,而且它们都通过“状态”这个属性被统一管理。到这里,变体的创建就完成了。

需要注意的是,变体本身也是组件。所以如果复制它,会生成一个实例,但如果是在组件集内部(也就是虚线框里)复制,得到的就是一个新的独立变体(也是组件)。

要是想创建实例,方法是按住alt键拖动变体,把副本放到虚线框外面就行。

多种组件的变体

你也可以把已经做好的多个组件合并成变体。

具体操作是:先选中要合并的那些组件,然后在右侧面板上找到“合并为变体”按钮,点击之后,这些组件就会被整合到一个组件集里,之后就能作为变体来统一管理了。

解锁组件集

一旦组件集创建完成,其实没有直接删除它的办法。但是组件集里空空如也,它自己就会自动消失。

另外,如果你试着把所有变体都移到虚线框外面,这时候组件集也会消失,剩下的就回到原来那些独立的组件状态了。

设置交互

编辑好变体之后,就可以切换到“原型”模式来设置交互了。

拿我们这个例子来说,已经设置好了一个交互效果:当鼠标悬停在“变体2”上时,会从默认状态切换到“变体2”的状态。

具体设置的时候,在交互面板的“属性”部分,直接选中你想要切换到的那个变体就行。

放置实例

想要放置变体的实例,方法是按住alt键,把变体往虚线框里拖一下,再复制到虚线框外面。这样操作后,放出来的东西就会直接变成实例。

你也可以从“资源”面板里这么做。 放好实例后,能在右侧面板的属性里更改变体(也就是显示的状态)。

把实例放在一个画框里,然后选择右上角原型预览就可以正常运行动画了。