Skip to content

MultiColumnLayout 多列布局

根据容器宽度自动计算列数的响应式布局组件,适用于宽屏显示多个"手机屏幕"。

导入

ts
import { MultiColumnLayout } from '@xcloud/ui-mobile';

示例

基础用法

tsx
import { MultiColumnLayout } from '@xcloud/ui-mobile';

function Example() {
  return (
    <div style={{ height: '100vh' }}>
      <MultiColumnLayout>
        <MobilePage />  {/* 会根据容器宽度重复显示 */}
      </MultiColumnLayout>
    </div>
  );
}

自定义配置

tsx
<MultiColumnLayout
  config={{
    columnWidth: '375px',  // 每列宽度
    gap: '16px',           // 列间距
    minColumns: 1,         // 最少列数
    maxColumns: 3,         // 最多列数
    autoColumns: true,     // 自动计算列数
  }}
>
  <MobilePage />
</MultiColumnLayout>

自定义列内容

tsx
<MultiColumnLayout
  config={{
    columns: [
      {
        content: <ListPage />,
        width: '375px',
      },
      {
        content: <DetailPage />,
        width: '480px',
      },
    ],
  }}
/>

API

MultiColumnLayout

属性类型默认值说明
childrenReactNode-子内容(未提供 columns 时使用)
configPageLayoutConfig['multiColumn']-布局配置
enableScrollbooleantrue是否开启列内滚动
animationConfigAnimationConfig-动画配置

Config 配置

属性类型默认值说明
columnsColumnConfig[]-自定义列配置数组
columnWidthstring'375px'默认列宽
gapstring'16px'列间距
autoColumnsbooleantrue自动计算列数
minColumnsnumber1最少列数
maxColumnsnumber3最多列数

ColumnConfig

属性类型说明
contentReactNode列内容
widthstring列宽度
minWidthstring最小宽度
maxWidthstring最大宽度

使用场景

1. 宽屏并排显示

tsx
// 在大屏幕上并排显示 2-3 个移动端页面
<MultiColumnLayout
  config={{
    maxColumns: 3,
    columnWidth: '375px',
  }}
>
  <MobilePage />
</MultiColumnLayout>

2. 固定多列内容

tsx
// 列表-详情布局
<MultiColumnLayout
  config={{
    columns: [
      { content: <UserList />, width: '300px' },
      { content: <UserDetail />, width: '500px' },
    ],
  }}
/>

最佳实践

  1. 容器高度: 确保父容器有明确的高度

    tsx
    <div style={{ height: '100vh' }}>
      <MultiColumnLayout>...</MultiColumnLayout>
    </div>
  2. 响应式设计: 配合媒体查询调整列数

    tsx
    const isMobile = useMediaQuery('(max-width: 768px)');
    <MultiColumnLayout
      config={{ maxColumns: isMobile ? 1 : 3 }}
    >
      ...
    </MultiColumnLayout>
  3. 性能优化: 避免在每列中渲染大量数据

基于 MIT 许可发布