在 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) |
图层结构不一致 | 当图层层级或结构不同时,样式可能无法应用 | 统一最终绘制对象的结构 |
基础组件与图层的数量不同 | 基础组件的填充数量指定不同 | 通过样式应用、复合路径和合并进行处理 |
混合/蒙版 | 颜色在视觉上无效 | 恢复为 |
实际确认的颜色反映行为
以下是在按钮内切换各种图标时确认到的颜色反映行为(请参阅图像)。
测试模式 | 结果 | 备注 |
|---|---|---|
路径描边化 | ✅ 颜色反映正常 | 结构简单且稳定。但重新编辑比较困难。 |
对路径进行布尔运算的情况(合并等) | ✅ 颜色反映正常 | 只要最上层的层级名称相同,通常没有问题。如果直接下方的图层数量与原始实例相同,就能正确切换。 |
矢量的层级结构不同(Group > Vector) | ✅ 颜色反映正常 | 如果相应位置的图层名称一致则可以。但如果结构不同或名称重复,可能无法正确显示 |
更复杂的形状(混合或路径合并) | ✅ 颜色反映正常 | 整合路径后会更稳定 |
当将复制源矢量放入组或框架等以改变其结构时 | 🔺 颜色可能无法反映 | 很可能被识别为单独的图层,因此如果要进行编辑,最好复制该组件后编辑副本会更可靠 |
Vector 名称不同 | ❌ 颜色未反映 | 图层名称不匹配被识别为不同对象 |
内部结构相比原始数据更复杂且存在较大差异 | ❌ 颜色未应用 | 当图层数增加或帧数增多时,仅部分颜色得到反映。差异较大,很可能被判定为不同图层 |
复制源删除后的替换 | ❌ 颜色未反映 | 即使同名也被区别对待 |
图标路径的父框架中存在同名框架的情况 | ❌ 颜色应用到父框架 | 父级同名框架的颜色变更会反映,导致路径样式无法应用 |
运维提示
验证中发现的要点:
- 图层名称与结构保持一致非常重要
- 填充颜色最好通过 Color Style 或 Variables 管理,但不一定必须指定
- 图标创建时考虑到实现的便利性,建议统一使用填充而非线条(线条在缩放时尺寸容易偏差,建议转为轮廓)
- 如需为现有图标添加元素,应创建新图标逐一替换,而非编辑当前反映的变体,这样可以更好地避免颜色问题
从设计创建到实现顺利推进的要点:
- 统一框架尺寸(不要混用 24px、40px、80px 等不同尺寸)
- 图标部分使用缩放时,会根据图标尺寸自动调整大小(实现和设计上的数据处理都会变得相当轻松)
此外,我们的实现规则如下:
- 设置颜色为纯黑色 #000(Astro Icon 的原始数据如果不是黑色,颜色更改将不会生效)
运营阶段常见的问题:
- 谨慎修改现有图标:在运维过程中,如果向现有图标添加或修改元素,容易无意中改变结构,导致色彩显示故障。在这种情况下,与其直接编辑现有组件,不如遵循规则创建新的图标组件,然后进行替换,这样更安全。
总结
明白了吗?创建图标时,基本上遵守这3条规则就可以了! 1. 绘制方式统一为"填充"(线条要转为轮廓!) 2. 为路径上色时,"图层名称"要统一 3. 尽量保持图标的"图层结构"简洁 还有,在运维阶段特别要注意的是修改现有图标。修改过程中结构会发生变化,导致颜色无法正确显示,这类问题经常出现。 因此,不要直接修改现有图标,而是遵守规则创建新的组件,在新组件中修改图标。之后,在按钮组件端将旧图标替换为新图标,这样颜色问题就能大幅减少了。
太感谢了!这样我也就成为图标高手了!我会用前辈教我的方法来试着创建组件!
在切换图标实例时,尽管外观相同,但由于内部结构不同,颜色反映无法正常工作。
本次介绍的重点,尤其是"统一填充"和"统一图层命名"这两点做到位,基本上就能防止大多数问题的出现。
如果仍然无法正确切换,通常是由于内部结构差异或父级图层具有相同的名称导致的。
希望这篇文章能够帮助你在 Figma 中的设计工作更加舒适。
UI 设计每天都在更新!LP 设计也在考虑如何融入可访问性。最近有点远离标记工作,在思考"是不是应该提升自己的 JavaScript 水平?"北村匠海粉丝!
hasshi
网页设计师 / 2018年入社 / 内心里始终是初出茅庐的设计师