logo

S2

  • 使用文档
  • API 文档
  • 图表示例
  • 在线体验
  • 更新日志
  • 所有产品antv logo arrow
  • 2.x
  • 简介
  • 快速上手
  • 基础教程
    • 基本概念
      Updated
    • 表形态
      • 透视表
        Updated
      • 明细表
        Updated
    • 字段标记
      Updated
    • 小计总计
    • 排序
      • 基础排序
        Updated
      • 组内排序
        Updated
    • 主题配置
      Updated
    • Tooltip
      Updated
    • 数据格式化
      New
    • 多行文本
      New
    • 国际化
    • 分页
      New
  • 进阶教程
    • 单元格渲染类型
      • 链接
      • 图片
        New
      • 视频
        New
      • 迷你图表
      • 结合@antv/g2
      • 自定义渲染
    • 自定义
      • 自定义 Hook
        Updated
      • 自定义行列头分组
        New
      • 自定义 Icon
        Updated
      • 自定义单元格对齐方式
        Updated
      • 自定义单元格宽高
        Updated
      • 自定义排序操作
        Updated
      • 自定义折叠/展开节点
        New
    • 交互
      • 基础交互
        Updated
      • 自定义交互
      • 隐藏列头
        Updated
      • 行列宽高调整
        Updated
      • 合并单元格
      • 滚动
        Updated
      • 复制与导出
        New
      • 高亮/选中单元格
        New
    • 分析组件
      • 简介
        New
      • 高级排序
        Updated
      • 维度切换
        Updated
      • 导出
        Updated
      • 分页
        Updated
      • 维度下钻
        Updated
    • 表格组件
      • 编辑表
      • 趋势分析表
        Updated
    • 高清适配
      Updated
    • 获取表格实例
    • 表格自适应
    • 获取单元格数据
      Updated
    • 注册 AntV/G 插件
      New
    • 透视组合图
      Experimental
    • Vue 3.0 组件 (停止维护)
  • 扩展阅读
    • 数据流处理
      • 透视表
      • 明细表
    • 布局流程
      • 透视表
      • 明细表
    • 性能介绍
      Updated
  • 贡献指南
  • 常见问题
  • S2 2.0 升级指南

表格自适应

上一篇
获取表格实例
下一篇
获取单元格数据

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

@antv/s2 @antv/s2-react @antv/s2-vue

S2 默认根据配置的 width 和 height 进行渲染:

const s2Options = {
width: 600,
height: 400,
}

注意

表格基于 Canvas 渲染,配置的宽高其实就是设置 <canvas/> 的 width 和 height, 也就是意味着 100%, 80vw 之类的配置是不生效的:

const s2Options = {
width: '100%', // ❌
height: '20vh',// ❌
}

preview

窗口自适应

如果想让表格撑满整个父容器,可以监听窗口的 resize 事件,或使用 ResizeObserver 监听容器大小变化,然后更新表格宽高

import { PivotSheet } from '@antv/s2'
import { debounce } from 'lodash'
const s2 = new PivotSheet(...)
const debounceRender = debounce(async (width, height) => {
s2.changeSheetSize(width, height)
await s2.render(false) // 不重新加载数据
}, 200)
const resizeObserver = new ResizeObserver(([entry] = []) => {
const [size] = entry.borderBoxSize || [];
debounceRender(size.inlineSize, size.blockSize)
})
// 通过监听 document.body 来实现监听窗口大小变化
resizeObserver.observe(document.body);

preview

​📊 查看 窗口自适应 demo

容器自适应

如果是容器本身大小发生改变,而不是窗口,那么可以使用 ResizeObserver 获取到实时的容器大小

import { PivotSheet } from '@antv/s2'
import { debounce } from 'lodash'
const s2 = new PivotSheet(...)
const parent = /* 你的容器节点 */
const debounceRender = debounce(async (width, height) => {
s2.changeSheetSize(width, height)
await s2.render(false) // 不重新加载数据
}, 200)
const resizeObserver = new ResizeObserver(([entry] = []) => {
const [size] = entry.borderBoxSize || [];
debounceRender(size.inlineSize, size.blockSize)
});
resizeObserver.observe(parent);
// 取消监听
// resizeObserver.unobserve(parent)

preview

​📊 查看 容器自适应 demo

React 组件

如果是使用 @antv/s2-react 的方式,可以配置 adaptive 参数开启自适应。

Adaptive 参数类型

type Adaptive =
| boolean
| {
width?: boolean;
height?: boolean;
getContainer?: () => HTMLElement;
}

配置为 boolean 值时:

  • true: 容器默认为内部的 <div class=antv-s2-wrapper>, 只有宽度自适应,高度以 options 设置的为准
  • false: 宽高都以 options 设置的为准
import { SheetComponent } from '@antv/s2-react';
<SheetComponent adaptive={true} />
<SheetComponent adaptive={false} />

也可以配置只对宽度或高度开启自适应,上面的配置等同于:

import { SheetComponent } from '@antv/s2-react';
<SheetComponent adaptive={{ width: true, height: true }} />
<SheetComponent adaptive={{ width: false, height: false }} />

还可以自定义自适应的容器:

import { SheetComponent } from '@antv/s2-react';
const adaptiveRef = React.useRef<HTMLDivElement>();
const containerId = 'containerId';
<div
id={containerId}
:style="{
width: 600,
height: 400,
}"
>
<SheetComponent
adaptive={{
width: true,
height: false,
getContainer: () => adaptiveRef.current // 或者使用 document.getElementById(containerId)
}}
/>
</div>

​📊 查看 React 组件自适应 demo

Vue 组件

如果是使用 @antv/s2-vue 的方式,可以配置 adaptive 参数开启自适应,adaptive参数的类型和使用方法与@antv/s2-react基本一致。

可以配置为 boolean 值:

<template>
<SheetComponent
:dataCfg="your-dataCfg"
:options="your-options"
:adaptive="true"
/>
<SheetComponent
:dataCfg="your-dataCfg"
:options="your-options"
:adaptive="false"
/>
</template>

也可以配置只对宽度或高度开启自适应,上面的配置等同于:

<template>
<SheetComponent
:dataCfg="your-dataCfg"
:options="your-options"
:adaptive="{ width: true, height: true }"
/>
<SheetComponent
:dataCfg="your-dataCfg"
:options="your-options"
:adaptive="{ width: false, height: false }"
/>
</template>

还可以自定义自适应的容器:

<script lang="ts">
const adaptive = {
width: true,
height: true,
getContainer: () => document.getElementById('containerId'),
};
</script>
<template>
<div
id="containerId"
style="width:600px;height:400px"
>
<SheetComponent
:dataCfg="your-dataCfg"
:options="your-options"
:adaptive="adaptive"
/>
</div>
</template>

​📊 查看 Vue 组件自适应 demo