You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置Vuetify v-data-table组件的动态自适应高度

效果示意图

使用<v-data-table>组件实现占满可用高度的效果时,最初的实现方式是给组件添加height="70vh",但这只是临时变通方案:只要修改顶部“Devices”工具栏的高度,就必须同步调整表格的高度值,维护成本很高。
下面说明动态自适应高度的实现方法。


预期目标

仅通过如下基础配置,就让表格自动计算适配高度:

<v-data-table
  :headers="headers"
  :items="items"
  height="100%"
  fixed-header
  disable-pagination
></v-data-table>

第一步:给外层容器设置明确高度

CSS中百分比高度生效的前提是父元素有明确的高度值,因此首先要给包裹表格的外层标签显式设置高度:

<template>
  <!-- $vuetify.application 存储了全局布局相关的尺寸变量 -->
  <v-container :style="{ height: `calc(100vh - ${$vuetify.application.bar}px)` }">
    <!-- 表格放在这个容器内部 -->
  </v-container>
</template>

第二步:适配v-data-table的DOM结构

<v-data-table>最终渲染的DOM结构如下:

<div class="v-data-table ...">
  <div class="v-data-table__wrapper">表格滚动区域</div>
  <div class="v-data-footer">分页/页脚区域</div>
</div>

给组件设置height="100%"时,高度实际只会作用在内部的v-data-table__wrapper滚动容器上,要让整体高度符合预期,还需要给组件最外层的div也设置100%高度:

<template>
  <v-container :style="{ height: `calc(100vh - ${$vuetify.application.bar}px)` }">
    <v-data-table
      style="height: 100%;"
      :headers="headers"
      :items="items"
      height="100%"
      fixed-header
      disable-pagination
    ></v-data-table>
  </v-container>
</template>

第三步:扣除固定区域高度

表格默认的页脚高度为59px,需要从总高度里扣除这部分,避免内容溢出:

<!-- 核心代码片段 -->
<v-data-table
  style="height: 100%;"
  :headers="headers"
  :items="items"
  height="calc(100% - 59px)"
  fixed-header
  disable-pagination
></v-data-table>

方案局限性

以上方案可以满足基础使用需求,但存在两个明显的不足:

  • 硬编码了默认页脚高度59px,如果后续Vuetify版本迭代调整了默认页脚尺寸,或者自定义了页脚样式,布局就会错位,不属于最佳实践
  • 如果给组件添加了#top这类自定义插槽,需要额外通过JS计算插槽内容的高度,再手动从总高度里扣除,实现比较繁琐

存在顶部插槽时,代码需要调整为如下形式:

<!-- 核心代码片段 -->
<v-data-table
  style="height: 100%;"
  :headers="headers"
  :items="items"
  :height="`calc(100% - 59px - ${topSlotHeight}px)`"
  fixed-header
  disable-pagination
></v-data-table>

如果只需要快速实现可用效果,上述代码完全可以满足需求。


内容的提问来源于stack exchange,提问作者PyKKe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:45:41