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

Vuetify v-expand-transition平滑展开时如何正确添加上下边距间距

解决方案

v-expand-transition的过渡动画基于元素offsetHeight的动态计算,上下边距/内边距如果未被正确纳入高度计算范围就会导致动画卡顿,以下是3种可落地的实现方案:

方案1:内层嵌套容器承载间距(推荐)

直接把需要的上下间距加在过渡直接子元素的内层容器上,过渡直接子元素保持无上下边距,高度计算完全包含内层边距,不会出现异常。
修改后的代码如下:

<v-card class="mb-5">
  <v-card-title class="justify-space-between pb-0">
    <slot name="tableTitle"></slot>
    <v-btn icon @click="toggleBtn = !toggleBtn"><v-icon>mdi-eye</v-icon></v-btn>
  </v-card-title>

  <v-expand-transition>
    <v-card-text v-show="toggleBtn" class="py-0"> <!-- 直接子元素清除上下内边距 -->
      <!-- 内层容器承载所有需要的间距 -->
      <div class="pt-4 pb-4"> 
        <v-simple-table fixed-header height="300px">
          <template v-slot:default>
            <tbody>
              <tr v-for="item in tasks" :key="item.name">
                <td class="font-weight-medium" style="width: 70%">{{ item.name }}</td>
                <td class="text-orange">{{ item.due }}</td>
              </tr>
            </tbody>
          </template>
        </v-simple-table>
      </div>
    </v-card-text>
  </v-expand-transition>
</v-card>

方案2:透明边框替代上下边距

无需额外嵌套,将需要的上下间距转换为同背景色的边框,边框会被纳入offsetHeight计算,不会影响过渡效果:

/* 给过渡的直接子元素添加该类即可 */
.spacing-with-border {
  border-top: 16px solid #fff; /* 16px对应你需要的上边距,颜色和父容器背景一致 */
  border-bottom: 16px solid #fff; /* 16px对应你需要的下边距 */
}

方案3:外部间距迁移到父容器

如果需要的是过渡组件和周边元素的间距,直接把间距加在父级v-card的内边距上,不要加在过渡组件或其直接子元素上即可。

参考效果示意图:
效果示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:06:03