自然布局

Fusion

用于快速完成页面布局体系 (低代码搭建或源码开发),目标是不写任何布局 CSS 代码。

设计理念

  • 初衷:愿布局不需写 css 样式
  • 定位:页面内容区的布局解决方案

详细介绍:https://www.yuque.com/fusion-design/layout/yzx8g4 (需先加入 Fusion Design 语雀知识库)

预览

安装

 npm install @alifd/layout --save

使用

在项目中,引入一套 Fusion Design 主题的 Design Token, 如:

import '@alifd/theme-3/variables.css';

注:此处是为了引入布局组件所必须得 CSS Variables, 只需要保证上述的 CSS 代码生效即可,引入方式不限。

布局示例:

import { Page, Section, Block, Row, Col, Cell, P, Text, Space } from '@alifd/layout';

export default function App() {
  return (
    <Page>
      <Page.Header>Header</Page.Header>
      <Page.Content>
        <Section>
          <Block>
            <Row>
              <Cell>
                <P>
                  <Text>文本</Text>
                  <Text>文本</Text>
                </P>
              </Cell>
              <Cell>
                <P>
                  <Text>文本</Text>
                  <Text>文本</Text>
                </P>
              </Cell>
            </Row>
            <Space />
            <Col>
              <Cell>
                <P>
                  <Text>文本</Text>
                  <Text>文本</Text>
                </P>
              </Cell>
              <Cell>
                <P>
                  <Text>文本</Text>
                  <Text>文本</Text>
                </P>
              </Cell>
            </Col>
          </Block>
        </Section>
      </Page.Content>
      <Page.Footer>Footer</Page.Footer>
    </Page>
  );
}

进一步封装 Block 和 Text。

由于 Section > Block 具有强关联性(依赖 Block 对子元素宽度做计算并调整)。如果业务上需要进一步封装 Block,需要对 Block 增加类型标记,一遍 Section 能识别其 span 等属性。

同理 P > Text 也具有类似强相关性,对于 Text 的组件封装,如果希望在 P 中表现和 Text 近似,也需要标记 typeMark.

示例:

import { Page, Section, Block } from '@alifd/layout';

function NewBlock(props) {
  const { children, ...others } = props;
  // 加入新业组件逻辑
  return <Block {...others}>{children}</Block>;
}

// 标记 NewBlock 可以视为 Block 作为 Section 的子元素
NewBlock.typeMark = 'Block';

// 页面渲染可以使用 NewBlock
function App() {
  return (
    <Page>
      <Section>
        <Block span={2}>block</Block>
        <NewBlock span={10}>new block</NewBlock>
      </Section>
    </Page>
  );
}

开发

  1. 调试和预览 demo
npm run start
  1. 启动低代码预览
npm run lowcode:dev

API

Page

页面

参数 含义 类型 默认值
prefix CSS 类名前缀 string fd-layout-
minHeight 页面的最小高度,例如 calc(100vh - 52px) Number/String -
noPadding 禁用页面内边距,包含 Header, Content, Footer Boolean false
sectionGap Header、Footer、Nav、Aside 和章节之间间隙 Number -
blockGap Section 中栅格布局间隙 Number -
gridGap 小布局间隙(包含行、列、网格布局) Number -
breakPoints 断点信息 BreakPoint[] -
children 子元素 ReactNode -
onBreakPointChange 断点变更回调 (curBreakPoint, oldBreakPoint, breakPoints)=>void
interface BreakPoint {
  /**
   *  断点宽度(包含)
   */
  width: number;
  /**
   * 最大展示宽, 默认为断点宽度
   */
  maxContentWidth: number | string;
  /**
   * 列数
   */
  numberOfColumns: 1 | 2 | 4 | 8 | 12 | 16 | 24;
}

Page.Header

序章

参数 含义 类型 默认值
mode 背景色 'lining' / 'surface' / 'transparent' Enum -
noPadding 移除内边距 Boolean false
noBottomPadding 隐藏默认底部内边距 Boolean false
noBottomMargin 隐藏与内容部分的间隙(外边距) Boolean false
divider 展示分割线 Boolean -
fullWidth 保持全屏宽(不受断点 maxContentWidth 限制) Boolean false
children 子元素 ReactNode -

Page.Footer

终章

参数 含义 类型 默认值
mode 背景色 'lining' / 'surface' / 'transparent' Enum -
noTopPadding 隐藏默认顶部内边距 Boolean -
divider 展示分割线 Boolean -
fullWidth 保持全屏宽(不受断点 maxContentWidth 限制) Boolean false
children 子元素 ReactNode -

Page.Content

内容

参数 含义 类型 默认值
minHeight 页面的最小高度,例如 calc(100vh - 52px) Number/String -
children 子元素 ReactNode -

Page.Aside

右侧边栏,如有 Content,需为 Content 的子元素

参数 含义 类型 默认值
width 宽度 Number/String -
children 子元素 ReactNode -

Page.Nav

左侧导航,如有 Content,需为 Content 的子元素

参数 含义 类型 默认值
width 宽度 Number/String -
children 子元素 ReactNode -

Section

参数 含义 类型 默认值
title 标题 ReactNode -
titleAlign 标题位置,可选值 left/center Enum -
extra 附加区域(标题右侧) ReactNode -
gap 自定义内部区块(Block)的间隙 Number -
children 子元素 ReactNode -

Block

区块(节)

参数 含义 类型 默认值
mode 背景模式,可选值 transparent(自动移除内边距和标题)/surface/lining Enum -
title 标题 ReactNode -
titleAlign 标题位置,可选值 left/center Enum -
extra 附加区域(标题右侧) ReactNode -
divider 展示标题与内容之间的分割线 Boolean -
bordered 展示边框 Boolean -
noPadding 移除内边距 Boolean false
span 列宽 Number -
width 指定宽度 Number -
contentClassName 有标题时,内容区域的样式名 string -
contentStyle 有标题时,内容区域的自定义样式 CSSProperties -
children 子元素 ReactNode -

Row

参数 含义 类型 默认值
width 指定宽度 Number/String -
height 指定高度 Number/String -
autoFit 根据内容自适应宽度(当作为行列布局的子元素时生效) Boolean -
gap 自定义元素间间距 Number -
verAlign 垂直对齐方式, 可选值:top/middle/bottom/stretch/baseline Enum -
children 子元素 ReactNode -

Col

参数 含义 类型 默认值
autoFit 根据内容自适应宽度(当作为行列布局的子元素时生效) Boolean -
width 指定宽度 Number/String -
height 指定高度 Number/String -
gap 自定义元素间间距 Number -
align 水平对齐方式, 可选值:left/center/right/stretch Enum -
children 子元素 ReactNode -

Grid

网格

参数 含义 类型 默认值
cols 指定列数 number
rows 指定行数 number
minWidth 单元格最小宽度 number
maxWidth 单元格最大宽度 number
rowGap 单元格行间距, 可选值: small/medium/large/数值 Enum
colGap 单元格列间距, 可选值: small/medium/large/数值 Enum
renderItem 手动渲染单个单元格内容 (rowIndex,colIndex)=>RaxNode
children 子元素,默认应为 Cell RaxNode -

Cell

单元格,其内容默认为 flex 纵向布局

参数 含义 类型 默认值
width 指定宽度 Number/String -
height 指定高度 Number/String -
autoFit 根据内容自适应宽度(当作为行列布局的子元素时生效) Boolean -
gap 自定义内部元素的行解析 Number 0
align 内容水平对齐方式, 可选值: left/center/right Enum -
verAlign 内容垂直对齐方式, 可选值: top/middle/bottom/space-between/space-around/space-evenly Enum -
block 使用 block 布局 Boolean -
children 子元素 ReactNode -

Space

空间间隙

参数 说明 类型 默认值
direction 组件自身布局模式,可选: hoz/ver Enum hoz
size 尺寸, 可选: small/medium/large/Number Enum medium
children 子元素 ReactNode

文本

参数 说明 类型 默认值
direction 组件自身布局模式,可选: hoz/ver Enum hoz
size 尺寸, 可选: small/medium/large/Number Enum medium
children 子元素 RaxNode

P

段落

参数 说明 类型 默认值
align 水平方向对齐模式 left/center/right/space-between/space-around/space-evenly Enum 'left'
verAlign 垂直方向对齐模式 top/middle/bottom/baseline Enum 'baseline'
spacing 子元素间保持水平间距, 可选: small/medium/large/false Enum medium
hasVerSpacing 文本 节点外子元素间保持垂直间距 Boolean true
beforeMargin 段前外边距(作为第一个子元素时无效) Number 0
afterMargin 段后外边距(作为最后一个子元素时无效) Number 0
children 子元素 ReactNode -

Text

文本

参数 说明 类型 默认值
type 约束字体大小 overline/caption/body1/body2/title/h1/h2/h3/h4/h5/h6 Enum body2
delete 添加删除线样式 Boolean false
mark 添加标记样式 Boolean false
underline 添加下划线样式 Boolean false
strong 是否加粗 Boolean false
code 添加代码样式 Boolean false
component 设置标签类型 custom 'span'
color 颜色 String -

CSS 变量

自然布局默认引入了 Fusion 设计系统的 Design Tokens。 布局可自定义 CSS Variables 如下,可基于实际情况修改:

变量名 说明 默认值
--color-transparent 前景色 transparent
--color-surface 前景色 #fff
--color-lining 衬色 #f0f0f0
--page-padding-lr 页面左右内边距 var(--s-5)
--page-padding-tb 页面上下内边距 var(--s-5)
--page-header-divider-color header 分割线颜色 var(--color-line1-1)
--page-block-corner 区块圆角尺寸 var(--corner-0)
--page-block-padding-lr 区块左右内边距 var(--s-3)
--page-block-padding-tb 区块上下内边距 var(--s-3)
--page-section-title-font-color 章节标题颜色 var(--color-text1-4)
--page-section-extra-font-color 章节附加内容文本颜色 var(--color-text1-2)
--page-block-title-font-color 区块标题颜色 var(--color-text1-4)
--page-block-extra-font-color 区块附加内容文本颜色 var(--color-text1-2)
--page-section-gap 章间隙 var(--s-3)
--page-block-gap 区块间隙 var(--s-2)
--page-block-border-width 区块边框宽度 var(--line-1)
--page-block-border-color 区块边框颜色 var(--color-line1-1)
--page-grid-gap 小布局间隙 var(--s-1)
--page-p-small-spacing 段落子元素的水平小间距 var(--s-1)
--page-p-medium-spacing 段落子元素的水平中间距 var(--s-2)
--page-p-large-spacing 段落子元素的水平大间距 var(--s-4)
--page-p-el-margin 段落子元素的上下间距 var(--s-1)
--page-p-font-color 段落默认字体色 var(--color-text1-4)

基本结构

自然布局主要解决页面内容区(main 区域)的布局,不解决 Shell 层级,一般每个业务线都会有自己现成的吊顶和布局。

Header
Section 1
Section extra
Block 1
Block
Block 2
Block
Block Full
Block
Section 2
Block

Header
Section 1
Block
Section 2
Block
Block

案例1 - 控制面板

页面布局示例

自动布局页面自动布局能力
这是一个自动布局的描述信息
总销售额
¥ 126,560
日销售额 ¥12,423
访问量
88,356
日访问量 1,234
门店量
6,356
转化率 60%
门店活动效果
78%
周同比 12%
日同比11%
活动实时情况
今日交易总额
124,543,233
销售目标完成率
92%
活动剩余时间
47:05:07:495
每秒交易总额
234
销售额类别占比
占位图
销售额类别占比
占位图
销售额类别占比
占位图
消费数据
占位图

案例2 - 门户

居中对齐 demo

Alibaba Fusion Design
企业级的中后台设计系统解决方案
精选设计系统站点
Fusion Design Pro
Deep Design Pro
InTiger Design
Fusion 的能力
企业级的中后台设计系统解决方案
基于对阿里集团中后台业务的总结和抽象, 提供了一套开箱即用的核心模式
企业级的中后台设计系统解决方案
基于对阿里集团中后台业务的总结和抽象, 提供了一套开箱即用的核心模式
企业级的中后台设计系统解决方案
基于对阿里集团中后台业务的总结和抽象, 提供了一套开箱即用的核心模式
企业级的中后台设计系统解决方案
基于对阿里集团中后台业务的总结和抽象, 提供了一套开箱即用的核心模式
优秀的团队都在使用 Fusion 助力产品研发
“通过对 Fusion 组件库进行封装 ICE,淘宝实现了组件库的全面中台化。极大提高了 B2C 平台的设计协同效率。”
Alibaba Fusion
更聪明的工作,让效率突飞猛进
Work smarter, as easy as blowing off dust
Fusion 官方物料(200px height 没生效)
Fusion Next PC 组件库
Fusion Mobile 组件库
Fusion 官方推荐组件
开发者社区
Fusion Github
在 Fusion Github 开发者社群您可以提 Issue 或贡献组件
相关资源
Done-Client Sketch Plugin
BizCharts
Fusion 官方推荐组件

案例3 - 门户2

居中对齐 demo

平台服务能力介绍
Fusion Design Pro
Deep Design Pro
InTiger Design
营销创意服务
内容标签

案例4 - 表单

表单

表单布局Form Layout
描述组件之间的间距关系
标签在上
单据号
选择业务类型
收款方
收票状态
单据状态
单据备注
提交时间:
标签在左侧
单据号
选择业务类型
收款方(对齐)
收票状态
单据状态
单据备注
提交时间
分步表单
  1. 1
    填写转账信息
  2. 2
    确认转账信息
  3. 3
    完成
付款账户:frankqian
收款账户:
收款人姓名:
转账金额:

案例5 - 表格

表格相关的布局

组件间距Component Spacing
描述组件之间的间距关系
帮助信息
Id
Title
Time
Operation
100306660940
Quotation for 1PCS Nano 3.0 controller compatible
2000
100306660941
Quotation for 1PCS Nano 4.0 controller compatible
2001
100306660942
Quotation for 1PCS Nano 5.0 controller compatible
2002
100306660943
Quotation for 1PCS Nano 6.0 controller compatible
2003
100306660944
Quotation for 1PCS Nano 7.0 controller compatible
2004
1/10到第
锁列 Table 问题处理
Id
Data
Data
Data
Data
State
Action
30000
$13.02
$13.02
$13.02
$13.02
normal
$16.02
$16.02
$16.02
$16.02
normal
30002
$63.0002
$63.0002
$63.0002
$63.0002
error

案例6 - 工作台

页面布局示例

早上好, 潕量 !
美好的一天,从智能、创意、无缝的协作开始。我们将专注处理你专注的事情!
项目数
56
团队内排名
8/24
项目数
56
动态
阮小五 在 设计中台 新建项目 Fusion Design(「在」的间距丢了)
4小时前
阮小五 将 新版本迭代 更新为已发布(lastchild 间距问题)
4小时前
我的日程
SunMonTueWedThuFriSat
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
2 个日程
  • 09:00
    2小时

    财经周会
    深圳 T4-4-1;杭州 7-4-9-N
  • 11:00
    2小时

    财经周会
    深圳 T4-4-1;杭州 7-4-9-N
进行中的项目
任务名称
所属阶段
优先级
进行中
high
进行中
high
进行中
high
进行中
middle
待处理
low
待处理
low
待处理
low

响应式和断点

通过断点,可以实现区块的响应式布局

断点:
调整窗口尺寸,查看不同断点下的显示效果。 窗口宽度:
1264px
最大宽度
最大内容宽度
列数
750
750
4
960
960
8
1200
1200
12
Infinity
1200
12
响应布局(1w x 12)
span=1
span=1
span=1
span=1
span=1
span=1
span=1
span=1
span=1
span=1
span=1
span=1
响应布局(2,4,6)
span=2
span=4
span=6
动态布局演示(4w x 6)
span=4
span=4
span=4
span=4
span=4
span=4

区块

区块的样子

区块
Simple Card
SubTitle
Lorem ipsum dolor sit amet, est viderer iuvaret perfecto et. Ne petentium quaerendum nec, eos ex recteque mediocritatem, ex usu assum legendos temporibus. Ius feugiat pertinacia an, cu verterem praesent quo.
Simple Card
SubTitle
Lorem ipsum dolor sit amet, est viderer iuvaret perfecto et. Ne petentium quaerendum nec, eos ex recteque mediocritatem, ex usu assum legendos temporibus. Ius feugiat pertinacia an, cu verterem praesent quo.
Simple Card
SubTitle
Lorem ipsum dolor sit amet, est viderer iuvaret perfecto et. Ne petentium quaerendum nec, eos ex recteque mediocritatem, ex usu assum legendos temporibus. Ius feugiat pertinacia an, cu verterem praesent quo.
常见的区块
标题
基础
标题
100% x 60
标题
说明文案
100% x 60
无标题
标题
分割线&标题居中
标题
100% x 60
透明模式

段落

通过段落组织文本及各类 inline 模式的元素,自动元素间左右和上下间隙。


段落布局
段落
Fusion 简介
Fusion 是一套企业级中后台UI的解决方案,致力于解决设计师与前端在产品体验一致性、工作协同、开发效率方面的问题。通过协助业务线构建设计系统,提供系统化工具协助设计师前端使用设计系统,下游提供一站式设计项目协作平台;打通互联网产品从设计到开发的工作流。
Fusion Design 产品创建于2015年底,阿里巴巴集团中台战略背景下,由国际UED(现国际用户体验事业部)与B2B技术部成立中台DPL项目。从国际UED,天猫,商家等各类业务形态中抽象解构,通过一套设计系统协议提升设计与开发效率,以统一的物料分发工具提升团队协同能力,借助灵活的在线样式配置支撑业务的设计创新。
水平对齐方式:
内容间隙(spacing):
启用元素垂直间距:
AlibabaFusionDesign
企业级的中后台设计系统解决方案
Star
自定义间隙
实付订单实付款: ¥35.00订单编号:39876619

字体

通过段落组织文本及各类 inline 模式的元素,自动元素间左右和上下间隙。


字体
段落中的简写
段落中的纯文本
样式
默认标记代码加粗下划线删除线
颜色
绿
绿
尺寸
标题 1 标题 2标题 3标题 4标题 5标题 6正文 1正文 2水印超小字体