在shadcn/ui中实现表头固定表体滚动后,表体缩列问题如何修复?
修复固定表头+滚动表体时列对齐失效的问题
你遇到的问题根源是给TableBody添加了block类,破坏了表格默认的布局规则,导致表体单元格无法和表头列对齐,全部挤到第一列里了。
修复步骤:
- 移除
TableBody上的block类,保留overflow-y-auto和h-[500px]来实现滚动效果 - 给每个
TableCell加上对应TableHead的宽度类,确保列宽完全匹配 - 外层
Table添加table-fixed类(Tailwind样式),强制表格按设置的列宽渲染,避免内容撑开列
修改后的代码:
export default function TransactionTable() { return ( <Table className="table-fixed"> <TableHeader className=""> <TableRow> <TableHead className="w-1/5 px-2 py-1">Date</TableHead> <TableHead className="w-2/5 px-2 py-1">Title</TableHead> <TableHead className="w-1/5 px-2 py-1">Category</TableHead> <TableHead className="w-1/5 px-2 py-1">Amount</TableHead> </TableRow> </TableHeader> <TableBody className="overflow-y-auto h-[500px]"> {transactions.map((t) => ( <TableRow key={t.id}> <TableCell className="w-1/5 px-2 py-1">{t.date}</TableCell> <TableCell className="w-2/5 px-2 py-1">{t.title}</TableCell> <TableCell className="w-1/5 px-2 py-1">{t.category}</TableCell> <TableCell className="w-1/5 px-2 py-1">{t.amount}</TableCell> </TableRow> ))} </TableBody> </Table> ); }
关键改动说明:
table-fixed:让表格采用固定布局模式,列宽完全由你设置的宽度类决定,不会被单元格内容自动撑开- 移除
block:恢复表格的默认布局逻辑,保证表头和表体的列结构对齐 - 单元格同步宽度:每个
TableCell和对应TableHead使用相同的宽度类,从根源上避免列错位
内容的提问来源于stack exchange,提问作者ag2byte
相关产品推荐
相关产品推荐

