一个搜索图标,在仪表盘里长一个样,在服务目录里长另一个样,到了 Flutter 屏幕上又变了。这不是设计审美问题,是选型问题——三套工具各自负责一块,混着用就会打架。
![]()
Phosphor Icons、dashboard-icons 和 morphnext 分别覆盖了这件事的三个部分:一套灵活的基础图标集、一份服务标识目录、以及图标状态之间的动画过渡。
Phosphor Icons:共享的基础动作词汇
Phosphor Icons 是一个面向界面、图表和演示的通用图标家族。该仓库描述其包含 1,248 个图标,提供六种字重,并保留了原始描边信息以便进一步调整样式。
适合谁:产品 UI 团队,且同一个图标需要在 Web、React、Vue 或 Flutter 之间流转。
第一个实验:挑一个动作,比如搜索或设置,用两种尺寸和两种字重渲染它。看看描边变化之后,它是否还读得出是同一个动作。
局限:这个家族给的是一套一致的词汇,但它不提供你产品的服务标识,也不决定每种场景该用哪种字重。
dashboard-icons:服务目录的专用图库
dashboard-icons 收集了 1800 多个经过整理的服务、应用和工具图标。它提供 SVG、PNG 和 WEBP 三种格式,带明暗两套变体,命名采用 kebab-case 规范。
适合谁:正在做仪表盘或应用目录的人,且可识别的服务标识比单一通用图标家族更重要。
第一个实验:从产品里已经展示的服务中挑五个,把 SVG 文件放进同一行目录里测试。保持图标尺寸、背景和标签宽度不变,然后检查哪些标识依然清晰可辨。
局限:这是一份服务图像的目录,视觉一致性取决于源标识和你选的变体。它更适合目录,而不是产品级的动作语言。
morphnext:Flutter 的状态切换
morphnext 把 Flutter 内置的 IconData 字形转成可中断的、弹簧驱动的矢量变形。AnimatedMorphIcon 从屏幕上当前的形状开始,而 MorphIcon 接受受控的进度值,用于手势、滚动或时间轴。
适合谁:图标会变状态的 Flutter 团队,比如菜单变关闭、描边变填充。
第一个实验:把一个双状态按钮换成 AnimatedMorphIcon,然后连点两次打断过渡。为两个状态都加上 semanticLabel 值,再和普通的图标替换对比结果。
局限:morphnext 只处理内置的、基于字体的 IconData 和单色渲染。它不会对任意 Flutter Path 对象或 SVG 图形做变形,而且某些图标对可能产生意外的中间形状。
把三个选择放进同一个决策里
Phosphor Icons 是共享动作词汇最宽的起点。dashboard-icons 是仪表盘和目录里服务标识的具体选择。morphnext 负责 Flutter 内部图标状态之间的动效。
一个小产品可以三套都用,但别把它们当成可以互相替换的东西。动作交给 Phosphor Icons,可识别的外部服务交给 dashboard-icons,状态切换需要体现连续性时用 morphnext。
在自己的项目里,挑一个重复出现的动作和一行服务目录。用两种 Phosphor 字重渲染这个动作,把 dashboard-icons 的服务标识放在旁边,如果屏幕是 Flutter,再用 morphnext 试一次同样的动作过渡。留下那个在最小尺寸下依然可辨认的版本,删掉那个需要额外解释的。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.