谈谈企业级前端应用中通过 CSS 达到布局定制化的话题
![谈谈企业级前端应用中通过 CSS 达到布局定制化的话题](https://static001.geekbang.org/infoq/7c/7c7c40ea5a218714b80f70e9e281d002.png)
本文分别针对 SAP CRM Fiori 应用和 SAP Commerce Cloud (电商云) UI,介绍两个通过更改 CSS 达到更改其 UI 显示风格的例子。
不少 SAP 产品都提供了个性化设置,允许 Key User 通过这些设置对 SAP 产品 UI 风格进行微调。下图是 SAP Cloud for Customer 个性化设置的界面。
![](https://static001.geekbang.org/infoq/3f/3f20f40f854bca0864d458ef36abe8e7.png)
除了这些个性化设置外,更灵活的界面风格调整,通常采用二次开发的方式进行。
Jerry 2015 年所在的 SAP 成都研究院 CRM Fiori 开发团队,负责一个名叫 My Opportunities 的 Fiori 应用,该应用没有采取现在流行的 Fiori Elements + CDS view 实现,而是直接采用原生的 SAP UI5 开发而成。
当时有个客户,对 Fiori 应用 Footer 工具条里的 Edit 按钮的蓝色背景色提出质疑,因为该客户使用 Android 设备访问该应用,在 Android 设备上,任何按钮被点击的瞬间,背景都会被蓝色高亮。因此当时 SAP UI5 Edit 按钮这个默认显示的蓝色背景色,让客户很难区分该按钮是否真正被点击过。
![](https://static001.geekbang.org/infoq/7b/7bd41025fc546dc55daaa19d9c721060.png)
因此客户联系 SAP,询问是否能够将该 Edit 按钮的蓝色背景色去掉,让其和上图右边的 Follow Up 及 Messages 按钮显示风格一致。
Jerry 接到客户的抱怨后,分析了 SAP UI5 Footer 工具条的源代码,发现 Edit 按钮的蓝色背景色是有意为之:按照 Fiori UX Guideline,Edit 按钮的语义类型是 Emphasized ( 下图第 87 行的代码:sap.m.ButtonType.Emphasized)
![](https://static001.geekbang.org/infoq/3d/3daa0144d9b75da1e129517b06d03698.png)
而在 SAP UI5 标准的 CSS 文件里,Emphasized 类型的按钮,背景色被设置为深蓝色。
![](https://static001.geekbang.org/infoq/65/65815c942718fa996e30856236fb5272.png)
搞清楚 Fiori 应用按钮背景色的实现原理之后,解决方案也就不难设计了。My Opportunities 这个 CRM Fiori 应用,在其 Footer 工具条的渲染逻辑上,留了一个 extension hook ( ABAP 开发人员可以将其理解成 SAP UI5 版本的 BAdI Definition).
最后我建议客户,实现这个 extension hook,在代码里将 SAP UI5 Footer 工具条标准的 Edit 按钮删除(下图第 9 行代码),然后在 hook 里自行创建一个普通的按钮 ( 第 3 行 ) 即可。当然这个按钮点击之后,执行的逻辑需与删除的标准 Edit 按钮完全一致,因此需要给其 onBtnPressed 属性,绑定上原始 Edit 按钮的点击事件处理函数:onEdit ( 第 5 行 ).
![](https://static001.geekbang.org/infoq/aa/aa2130e9f21deb521fbd34364c73bde2.png)
最后的效果:Edit 的高亮背景色消失了,客户很满意。
![](https://static001.geekbang.org/infoq/33/33da35bd923d97572f2f04a5ad5abdf1.png)
关于这个客户需求的更多细节,请参考我当时写的博客.
看另一个举一反三的需求:如果客户想把 Edit 按钮旁边的 Follow Up 按钮的背景色设置成红色呢?
![](https://static001.geekbang.org/infoq/8d/8d2d3ba799f4d18b7fbf968274b6407b.png)
解决方案:在 SAP UI5 增强项目代码里,重新实现 SAP UI5 onAfterRendering hook, 找到 Follow Up 按钮的引用 ( 下图第二行 oButtonListHelper.aButtons 数组里,包含了 Footer 工具条里所有按钮,数组索引为 1 的元素即 Follow Up 按钮 ), 然后给其添加一个新的 CSS 类:jerryButton.
![](https://static001.geekbang.org/infoq/41/41c64a0d20251822192d7d5118a50b2e.png)
这个自定义的 CSS 类 jerryButton,嵌入在增强的 XML View 里,或者定义在增强项目自定义的 CSS 文件里均可。
最后的运行时效果:
![](https://static001.geekbang.org/infoq/8b/8b9baf2a821bb418319c474ec38100c3.png)
下面再来说说 SAP Commerce Cloud (电商云) 的 UI 显示风格调整。
不同于 SAP CRM Fiori 应用,SAP Commerce Cloud UI 基于开源框架 SAP Spartacus,后者使用 Angular 进行开发,并通过 core,Storefront 和 styles 这些库文件的方式,发布给客户使用。
![](https://static001.geekbang.org/infoq/1d/1d80d896378a513cf4f9009448f069da.png)
客户新建一个 Angular 应用,在 package.json 里导入 Spartacus 库文件的依赖,就可以进行 Storefront UI 的二次开发工作了。
![](https://static001.geekbang.org/infoq/a3/a393abca91491dd4c38c1ebf8af013b8.png)
SAP Commerce Cloud UI 这种基于 Spartacus 库文件的二次开发方式,使得其通过 CSS 调整 UI 风格的难度,同本文前半部分介绍的 SAP CRM Fiori 应用相比,要降低不少。
在 Partners 基于 SAP Spartacus 创建的 SAP Commerce Cloud UI Angular 应用里,有一个自动生成的 styles.scss 文件,里面有一行 import 语句,导入了 SAP Spartacus 所有标准的 CSS styles:
![](https://static001.geekbang.org/infoq/ee/ee6adb3af897746fb1d6b0678920c753.png)
我们可以在 styles.scss 文件里,对 SAP Commerce Cloud UI 的界面,按照需要进行 CSS 调整。
举个例子:假设我想调整购物车页面里这行 "ORDER SUMMARY" 的外观:
![](https://static001.geekbang.org/infoq/20/20e5438744660a61634c5aa3271e7b88.png)
在 Chrome 开发者工具里,找到其对应的选择器为:cx-order-summary h4
![](https://static001.geekbang.org/infoq/77/7798364e23b0755f7d0dbd4190279c15.png)
然后在 styles.scss 里使用该选择器,覆盖掉 Spartacus styles 库里的原始设置即可:
![](https://static001.geekbang.org/infoq/fc/fcb4086b5b3d69d13d75e3e6a5576c3f.png)
最后运行时的效果:
![](https://static001.geekbang.org/infoq/f6/f601ec31ff9c97d6e470da4d6b509b38.png)
假设我想把下图 Order Summary 和 Coupon 页面的文本颜色变成绿色,字体加粗:
![](https://static001.geekbang.org/infoq/c3/c3a54e127b38d8426387dc09b7667877.png)
为了减少工作量,避免对 Order Summary 和 Coupon 这两个区域对应的选择器,重复施加相同的 CSS 设置,我们可以将重复的 CSS 设置,定义在 %jerry-custom-div 里(类似编程语言里的宏), 然后在 cx-order-summary 和 cx-cart-coupon 里使用 @extend 直接引用这个公用定义。
![](https://static001.geekbang.org/infoq/d3/d36c2965c8f4cf6c171416678395271f.png)
最后的运行时效果:
![](https://static001.geekbang.org/infoq/cd/cdbdfa75b25b8a02f938dbcdd7664d63.png)
总结
本文以 SAP CRM Fiori 以及 SAP Commerce Cloud UI 这两个分别采用 UI5 和 Angular 开发的企业级前端应用为例,介绍了设计人员如何采用 CSS 调整来达到布局定制化的效果。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/268e8b12e4d9f1ba7795cfa32】。文章转载请联系作者。
评论