生态产品多个设计器现已发布候选版本

查看生态总览
跳转到内容

Masonry 瀑布流 ​

将等宽、不等高的内容排列为瀑布流。

用法 ​

按最短列排列卡片

组件结构 ​

加粗的是必需部件。

data-scope="masonry":root · column · item

示例 ​

响应式列 ​

根据容器宽度调整列数

间距 ​

设置列与项目之间的间距

sm
lg

顺序排列 ​

按文档顺序逐列填充

设计指引 ​

何时使用 ​

  • 展示图片墙、卡片流或长短不一的摘要。
  • 希望内容按最短列排列并减少空白。

何时不用 ​

特性 ​

  • 默认按最短列排列,也支持按顺序逐列填充。
  • 支持固定列数和响应式列数。
  • 支持五档行列间距。

组合 ​

最佳实践 ​

  • 图片应提供宽高或宽高比,减少加载后的重排。
  • 避免在会重排的项目中放置不可恢复的交互状态。
  • Web Components 需按最大列数提供空的 column 节点。

反模式 ​

  • 不要用 CSS 多栏替代瀑布流布局。
  • 不要对有严格顺序的内容使用最短列策略。
  • 不要用项目外边距代替 gap。

API 参考 ​

产物 ​

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

Props ​

属性类型必填说明
columnsMasonryColumns列数,未提供时按三列。也接受断点对象 { base, sm, md, lg, xl },逐档写各自的列数, 未写的档沿用更窄的一档。换档依据容器自身的宽度,不是视口宽度。
gapMasonryGap列与列、项与项之间的间距档位:xs / sm / md / lg / xl,未提供时不留间距。档位对应的数值由皮肤决定。
sequentialboolean按文档序逐列填充:项分段落入各列,阅读顺序仍是先走完左列,再走下一列。 未提供时最短列优先,视觉上更齐平,但相邻的两项未必相邻。

connect API ​

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

成员类型说明
getRootProps() => T['element']
getColumnProps(props: MasonryColumnProps) => T['element']
getItemProps(props: MasonryItemProps) => T['element']

无障碍 ​

键盘 ​

规格出处:W3C APG

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

  • 最短列策略会改变 DOM 顺序。
  • 顺序有意义的内容使用 sequential。
  • 需要稳定焦点顺序时使用栅格。

样式参考 ​

皮肤 ​

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

数据属性 ​

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

部件属性值
rootdata-gapprops.gap
rootdata-sequential''(条件成立时才出现)
columndata-indexString(column.index)
itemdata-columnString(item.column)
itemdata-indexString(item.index)

CSS 变量 ​

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

变量部件CSS 属性状态默认来源说明
--xh-masonry-gapcolumn
root
gapdefault
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
masonry 的 column、root 部件 gap 覆盖槽。

动效 ​

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

响应式 ​

  • 响应式列数根据容器宽度计算。
  • 内容或容器尺寸变化后自动重新排列。

RTL ​

  • 列顺序和间距自动适配 RTL。

Released under The MIT License