前面调研过 D2C,也就是设计稿转代码,它的原理是 figma、sketch 等插件可以拿到设计稿的数据,因为是矢量设计稿,所以存储的是一个 JSON,类似这样:

而且这个结构和网页的基础组件是能对应上的,也就能完成到网页的转换,然后通过不同的模版,打印成 React、Vue 等不同框架的代码。

不过很多设计稿的数据需要经过一些处理才能用,比如处理成合适的分组、计算出 flex / 绝对定位的布局、处理成语义化的 className、标注组件等:

D2C 在特定场景下还是很有意义的。

那 C2D 呢?

C2D 是代码转设计稿,举两个实际应用的案例:

semi design 是抖音开源的组件库,它支持主题的自定义,比如指定不同的主题色、字体大小、圆角尺寸等,而且提供了一个可视化的主题编辑器:

改了主题变量后可以直接预览:

再来试一个:

这样配置主题确实方便了很多。

但有个问题,antd 组件是有设计稿资源的,设计师可以用那些来设计页面,但是你这里改了主题之后,设计师那里用的设计稿是不是也得跟着改。

怎么办呢?

于是 semi design 就做了 C2D 功能,编辑完主题之后可以用这个来生成对应的 figma 设计稿资源。

还有一个场景,是之前调研 D2C 的时候,Locofy 提供的 figma 插件是能拖拽组件到设计稿里的,这也是 C2D,用代码生成设计稿:

至少这两种场景下是需要 C2D 的功能的。

那 semi design 是怎么实现这种 C2D 的呢?

这次调研的是 figma 插件里实现这个功能,所以去 figma 插件文档里找一下:

可以在插件文档里找到创建各种图形的 api,我们试一下:

比如 createRectangle:

createStar:

各种形状和图片都能画,这样不就能把组件库里的组件画出来么?

这个思路是可以,但是总不能手动用 api 画一遍吧,那肯定不靠谱。

如果设计稿中也支持组件,改了主题之后只要改下那个组件的参数就好了。

这个思路就对了,figma 还真支持组件功能。

figma 里的组件可以创建实例,当组件改动的时候所有它的实例都会跟着改,而且实例还可以传参数。

比如 semi design 的 figma 组件库里的 button 组件:

这参数是不是感觉网页的组件库没啥区别了?

能不能插件里直接引用这个 figma 组件库里的组件,传入不同的参数把它画到 figma 画布里呢?

可以的,插件有这个 api:

figma 插件提供了 importComponentByKey 的 api,可以从团队 figma 组件库(team library)中引入一个组件,

然后调用下 ComponentNode 的 createInstance 方法创建个实例:

设置下组件的参数:

然后就可以在 figma 设计稿中画出来了,这不就实现了 C2D 了么?

至于拖拽功能,figma 提供了对应的事件来处理,这部分可以看文档:

至此,如何实现 C2D 我们已经理清了。

其实做 C2D 还有第三种目的,就是为后续 D2C 服务,可以在生成的 figma 组件实例里加入一些标注信息,用于后面 D2C 的识别。

semi design 也是这样做的:

总结

D2C 是拿到设计稿的 json 经过一系列处理转成各种框架的代码,而 C2D 则是用代码把组件在设计稿中画出来。

C2D 的作用我们举了两个真实的案例:

  • semi design 提供了主题编辑器,配置好新主题之后可以用 C2D 的能力生成对应的设计稿资源。

  • Locofy 支持拖拽组件到设计稿中

基于 figma 的 C2D 的实现有两种思路

  • 用 figma 提供的 api 来手动画,这个画点简单的还行,复杂的组件不靠谱

  • 做一个和网页组件库对应的 figma 组件库,用 figma 的插件 api 从中引入组件,设置参数,然后加到 figma 画布里

第二种思路更靠谱一些,figma 的组件可以设置参数,和网页的组件很像了,用起来体验差不多。semi design 的 C2D 也是这么实现的。

做 C2D 其实更重要的目的是在设计稿中加入一些埋点信息,可以在后面拿到设计稿 json 做 D2C 的时候能够根据这些信息生成组件代码。

总之,C2D 的实现还是依赖设计师提供的和网页组件库对应的 figma 组件库,代码里只需要引入组件传入参数,然后在 figma 设计稿画出来就可以了,代码部分相比 D2C 是简单很多的。

- END -

关于奇舞团

奇舞团是 360 集团最大的大前端团队,代表集团参与 W3C 和 ECMA 会员(TC39)工作。奇舞团非常重视人才培养,有工程师、讲师、翻译官、业务接口人、团队 Leader 等多种发展方向供员工选择,并辅以提供相应的技术力、专业力、通用力、领导力等培训课程。奇舞团以开放和求贤的心态欢迎各种优秀人才关注和加入奇舞团。

C2D 代码转设计稿是怎么实现的?相关推荐

  1. 设计稿生成代码与 Serverless 的前世今生与未来!

    一场脑洞实验 云栖大会云上 Hello World 活动火热进行中!每位参与者都可收获一份阿里云出品的全球唯一序列号纪念证书! 作为阿里经济体前端委员会的四大技术方向之一,前端智能化方向一被提及,就不 ...

  2. Deco 智能代码体验版正式上线啦,快来体验设计稿一键生成代码~

    Deco 是什么?- Deco 智能代码项目是我们团队在「前端智能化」方向上的探索,其聚焦设计稿一键生成多端代码这一切入点,实现将 Sketch/Photoshop 等设计稿进行解析并直接生成多端代码 ...

  3. 代码更换ui图片_用技术的方式,在UI设计稿中设置随机码,保证高清

    本文首发于:行者AI 在工作中会遇到批量给图片添加文字,随机码等需求,当数据码数量较大时,UI的工作量就会非常大,这时候我们可以用python来帮我们提高工作效率. 1. 需求分析 我们有这样一张图片 ...

  4. doxygen 无法生成图片_设计稿智能生成代码如何识别组件?Imgcook 3.0 解析

    文 / 阿里淘系 F(x) Team - 苏川 背景介绍 imgcook 能够自动生成代码主要做两件事: 从视觉稿中识别信息,然后将这些信息表达成代码. 本质是通过设计工具插件从设计稿中提取 JSON ...

  5. 京东Deco 智能代码体验版正式上线啦,快来体验设计稿一键生成代码~

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 Deco 是什么? - Deco 智能代码项目是我们团队在「前端智能化」方向上的探索,其聚焦设计稿一键生成多端代码这一切入点,实现将 Sk ...

  6. 由设计稿一键智能生成代码的快捷软件

    前言: 将psd设计稿放进去自动生成代码的软件 效果图: 使用步骤: 1.官网入口点击进入,点击文件生成代码 2.点击psd文件,拖拽你的设计稿进来 3.导出你的文件 4.就到这个页面了,注意你要是没 ...

  7. imgcook设计稿生成代码插件

    Sketch/PSD/静态图片生成代码插件 imgcook 是专注以各种图像(Sketch/PSD/静态图片)为原材料烹饪的匠心大厨,通过智能化手段将各种视觉稿一键生成可维护的 UI 视图代码,期望此 ...

  8. 前端设计稿转代码现状,会不会失业?

    大厂技术  高级前端  Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 前言 前端近年来一直在尝试如何提高开发人员的效率,从最初的脚手架工具.组件库.持续集成体系. ...

  9. 设计稿(UI视图)自动生成代码方案的探索

    设计稿(UI视图)转代码是前端工程师日常不断重复的工作,这部分工作复杂度较低但工作占比较高,所以提升设计稿转代码的效率一直是前端工程师追求的方向之一. 此前,前端工程师尝试过将业务组件模块化构建成通用 ...

最新文章

  1. 傅里叶描述子欧氏距离_机器学习中的各种距离
  2. “拟态防御”: 让黑客找不到破门之机
  3. 开源分布式中间件 DBLE Schema.xml 配置解析
  4. 【最详细】数据结构(C语言版 第2版)第三章课后习题答案 严蔚敏 等 编著
  5. gitlab mergeRequest
  6. Windows清理系统垃圾bat脚本【卸载360安全卫士】
  7. PX4和ardupilot(APM)的对比
  8. Win10任务栏的隐藏图标的小三角怎么弄出来
  9. 一个简单的跑酷引擎-------bibibibi
  10. 软件工程——团队答辩
  11. opencv学习笔记(一) 环境配置/打开一张图片/github(git)初探
  12. idea编辑窗口显示outdated version解决方案
  13. Godaddy SSL证书解析到阿里云后配置nginx服务器https
  14. 编程规范 --- 可读性
  15. 微信小程序 本地存储
  16. netty对http协议解析原理解析
  17. 条码打印机的场景应用及条码打印机的特点有哪些
  18. pytorch实战(四)——模型的保存与读取
  19. yb3防爆电机型号含义_YBK3/YB3/YBX3-160M2-2-15KW防爆电机参数详解
  20. syntax error near unexpected token 脚本报错误解决【转】

热门文章

  1. Linux 自检和 SystemTap
  2. sql 语句中count()有条件的时候为什么要加上or null
  3. wps office word 插入图片显示异常 只显示一个长条
  4. 安的广厦千万间 天下寒士尽欢颜
  5. 一个屌丝程序员的青春(三六六)
  6. 13计算机组装,舞阳中专2012-13年度《计算机组装与维修》期中考试试题
  7. Docker初级:Docker常用命令总结
  8. 微软Excel输入1.之后,小数点消失了
  9. MATLAB的水果分级系统
  10. 文件打包zip 下载