网格布局器
将网格布局器放第一个介绍,是因为它是我第一个做出来的布局器。第一个实现它是有原因的,因为它最主要特征就是通用。在不考虑效率的前提下,它可以在页面布局的各个阶段中用到,所以把它做出来之后,我们就可以一把搞定低代码编辑器的布局能力,非常划算。我推荐你也优先实现它。在编辑态下,网格布局器采用绝对坐标来定位各个组件,所以非常容易实现鼠标点选、框选、拖动位置、拖动尺寸等基本编辑过程。当然,绝对坐标过于自由和精细,会导致很难实现画布上多组件的对齐,这点我们可以通过类似 PPT 那样的磁力线自动吸附来辅助解决。虽然磁力线自动吸附很酷,但这不是最优解!主要有两方面原因:一是工作量,实际上这个功能还挺难实现的;但这不是关键,第二点才是关键否决票,UX 规范对组件间留白有严格规定,UX 小姑娘让你留 8px,你就不能留 7px 或者 9px。你想靠鼠标拖动来做到刚刚好 8px?别开玩笑了。为了解决这个问题,我们就需要开发出更加复杂的磁力线。那最优解是啥呢?很简单,固定拖动步长。那么固定多少合适呢?我的选择是 8px。注意:一定要和 UX 团队取得一致意见,要求设计稿中,任何两个组件间的距离和尺寸必须是 8px 的整数倍。其实,8px 不是协商来的,而是对已有设计稿分析后得出的,UX 团队也认为以 8px 作为基本单位约束所有 UI 是非常合适的。所以我们在画布上拖动组件位置和尺寸时,并不是丝滑的,而是以 8px 为单位一跳一跳的。这样做就省去了开发磁力线的麻烦,又可以很容易达成 UX 规范所需的留白要求,一举两得。
卡片布局器
布局规则极简单:水平盒子会将它的直接子级按照水平排列,垂直盒子则将其直接子级垂直排列。关键点是,水平和垂直盒子支持任意层级的自由组合。这样做后,不可思议的事情就这样发生了,两个极简单的盒子通过自由组合,居然可以产生无限种可能,从而可以用它们来描述整个二维 UI。
流程编排器
这种布局器是特定场景下专用的,通用性不高,但和表单相似,在适用的场合下,会大幅提升布局效率。 此文章为9月Day04学习笔记,内容来源于极客时间《重学前端》,强烈推荐该课程!