跳转到内容

栅格 grid

布局组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

二维排布容器:cols 定分几列,gap 走间距档位,每一格按文档序依次落格

列数

cols 收 1 到 12 的整数;各列等宽,放不下的格子自动换到下一行

cols = 2
cols = 3
cols = 4
cols = 6
槽位覆盖:侧栏定宽、正文吃掉剩下的宽度
侧栏
正文

间距档位

gap 收的是档位名不是像素:xs / sm / md / lg / xl 逐档指向一个间距令牌,行距与列距同吃这一份

gap = xs
gap = sm
gap = md
gap = lg
gap = xl
槽位覆盖

跨列与错列

span 让一格横跨几列;offset 让一格改从第 offset + 1 条列线起排,把它前面那几列空出来

span:横跨几列就占几格宽,放不下的自动挤到下一行
span = 4
span = 2
offset:起排的列线往后挪,前面那几列空着
offset = 1
offset = 2
offset = 3
两者同写:从第三条列线起排,横跨两列
offset = 2,span = 2

格内对齐

align 管每一项在自己那格里的块向落点,justify 管行内落点;两轴缺省都是铺满整格

align = start
这一格内容多
把整行撑高
共三行
align = center
这一格内容多
把整行撑高
共三行
align = end
这一格内容多
把整行撑高
共三行
align = stretch
这一格内容多
把整行撑高
共三行
justify = start
justify = center
justify = end
justify = stretch

响应式列数

cols 除了整数也收断点对象,逐档写各自的列数:窄视口一列,越宽排得越密,拖动窗口即可看到换档

cols = { base: 1, sm: 2, lg: 4 }
只写两档:cols = { base: 2, md: 3 }
不写 base:cols = { lg: 3 }

断点档位一览

四档断点取自令牌:sm 640px、md 768px、lg 1024px、xl 1280px;自窄到宽依次接管,视口到哪一档就用哪一档的列数

档位与生效宽度
档位
生效宽度
base
0(起始档)
sm
≥ 640px
md
≥ 768px
lg
≥ 1024px
xl
≥ 1280px
五档写全:cols = { base: 1, sm: 2, md: 3, lg: 4, xl: 6 }

产物

自定义元素<xh-grid>
Vue 组件XhGridItem XhGridRoot
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/grid.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="grid"root · item

Props

属性类型必填说明
alignGridAlign每一项在自己那格里的块向对齐:start / center / end / stretch / baseline,不写则铺满格高。
colsGridCols列数:1 至 12 的整数,不写按一列排。各列等宽,且每列的下限是 0,长内容不会把自己那列撑宽。 也收断点对象 { base, sm, md, lg, xl },逐档写各自的列数,没写的档沿用比它窄的那一档。
gapGridGap行列间距档位:xs / sm / md / lg / xl,不写则不留间距。档位换算成多少由皮肤定。
justifyGridJustify每一项在自己那格里的行内对齐:start / center / end / stretch,不写则铺满格宽。

connect API

connect 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
getRootProps() => T['element']
getItemProps(props?: GridItemProps) => T['element']

键盘

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

Released under The MIT License