@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
69 lines (43 loc) • 2.22 kB
Markdown
name: column-sizing
description: >
Use columnSizingFeature numeric size, minSize, maxSize, getSize, getStart, getAfter, and total-size APIs in table, grid, or flex CSS. Load for auto or percentage misconceptions and sizing/pinning layout mismatch.
metadata:
{ type: sub-skill, library: '@tanstack/table-core', library_version: '9.0.0' }
requires: ['core', 'table-features']
sources:
- 'TanStack/table:docs/framework/react/guide/column-sizing.md'
- 'TanStack/table:packages/table-core/src/features/column-sizing'
- 'TanStack/table:examples/react/column-sizing'
This skill builds on `core` and `table-features`. Sizing is numeric state; translating it to layout is a renderer decision.
## Setup
```ts
import { columnSizingFeature, tableFeatures } from '@tanstack/table-core'
export const features = tableFeatures({ columnSizingFeature })
export const defaultColumn = { size: 180, minSize: 80, maxSize: 480 }
```
## Core Patterns
```ts
cell.style.width = `${cell.column.getSize()}px`
tableElement.style.width = `${table.getTotalSize()}px`
```
Apply the same model sizes consistently to headers, cells, and pinned offsets.
## Common Mistakes
### [HIGH] Expecting state to style DOM
Wrong: `const options = { defaultColumn: { size: 180 } }`
Correct: `cell.style.width = `${cell.column.getSize()}px``
Numeric state does not apply CSS to headless markup.
Source: `docs/framework/react/guide/column-sizing.md#column-size-apis`
### [HIGH] Passing CSS sizes into numeric APIs
Wrong: `const column = { size: '25%' }`
Correct: `const column = { size: 240 }`
Table sizing state is numeric; percentages and auto layout belong in renderer CSS.
Source: `packages/table-core/src/features/column-sizing/columnSizingFeature.types.ts`
### [HIGH] Letting content override offsets
Wrong: `cell.style.minWidth = 'max-content'`
Correct: `cell.style.width = `${column.getSize()}px`; cell.style.overflow = 'hidden'`
If rendered width differs from the model, totals and pinning offsets no longer match geometry.
Source: `examples/react/column-sizing/src/main.tsx`
## API Discovery
Inspect `node_modules/@tanstack/table-core/dist/features/column-sizing/` for defaults and region-aware offset signatures.