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

VueJS+ElementUI el-table嵌套div后无法收缩的响应式问题

问题

想把两个ElementUI的el-table并排展示,最初直接把表格放进flex布局的div里,代码如下:

<div>
    <el-table />
    <el-table />
</div>

容器CSS:

display: flex;
flex-direction: row;
gap: 30px;

这种方式运行正常,表格能随视口伸缩。

后来要给每个表格加标题,就把每个表格嵌套进垂直flex布局的innerContainer里,模板代码:

<div class="outerContainer">
    <div class="innerContainer">
        <div>Title Left</div>
        <el-table />
    </div>
    <div class="innerContainer">
        <div>Title Right</div>
        <el-table />
    </div>
</div>

对应的CSS:

.outerContainer {
    width: 100%;
    display: flex;
    flex-direction: row;
    gap: 30px;
}
.innerContainer{
    width: 100%;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

现在的问题是:扩大视口宽度时表格能正常展开,但缩小视口宽度时,表格没法跟着收缩,直接溢出视口。为什么嵌套div会破坏el-table的响应性?

原因与解决办法

核心原因

  1. innerContainer的宽度设置冲突:你给innerContainer设了width: 100%,在flex行布局的outerContainer里,这个100%会让每个innerContainer尝试占满父容器的可用宽度。当视口缩小,两个innerContainer加gap的总宽度超过outerContainer时,虽然innerContainer会被flex-shrink挤压,但它内部的el-table是垂直flex布局的子项,默认flex-shrink: 0——也就是不会自动收缩,一旦table自身的最小宽度(由列宽总和决定)超过innerContainer被挤压后的宽度,就会溢出。
  2. 直接放table时的差异:之前直接把table作为flex子项,table本身会继承flex布局的flex-shrink: 1属性,视口缩小时会跟着收缩;嵌套后这个收缩逻辑被innerContainer打断,table的收缩规则不再生效。

解决办法

有两种常用的修正方式:

  • 调整innerContainer的flex属性:把innerContainer的width: 100%改成flex: 1 1 0%,这样它会自动分配outerContainer的可用空间,并且能随视口收缩:
    .innerContainer{
        flex: 1 1 0%;
        display: flex;
        flex-direction: column;
        gap: 10px;
    }
    
  • 给table添加收缩限制:给el-table设置width: 100%; min-width: 0;,让table可以突破自身列宽的最小限制,跟着innerContainer收缩;如果不想让表格列被挤压变形,也可以给innerContainer加overflow-x: auto,让表格在宽度不够时出现横向滚动条:
    .innerContainer{
        width: 100%;
        display: flex;
        flex-direction: column;
        gap: 10px;
        overflow-x: auto;
    }
    .innerContainer el-table {
        width: 100%;
        min-width: 0;
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:47:01