设计系统标注,第二部分:组件标注的高级方法
在本系列的第一部分中,我们讨论了可访问性如何在设计系统组件的不同实例中被忽略的问题。我们的解决方案?为Primer设计系统中的每个组件使用一套"Preset标注"。这使得设计师能够包含未内置到组件中且未在设计中直观传达的特定预设细节。
也就是说,Preset标注是每个设计系统独有的——虽然我们的方法可以作为构建参考——但如果您不使用Primer设计系统,其他组织无法直接使用这些标注。
幸运的是,您可以构建自己的标注。以下是具体方法。
如何为设计系统创建Preset标注
首先评估哪些组件需要Preset标注——并非所有组件都需要。优先考虑那些最能从Preset标注中受益的组件,并将关键信息构建到每个组件中。接下来,确定应包含哪些属性。只包含那些未在视觉上传达、未包含在组件属性中且未内置到编码组件中的关键信息。
确定组件优先级
当设计系统拥有60多个组件时,确定从何处开始可能是个挑战。哪些组件最需要这些标注?哪些对设计团队和用户的影响最大?
当我们基于概念验证创建新的Preset标注集时,我们决定使用十个最能受益的Primer组件。为了帮助选择,我们使用了一个名为Primer Query的内部工具,该工具跟踪GitHub代码库中的所有组件实现以及与之相关的任何审计问题。
- 与组织优先级一致的组件(即高价值产品和/或流量大的产品)
- 在可访问性审计问题中频繁出现的组件
- 具有React实现的组件(作为我们的首选开发框架)
- 最频繁实现的组件
映射属性
对于每个组件,我们交叉参考多个来源,以确定每个Preset标注中需要添加哪些组件属性和属性。我们寻找的内容可能只存在于这些来源中的一两个地方,因此不太可能在设计和开发生命周期中得到充分考虑。这些来源包括:
Primer.style上的组件文档
设计系统文档应包含面向设计师和开发者的使用指南,可访问性要求也应是此指南的一部分。一些指南和要求被构建到组件的Figma资源中,而一些仅最终出现在编码组件中。
寻找未内置到Figma或代码中的任何可访问性要求。如果已内置,将相同信息放入Preset标注中可能是冗余或不相关的。
Presets可以处理罕见用例
在构建TextInput组件的Preset标注时,我们发现实现可能单独使用图标或具有隐藏的输入标签。对于GitHub的全局搜索或筛选输入,单独的放大镜图标可以作为可见标签,但字段仍需要为辅助技术用户提供可访问的标签。
Storybook中的编码演示
我们的组件沙箱帮助我们查看每个组件如何在React或Rails中构建,以及HTML输出是什么。我们寻找未包含在组件文档或Figma资源本身中的任何代码结构或可访问性属性——特别是当它们可能因实现而异时。
设计师可能看不到或设置的代码属性
Storybook通过显示在其他地方未提及的一些重要属性,帮助我们构建TextInput组件的Preset标注。type属性默认值为text。根据字段的用途,输入的类型也可以是search、email、number、tel、date或time。这应有意设置,以便用户能够使用最合适的虚拟键盘。
Figma资源库中的组件属性
库资源通过文本层、图像填充、变体和复杂的组件属性集提供了很大的灵活性。我们密切关注这些选项,以了解设计师可以更改和不能更改的内容。Preset标注中值得添加的是其他来源中未内置到Figma组件中的可访问性属性、要求和使用指南。
TextInput的Figma组件中缺少的内容
当将TextInput添加到设计中时,Figma组件附带许多可自定义选项。有一个inputTextType属性,涉及视觉设计和排版,而不是表单输入的类型。可以在Figma的侧边栏中设置标签和输入字段的值,但由于默认隐藏,没有选项设置错误验证消息的文本。
我们不能假设在Figma中交付的每个设计都会显示包含所有错误状态的表单示例,因此这些错误消息可能得不到应有的关注。如果此消息不能作为文本属性构建到组件中,则可以将其添加到Preset标注中。
其他潜在来源
- 团队成员的经验:与您合作的设计师、开发者和可访问性专家可能对文档和设计工具可能遗漏的内容有见解。如果您的团队和设计系统已经存在一段时间,他们的见解可能比您在文档、组件演示或资源库中找到的更有价值。花时间询问哪些组件存在具有挑战性的错误,哪些在实现时被有意破坏。
- 最近审计的发现:设计系统组件本身可能存在未解决的审计问题和修复建议。如果是这种情况,这些问题可能出现在Storybook演示中,并且可能在组件文档中未得到说明。设计系统审计问题可能包含既有助于创建Preset标注,又提供关于不应从现有资源中继承的内容的见解的详细信息。
整合所有内容
我们为TextInput组件创建的新Preset标注包含使用指南和Storybook的链接,以及关于如何在设计中最优使用组件以避免潜在问题的可选教程。有两个强制提示用于输入类型和错误文本,以及一个用于偶尔隐藏表单标签的可选提示。
创建Preset标注的经验总结
Preset标注可能不适合每个团队或组织。然而,它们特别适合年轻的设计系统和那些采用程度不高的设计系统。
像Primer这样的成熟设计系统会频繁更新。这意味着如果没有密切监控,设计系统组件本身可能会与Preset标注的构建方式不同步。这可能在开发开始后导致混乱和返工,因此确保在创建这些标注后有维护能力可能是明智的。
对于GitHub的新团队、现有团队的新成员以及对设计系统不太熟悉的团队成员来说,内置指南以及指向文档和组件演示的链接被证明非常有用。更有经验的人员也能够微调Presets及其使用方式。
如果您尚未对设计系统组件有广泛经验(或没有同行帮助构建它们),评估和映射构建Preset所需的属性可能需要大量时间。在Figma的属性面板中简洁地命名组件属性而不被截断也可能具有挑战性。如果上下文不明显,一些培训或附加文档可能会有所帮助。
并不总是清楚需要Preset标注
在许多情况下,这种灵活性可能会令人困惑,因为您可以使用任一标注。例如,Primer
解决这种困惑的一种方法是将Primer特定属性添加到默认标注集中。这将允许您执行诸如在普通Button标注上切换布尔属性之类的操作,并显示特定于设计系统按钮组件的链接和属性。
我们的Preset创建过程可能解锁自动化
目前有许多现有的Figma插件声称能够扫描设计文件以帮助进行标注。也就是说,结果往往参差不齐,包含无法管理的噪音和误报。发生这些问题的原因之一是这些公共插件是设计系统无关的。
当前的自动标注工具无法理解任何设计系统组件的使用,除非进行定制编程或对AI模型进行彻底训练。为了使此类插件能够准确标记设计元素,它们首先需要了解如何识别画布上的组件、使用的变体以及设置的属性。
考虑到这一点,也许最令人兴奋的见解是,为Preset标注映射组件属性的过程——那些未在视觉设计或代码中传达的内容——也是任何尝试自动化更可用标注时需要完成的工作。
换句话说,如果团队使用设计系统并希望自动化添加标注,他们使用的工具需要理解他们的组件。为了让工具足够理解他们的组件以准确自动化,这些隐藏的组件属性需要被映射出来。创建一组Preset标注的任务可能是实现更简化流程的重要垫脚石。
有前景的新方法:Figma的Code Connect
在构建新的Preset标注集时,我们尝试了其他增强Primer标注的方法。虽然并非所有实验都成功,但其中一个确实有效:通过Code Connect添加可访问性属性。
Primer是Figma Dev Mode中新的Code Connect功能的早期采用者之一。我们的系统设计师Lukas Oppermann表示:“通过Code Connect,我们实际上可以再次将设计和代码稍微分开。我们可以专注于为在Figma中使用设计库的设计师创造最佳用户体验,在代码方面,我们可以拥有最佳开发者体验。”
为此,Code Connect使我们能够绕过大部分Preset标注,以及我们其他一些实验的缺点。它通过将关键可访问性细节直接添加到开发者可以从Figma导出的代码中来实现这一点。
GitHub的Octicons在我们许多Primer组件中使用。它们默认是装饰性的,但根据使用方式,有时需要替代文本或aria-label属性。在IconButton组件中,该按钮使用Octicon并需要可访问名称来描述其功能。
当使用基本标注工具包时,这可能意味着为按钮和装饰性图像添加标记,以及在边距中添加指定aria-label应为什么的注释。当使用Preset标注时,需要添加到画布上的内容更少,标注过程花费的时间也更少。
通过设置Code Connect,Lukas在IconButton Figma组件中添加了一个隐藏层。它有一个用于aria-label的文本属性,允许设计师直接从组件属性面板添加值。无需标注。隐藏层不会干扰任何视觉效果,aria-label属性会与组件其余代码一起直接导出。
为每个设计系统组件设置Code Connect需要时间。以下是一些提示:
- 一致性是关键。确保您创建的属性以及放置隐藏层的方式在组件之间保持一致。这有助于设定明确的期望,以便您的团队能够理解这些隐藏层和属性的功能。
- 使用设计系统库的分支进行实验。与Preset标注能够处理的其他复杂信息相比,隐藏像aria-label这样的属性相当简单。
- 使用视觉回归测试(VRT)。直接向组件添加复杂性会增加未来出现问题的风险,特别是对于具有许多变体的组件。Figma的合并冲突UI很有帮助,但可能无法捕获所有内容。
随着我们继续创新标注并使组件更易于访问,我们计划在不久的将来发布我们的GitHub Annotation Toolkit。敬请期待!
延伸阅读
可访问性标注工具包是很好的资源,前提是它们被负责任地使用。我们即将推出的GitHub Annotation Toolkit的贡献者之一Eric Bailey广泛撰写了关于标注如何在构建数字产品时突出和放大深层结构性问题的文章。