2.4.1 • Published 7 months ago

@alifd/layout v2.4.1

Weekly downloads
3
License
MIT
Repository
github
Last release
7 months ago

自然布局

用于快速完成页面布局体系 (低代码搭建或源码开发),目标是不写任何布局 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

页面

参数含义类型默认值
prefixCSS 类名前缀stringfd-layout-
minHeight页面的最小高度,例如 calc(100vh - 52px)Number/String-
noPadding禁用页面内边距,包含 Header, Content, FooterBooleanfalse
sectionGapHeader、Footer、Nav、Aside 和章节之间间隙Number-
blockGapSection 中栅格布局间隙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移除内边距Booleanfalse
noBottomPadding隐藏默认底部内边距Booleanfalse
noBottomMargin隐藏与内容部分的间隙(外边距)Booleanfalse
divider展示分割线Boolean-
fullWidth保持全屏宽(不受断点 maxContentWidth 限制)Booleanfalse
children子元素ReactNode-

Page.Footer

终章

参数含义类型默认值
mode背景色 'lining' / 'surface' / 'transparent'Enum-
noTopPadding隐藏默认顶部内边距Boolean-
divider展示分割线Boolean-
fullWidth保持全屏宽(不受断点 maxContentWidth 限制)Booleanfalse
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/centerEnum-
extra附加区域(标题右侧)ReactNode-
gap自定义内部区块(Block)的间隙Number-
children子元素ReactNode-

Block

区块(节)

参数含义类型默认值
mode背景模式,可选值 transparent(自动移除内边距和标题)/surface/liningEnum-
title标题ReactNode-
titleAlign标题位置,可选值 left/centerEnum-
extra附加区域(标题右侧)ReactNode-
divider展示标题与内容之间的分割线Boolean-
bordered展示边框Boolean-
noPadding移除内边距Booleanfalse
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/baselineEnum-
children子元素ReactNode-

Col

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

Cell

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

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

Space

空间间隙

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

文本

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

P

段落

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

Text

文本

参数说明类型默认值
type约束字体大小 overline/caption/body1/body2/title/h1/h2/h3/h4/h5/h6Enumbody2
delete添加删除线样式Booleanfalse
mark添加标记样式Booleanfalse
underline添加下划线样式Booleanfalse
strong是否加粗Booleanfalse
code添加代码样式Booleanfalse
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-colorheader 分割线颜色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)
2.4.1

7 months ago

2.4.0

8 months ago

2.3.0

9 months ago

2.1.1-beta.1

10 months ago

2.2.1

10 months ago

2.2.0

10 months ago

2.2.3

10 months ago

2.2.2

10 months ago

2.2.4

10 months ago

2.1.1

10 months ago

2.1.0

11 months ago

2.1.0-beta.1

11 months ago

2.0.11

1 year ago

2.0.12

1 year ago

2.0.10

1 year ago

2.0.9

1 year ago

2.0.10-beta.0

1 year ago

2.0.7-beta.1

1 year ago

2.0.3

1 year ago

2.0.2

1 year ago

2.0.5

1 year ago

2.0.4

1 year ago

2.0.7

1 year ago

2.0.6

1 year ago

2.0.8

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

2.0.0-beta.2

2 years ago

2.0.0-beta.1

2 years ago

2.0.0-beta.4

1 year ago

2.0.0-beta.3

2 years ago

1.0.5-beta.5

2 years ago

1.0.5-beta.6

2 years ago

1.0.5-beta.3

2 years ago

1.0.5-beta.4

2 years ago

1.0.5-beta.2

2 years ago

1.1.0-beta.1

2 years ago

1.0.2

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.5-beta.1

2 years ago

1.0.4-beta.0

2 years ago

1.0.4-beta.1

2 years ago

1.0.4-beta.2

2 years ago

1.0.4-beta.4

2 years ago

1.0.2-beta.7

2 years ago

1.0.2-beta.8

2 years ago

1.0.1

2 years ago

1.0.2-beta.2

2 years ago

1.0.2-beta.3

2 years ago

1.0.2-beta.1

2 years ago

1.0.2-beta.6

2 years ago

1.0.1-beta.6

2 years ago

1.0.1-beta.5

2 years ago

1.0.2-beta.4

2 years ago

1.0.1-beta.4

2 years ago

1.0.2-beta.5

2 years ago

1.0.1-beta.3

2 years ago

1.0.1-beta.9

2 years ago

1.0.1-beta.8

2 years ago

1.0.1-beta.7

2 years ago

1.0.0

2 years ago

1.0.1-beta.2

2 years ago

1.0.0-beta.2

2 years ago

1.0.1-beta.1

2 years ago

1.0.0-beta.3

2 years ago

1.0.1-beta.0

2 years ago

1.0.0-beta.4

2 years ago

1.0.0-beta.5

2 years ago

1.0.0-beta.1

2 years ago

1.0.0-beta.6

2 years ago

1.0.0-beta.7

2 years ago

1.0.0-beta.8

2 years ago

1.0.0-beta.9

2 years ago

0.2.0-beta

5 years ago

0.1.20

5 years ago

0.1.19

5 years ago

0.1.18

5 years ago

0.1.17

5 years ago

0.1.16

5 years ago

0.1.15

5 years ago

0.1.14

5 years ago

0.1.13

5 years ago

0.1.12

5 years ago

0.1.11

5 years ago

0.1.10

5 years ago

0.1.9

5 years ago

0.1.8

5 years ago

0.1.7

5 years ago

0.1.6

5 years ago

0.1.5

5 years ago

0.1.4

5 years ago

0.1.3

5 years ago

0.1.2

5 years ago

0.1.1

5 years ago