Topics

Figma 中图标颜色无法更改!组件实例切换问题解决指南

  • column

在 Figma 中分工设计零件时,有时会遇到意想不到的麻烦。特别是,您是否遇到过组件化的图标颜色无法正确切换的困扰呢?

本文将详细解析许多 Figma 用户面临的"图标实例颜色无法反映"问题,并清晰地阐述其原因和解决方案。

我制作的按钮被前辈组件化了!!而且还可以切换图标部分!!太厉害了!但是图标不够用,所以要不断地把图标注册为组件,让它成为更易用的组件!

我默默地一个接一个地制作了许多图标。

咦?图标组件切换得不太对啊? 明明是按照前辈的做法来的…。为什么颜色切换不了呢?

就是这样啊,是因为你制作图标的方式有问题!

前辈!怎样才能让颜色改变呢?

呵呵,不错啦!我就把Figma图标切换的秘诀教给你。好好记住,把它牢牢记在脑子里!

好的!我会努力学习!

为什么颜色会被继承?Figma 覆盖的工作原理

在 Figma 中创建按钮时,经常会遇到这样的情况:通过实例属性来切换图标部分。但是,当实际切换图标时,设置的颜色可能无法反映,或者颜色会意外改变。这类问题并不罕见。

在 Figma 中切换图标(icon)时,是否遇到过设置的颜色无法反映或颜色未能正确切换的问题?本文将为您清晰地介绍这个问题的原因和解决方法。

在切换图标时,确保颜色能够正确切换,需要仔细检查图标端和按钮端的设置。

首先确认按钮组件的结构

首先,让我们确认以下结构中颜色被覆盖的情况。

① 原始图标组件是黑色

② 作为实例复制到按钮中的状态,仅覆盖颜色

③ 在这种状态下切换到其他图标时,图标颜色可能不会变成白色,而是恢复为默认颜色

提示:理解主组件与覆盖的关系

最基本的注意事项是,被覆盖的属性不会反映主组件的更改。

被覆盖的部分:在实例中更改颜色或文本时,该部分会独立。之后即使更改主组件中的相同部分,也不会应用到该实例。被覆盖的内容(填充色、描边色、文本等)将优先显示。

未被覆盖的部分:未更改的属性(如 padding 或 margin)将直接反映主组件的更改。

需要特别注意的是主组件图层结构的更改。当您更改图层名称或删除图层后添加新图层时,Figma 会将其识别为不同的元素,实例上的覆盖可能会被重置。

基于以上内容,让我们来探查为什么图标颜色无法切换的原因。

原因 1:「填充(Fill)」和「描边(Stroke)」的设置混在一起

即使看起来是相同外观的图标,「填充(Fill)」和「描边(Stroke)」在 Figma 中也作为完全不同的属性处理。因此,当从使用填充表现的图标切换到使用描边粗细绘制的图标时,颜色覆盖可能不会正确反映。

例:

图标 A

图标B

  • 图标A:由填充(Fill)组成的轮廓化图标
  • 图标B:由线条(Stroke)描绘轮廓的图标

如此,当图标的绘制方式不同时,色彩应用的结果也会随之改变,因此统一表现方法很重要。当点击图标B时,虽然Fill被设置为白色,但由于此图标组件仅由线条构成,颜色不会被替换。然而,填充部分实际上已经正确反映了白色(由于不存在填充要素,白色无处容纳…)。

解决方案
所有图标都应遵循「填充」创建规则。用线条绘制的图标必须进行轮廓化处理(command+shift+O)以转换为「填充」对象。这样做可以在实现时更容易处理。

在我们公司,实现时会将SVG的path放入CSS变量中,或使用Astro Icon进行集成,因此我们统一使用填充。

如果保持线条(Stroke)状态,当图标放大或缩小时,线条宽度会随之改变,这也会导致设计崩溃。除非有特殊原因,否则最佳做法是进行轮廓化处理并统一为「填充」。

如果仅用线条构建图标,当图标放大缩小时,线条大小会保持不变。对于箭头等简单路径的图标问题不大,但对于复杂图标,12px时会被压缩,而80px时则会呈现松散的设计,这种情况很常见。

用线条构建的图标在调整大小时,线条宽度也会随之改变,因此轮廓化处理是最好的方式。如果想保留轮廓化前的数据,可以在组件附近放置原始数据。

用线条(Stroke)构建的图标在合并后虽然会转为填充(Fill),但这种情况下往往会出现部分尺寸不变等问题。

原因2:图层名称不匹配

在 Figma 中,有一项规范:当切换组件实例时,具有相同图层名称的元素会继承样式和属性

例:

图标 A

图标B

  • 图标 A 的矢量图层名称:Vector
  • 图标 B 的矢量图层名称:Vector2

当图层名称不同时,Figma 会将其判断为"不同的东西",因此覆盖的样式无法正确应用。

解决方案:统一用于图标的图层名称(例:全部使用Vector

首先,想要着色的所有路径的图层名称要保持一致哦!

原因3:图层结构(层级)不同

即使统一了图层名称,有时也可能无法顺利切换。在这种情况下,可能与图层结构的差异等因素有关。如果实例的切换源和切换目标中图层数量或结构不同,属性可能无法正确映射。但是,如果图层名称相同,即使存在某些层级差异,在某些情况下也不会造成问题

例:

图标 A

图标B

图标 C

  • 图标 A 将「Vector(path)」描边化并合并为一个矢量(基础图标)
  • 图标 B 的层级为「Flame(Flame) > Vector(path)」→ 正常(路径名「Vector」继承了颜色)
  • 图标 C 的结构为「Vector(Flame) > Flame(path)」→ 异常(设置在 Flame 名「Vector」上的颜色变化会出现)

如此一来,当层级名「Vector」包含了组时,需要注意样式的应用方式。同时,即使名称相同,颜色变化也仅在最上层出现(参考图标 C),第二层的 Vector 不会反映颜色变化。

解决方案:不仅要保持层级名称一致,还应设计实际应用样式的路径结构也相匹配,这样可以更容易地避免问题。

如果矢量名称相匹配,即使结构稍有不同通常也没问题。但在团队开发中,为了方便后来参与的人员,最好还是统一内部结构,这样会更贴心。

原因 4:原始组件与「填充(Fill)」或「描边(Stroke)」的数量不同

如果只有一种颜色,合并图层或统一图层结构和图层名称就无需担心。但是,当切换到与原始组件的「填充(Fill)」或「描边(Stroke)」数量不同的图标时,可能会出现只有部分颜色切换而其他颜色保持不变的情况,不符合预期。基本上应该将图标统一为单色。或者如果需要使用两种颜色,需要单独创建两色图标的图标变量等解决方案。

解决方案

  • 不混合单色和多色图标。
  • 如果需要多色图标,请在 Varargs 中复制图标组件,创建用于双色图标的版本。
  • 使用多色图标时,基本上不使用颜色覆盖。

要注意的是,即使覆盖单色图标,也只能改变一种颜色!

原因 5:混合模式或蒙版的影响

如果图标使用了蒙版或特殊混合模式(如正片叠底),改变颜色可能不会产生视觉变化

解决方案
如果使用了蒙版或混合模式,请合并或扁平化(Flatten)对象,将其转换为简单的路径对象,然后再进行组件化。

在这种情况下,最后将其转换为描边路径或保持为简单路径会更加安心。如果使用了正片叠底,通过实时描摹等方式彻底转换为路径会更加安心。


验证总结

原因

内容

解决方法

图层名称不匹配

切换实例时属性未继承

统一所有图标的图层名称(例:Vector)

图层结构不一致

当图层层级或结构不同时,样式可能无法应用

统一最终绘制对象的结构

基础组件与图层的数量不同

基础组件的填充数量指定不同

通过样式应用、复合路径和合并进行处理

混合/蒙版

颜色在视觉上无效

恢复为Normal混合模式,取消蒙版

实际确认的颜色反映行为

以下是在按钮内切换各种图标时确认到的颜色反映行为(请参阅图像)。

测试模式

结果

备注

路径描边化

✅ 颜色反映正常

结构简单且稳定。但重新编辑比较困难。

对路径进行布尔运算的情况(合并等)

✅ 颜色反映正常

只要最上层的层级名称相同,通常没有问题。如果直接下方的图层数量与原始实例相同,就能正确切换。

矢量的层级结构不同(Group > Vector)

✅ 颜色反映正常

如果相应位置的图层名称一致则可以。但如果结构不同或名称重复,可能无法正确显示

更复杂的形状(混合或路径合并)

✅ 颜色反映正常

整合路径后会更稳定

当将复制源矢量放入组或框架等以改变其结构时

🔺 颜色可能无法反映

很可能被识别为单独的图层,因此如果要进行编辑,最好复制该组件后编辑副本会更可靠

Vector 名称不同

❌ 颜色未反映

图层名称不匹配被识别为不同对象

内部结构相比原始数据更复杂且存在较大差异

❌ 颜色未应用

当图层数增加或帧数增多时,仅部分颜色得到反映。差异较大,很可能被判定为不同图层

复制源删除后的替换

❌ 颜色未反映

即使同名也被区别对待

图标路径的父框架中存在同名框架的情况

❌ 颜色应用到父框架

父级同名框架的颜色变更会反映,导致路径样式无法应用

运维提示

验证中发现的要点:

  • 图层名称与结构保持一致非常重要
  • 填充颜色最好通过 Color Style 或 Variables 管理,但不一定必须指定
  • 图标创建时考虑到实现的便利性,建议统一使用填充而非线条(线条在缩放时尺寸容易偏差,建议转为轮廓)
  • 如需为现有图标添加元素,应创建新图标逐一替换,而非编辑当前反映的变体,这样可以更好地避免颜色问题

从设计创建到实现顺利推进的要点:

  • 统一框架尺寸(不要混用 24px、40px、80px 等不同尺寸)
  • 图标部分使用缩放时,会根据图标尺寸自动调整大小(实现和设计上的数据处理都会变得相当轻松)

此外,我们的实现规则如下:

  • 设置颜色为纯黑色 #000(Astro Icon 的原始数据如果不是黑色,颜色更改将不会生效)

运营阶段常见的问题:

  • 谨慎修改现有图标:在运维过程中,如果向现有图标添加或修改元素,容易无意中改变结构,导致色彩显示故障。在这种情况下,与其直接编辑现有组件,不如遵循规则创建新的图标组件,然后进行替换,这样更安全。

总结

明白了吗?创建图标时,基本上遵守这3条规则就可以了! 1. 绘制方式统一为"填充"(线条要转为轮廓!) 2. 为路径上色时,"图层名称"要统一 3. 尽量保持图标的"图层结构"简洁 还有,在运维阶段特别要注意的是修改现有图标。修改过程中结构会发生变化,导致颜色无法正确显示,这类问题经常出现。 因此,不要直接修改现有图标,而是遵守规则创建新的组件,在新组件中修改图标。之后,在按钮组件端将旧图标替换为新图标,这样颜色问题就能大幅减少了。

太感谢了!这样我也就成为图标高手了!我会用前辈教我的方法来试着创建组件!

在切换图标实例时,尽管外观相同,但由于内部结构不同,颜色反映无法正常工作。

本次介绍的重点,尤其是"统一填充"和"统一图层命名"这两点做到位,基本上就能防止大多数问题的出现。

如果仍然无法正确切换,通常是由于内部结构差异或父级图层具有相同的名称导致的。

希望这篇文章能够帮助你在 Figma 中的设计工作更加舒适。

本文作者

UI 设计每天都在更新!LP 设计也在考虑如何融入可访问性。最近有点远离标记工作,在思考"是不是应该提升自己的 JavaScript 水平?"北村匠海粉丝!

hasshi

网页设计师 / 2018年入社 / 内心里始终是初出茅庐的设计师

查看本员工的文章

安心的团队体制和迅速的反应能力是我们的优势

Liberogic 拥有经验丰富的员工团队,积极推进项目,因此获得了客户的高度评价。
我们会妥善分配项目经理和总监,确保整个项目顺利进行。 通过避免不必要的全职投入导致的成本增加,并采用适当配置人力资源的方式,从把握业务内容到估价的制作和提交速度都赢得了良好的口碑。

* 本公司不积极开展SES驻场工作等业务,敬请谅解。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webex 等,您可以使用几乎所有主要的项目管理工具和沟通协作工具。

您在 Figma 设计系统方面遇到困难了吗?

案例分析