熵简技术谈 | 2B 场景下的前端组件库换肤设计理念与实践

导读:一个统一、规范的组件库,能够不断沉淀设计师的思考、降低设计与开发成本,保证产品在不断发展的过程中,用户体验不被打断。同时,熵简科技作为一家深耕B端的服务商,其前端组件库还需要快速赋能 2B 场景下的业务需求。文本针对 2B 场景,谈一谈熵简前端团队在构建前端组件库中的设计理念和实践。

作者信息

本文出自熵简科技大前端团队,团队致力于打造世界级的B端产品。主要工作包括搭建先进、统一的前端基础架构,建立严格的产品设计规范,探索前沿技术的业务落地,持续沉淀优秀的前端案例,不断提升各个产品线的客户使用体验及开发效率。

1、背景

前端组件化已经成为一种主流,一种共识。一个统一、规范的组件库,能够不断沉淀设计师的思考、降低设计与开发成本,同时也可以降低用户在不同产品模块之间切换的学习成本,保证产品在不断发展的过程中,用户体验不被打断。

熵简科技是一家为企业客户提供数据智能平台的服务商,因此我们团队在构建前端组件库时,除了需要考虑上面的需求以外,同时还要兼容 2B 场景下的业务特征。

在2B场景下,很多客户需要对产品进行私有化部署以及定制化改造,客户往往会对设计风格提出与自身公司文化背景相统一的定制化需求,这时就需要我们的组件库能够在输出效果稳定可预期的同时,具备响应客户需求变化的强大扩展性。

为了达到上面的要求,在整个设计和开发过程中,我们一直遵循两个原则:

    (1)原子化:类比物质的分子组成结构(原子构成分子,分子构成物质),原子设计就是将页面颗粒度分为原子、分子、组织、模板、页面的超细维度,进行组件和组件的层层嵌套。同样我们在设计组件时将设计元素的颗粒度进一步精分、组合产生颜色搭配主题、形态组合主题等,不同的主题结合产生最终的组件样式。

     (2)统一语义化命名:UI和前端统一规范各原子化"物料"的命名,减少协作中的沟通成本。

2、2B场景下的设计原则

2.1 系统一致性原则

实际的项目开发通常需要在同一环境下整合多个产品系统,组件库的开发能很好地保证各个系统有一致的视觉语言、交互操作规范。

2.2 敏捷开发原则

2B业务在POC阶段需要有快速的视觉Demo输出,因此原子化的组件设计与模块化的组件开发配合显得尤为重要。

最终,我们希望能够搭建起 产品/UI/前端 三方高效的协作流程,如下所示:


3、UI团队工作: 

3.1 定义并创建原子化变量

在设计的初始阶段,先将“颜色”这个最基础单位按其之后在项目中的使用意图进行分组和命名,前端在设定不同组件的颜色属性时也会以颜色名字的方式进行设定和修改。

3.2  UI基于Sketch的Symbol功能进行变量创建

sketch的symbol功能很好的为原子化提供了实践可能性。在sketch文件中将最小颗粒度“原子(如颜色)”按照其使用意图作为名称进行命名;颗粒度再复杂一级的“分子(如字体)”变量名则由typeface/weight/color/size的组合排列产生。

当进一步设计有功能属性的基础组件(如按钮、列表等)时,组件内的文字和颜色使用引用预定义好的“原子单位”,这也为日后样式修改时确保组件一致性提供了一定的依据。

3.3 Sketch上传Zeplin来完成设计与开发团队的同步协作

zeplin作为sketch的“好基友”可以很好的实现将设计语言到开发语言的翻译工作。设计好的symbol通过 Sketch/Plugin/Zeplin/Export Selected Board上传至zeplin的共享平台。

在zeplin的styleguide栏目下以树状结构来分类组件

zeplin内嵌的symbol识别功能使得在产品业务相关的页面中对于引用到的组件进行自动识别,方便开发人员识别原子化变量

4.前端团队工作:

4.1 前端组件设计和开发原则

基于Sketch中的symbol功能,前端也需要将组件进行原子化,并根据symbol的变量命名将常用的大小、颜色创建为变量。

前端组件根据功能以及颗粒度可以分为“基础组件”和“高阶组件”。基础组件一般是页面中颗粒度中最小也是最常用的组件,例如input,button等;高阶组件通常是由基础组件进行一定的变形、组合或两者兼有而形成的;而高阶组件+基础组件最终组成了完整的页面。 为了满足2B场景下的整体风格替换,所有组件在开发的时候要将用到的颜色、字体等"原子"用变量的方式引入。

在目前前端开发中,样式的变量创建方式主要有两种:一是基于css原生支持的自定义变量,二是基于less、scss等css预编译器。考虑到自定义变量可能存在的浏览器兼容性问题,最终我们组件库采用了less作为样式开发的语言。less 是一门 CSS 预处理语言,除了之前提到的变量功能,还有嵌套、混合(mixin)、函数等方便的功能。

4.2 前端组件开发实践

至此,前端开发可以根据之前zeplin上的StyleGuide,将常用的变量进行定义,并在组件开发中使用:

                                                                                                   less变量定义

                                                                                                      组件库变量应用

除此之外,我们利用less的mixins特性封装了文字样式混合,可通过传参编译成相应代码,从而减少重复代码并且方便开发使用。

                                                                                                           定义mixin


                                                                                                          mixin的使用

4.3  Less变量覆盖与自动注入

当我们按照以上原则完成组件及页面的开发,就可以非常方便的解决业务场景下遇到的“换肤“问题:只需要根据主题修改相关变量即可完成整个项目的主题更换。那在项目中,在不改变组件库变量文件的前提下,如何才能修改样式变量呢?最终我们采用less变量覆盖以及变量文件自动注入的方式解决了这个问题。

(1)less变量覆盖

(2) less自动注入

less自动注入目前我们有两种方案:一是通过less-loader提供的modifyVars、二是通过style-resources-loader来实现

less-loader实现如下:

style-resources-loader实现如下:

5、总结设计规范

基于原子化设计理念,针对2B场景下的换肤需求,我们提出并完善了这套在构建时即可实现的换肤方案。这套理论可以应用于网站的整体开发中并已经过实践验证,最终能够实现网站整体换肤的效果。

关于熵简科技

熵简科技是一家数据智能公司,熵简科技围绕“数据采集-数据融合-数据计算-业务决策”的各个场景,运用自主研发的数据中台引擎,通过端到端的数据中台体系切实解决企业需求痛点。

更多技术干货文章,请关注熵简科技的公众号「熵简学院」

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352