生态产品多个设计器现已发布正式版

查看生态总览
跳转到内容

Flex 弹性布局 ​

沿水平或垂直方向排列内容。

用法 ​

水平排列内容

组件结构 ​

加粗的是必需部件。

data-scope="flex":root · split

示例 ​

方向 ​

设置水平或垂直排列

对齐与分布 ​

对齐内容并分配剩余空间

间距 ​

使用预设间距

紧凑
标准
宽松

换行与行内 ​

换行排列或随文字排布

分隔符 ​

在相邻内容之间添加分隔符

响应式排布 ​

方向、对齐、分布与间距都可以按视口逐档书写:窄屏竖排、md 起横排并拉开间距

设计指引 ​

何时使用 ​

  • 排列按钮、图标、标签或表单项。
  • 控制内容的对齐、分布、间距和换行。
  • 在相邻内容之间插入统一的分隔符。

何时不用 ​

  • 二维布局或跨列内容使用栅格。
  • 分隔页面区域使用分隔线。
  • 仅需一个固定间距时可直接使用 CSS。

特性 ​

  • 支持水平、垂直和行内布局。
  • 支持五档间距、对齐和主轴分布。
  • 支持换行和自动分隔符。
  • 方向、对齐、分布与间距都接受断点对象 { base, sm, md, lg, xl },与栅格同一套档位按视口逐档接管;没写对齐时交叉轴的缺省对齐跟着当档的方向走。Web Components 在特性上写 JSON 对象。

组合 ​

最佳实践 ​

  • 优先使用间距档位保持页面节奏一致。
  • 可换行内容使用 gap,不要用子项外边距拼接。
  • 动态移除可聚焦内容时,由业务层处理焦点交接。

反模式 ​

  • 不要用多层 Flex 模拟二维网格。
  • 不要用负外边距修正对齐。
  • 不要在分隔符中放置有意义的内容。

API 参考 ​

产物 ​

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

Props ​

属性类型必填说明
alignFlexResponsive<FlexAlign>交叉轴对齐:start / center / end / stretch / baseline,未提供时横向按中线对齐、纵向拉伸。 也接受断点对象逐档书写,没写的档沿用更窄的一档。
gapFlexResponsive<FlexGap>子项间距档位:xs / sm / md / lg / xl,未提供时不留间距。档位对应的数值由皮肤决定。也接受断点对象逐档书写。
inlineboolean容器按行内盒排版,宽度收缩到内容。
justifyFlexResponsive<FlexJustify>主轴分布:start / center / end / between / around / evenly,未提供时子项从主轴起点排列。也接受断点对象逐档书写。
orientationFlexResponsive<Orientation>主轴方向:horizontal 横向、vertical 纵向,默认 horizontal。 也接受断点对象 { base, sm, md, lg, xl }:窄屏竖排、宽屏横排这类切换逐档书写; 没写 align 时交叉轴的缺省对齐跟着当档的方向走。
wrapboolean一行放不下时换行。

插槽 ​

仅列出带载荷的插槽。

Vue 组件插槽载荷说明
XhFlexdefault—子项,按写入的顺序排列。
XhFlexsplit—分隔符的内容:写了它,组件在每两个子项之间各铺设一个分隔符部件,逐缝隙重新求值一次。

React 适配器 props ​

只列各组件自己声明的那些:继承自 ComponentPropsWithRef 的 DOM 属性不在其中,根组件上与上面 Props 表同名的也不重复列。Vue 的对应物是上面的插槽表。

React 组件属性类型必填说明
XhFlexsplitReactNode分隔符的内容:提供后,组件在每两个子项之间各铺设一个分隔符部件。

connect API ​

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
getRootProps() => T['element']
getSplitProps() => T['element']分隔符节点。它是装饰件,恒带 aria-hidden:一排中夹杂的竖线被逐条朗读只会打断内容。

无障碍 ​

键盘 ​

规格出处:W3C APG

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

ARIA ​

以下属性由 connect 生成。

部件属性值
splitaria-hidden'true'
  • 分隔符自动隐藏于辅助技术。
  • 容器不预设语义角色。

样式参考 ​

皮肤 ​

@xihan-ui/styles/flex.css 按 [data-scope="flex"][data-part="root"] 部件选择器书写,发布产物以挂载类 .xh-scope-flex 代替其中的 data-scope(特异性相同),位于 xihan.components 层。覆盖样式使用 xihan.overrides,部件选择器照常可用。

数据属性 ​

由 connect 生成;条件不成立时不输出无值属性。

部件属性值
rootdata-alignalign.base
rootdata-align-lgalign.lg
rootdata-align-mdalign.md
rootdata-align-smalign.sm
rootdata-align-xlalign.xl
rootdata-gapgap.base
rootdata-gap-lggap.lg
rootdata-gap-mdgap.md
rootdata-gap-smgap.sm
rootdata-gap-xlgap.xl
rootdata-inline''(条件成立时才出现)
rootdata-justifyjustify.base
rootdata-justify-lgjustify.lg
rootdata-justify-mdjustify.md
rootdata-justify-smjustify.sm
rootdata-justify-xljustify.xl
rootdata-orientationorientation.base
rootdata-orientation-lgorientation.lg
rootdata-orientation-mdorientation.md
rootdata-orientation-smorientation.sm
rootdata-orientation-xlorientation.xl
rootdata-wrap''(条件成立时才出现)

CSS 变量 ​

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-flex-gaprootgap@media (min-width: 1024px)
@media (min-width: 1280px)
@media (min-width: 640px)
@media (min-width: 768px)
default
gap-lg=lg
gap-lg=md
gap-lg=sm
gap-lg=xl
gap-lg=xs
gap-md=lg
gap-md=md
gap-md=sm
gap-md=xl
gap-md=xs
gap-sm=lg
gap-sm=md
gap-sm=sm
gap-sm=xl
gap-sm=xs
gap-xl=lg
gap-xl=md
gap-xl=sm
gap-xl=xl
gap-xl=xs
gap=lg
gap=md
gap=sm
gap=xl
gap=xs
--xh-layout-gap-lg
--xh-layout-gap-md
--xh-layout-gap-sm
--xh-layout-gap-xl
--xh-layout-gap-xs
--xh-space-0
flex 的 root 部件 gap 覆盖槽。

动效 ​

本组件皮肤不含过渡与关键帧,也没有脚本驱动的动效:状态一变,外观立即到位。

响应式 ​

皮肤按视口分档:min-width: 1024px · min-width: 1280px · min-width: 640px · min-width: 768px。

RTL ​

  • 使用逻辑方向属性,自动适配 RTL。

Released under The MIT License