el-table配合flex布局时不缩小

当这个侧边栏收缩再次展开的时候

这个主

区域的内容就会出现横向的滚动条

像这样后来呢我又试了一下

其实只要我们把浏览器拉窄

大家看

他就会出现滚动条

原因是这个表格没有跟着变窄

所以他撑宽了主区域

但是呢如果我现在刷新

大看表格就变窄了

而且这时候我才把浏览器拖拽变宽

大家看表格是跟着变宽的

也就是说:这个表格

会跟着变宽

大家看:但不会跟着变窄

这就很神奇

那难道

我们设置的这个百分之百的宽度

不起作用吗

我们给它设成%

80看一下

大家看:现在宽度是80%我们拉窄

哎80%可以

那我们再试一下侧边栏

大家看:也没问题

90%呢

大家看:也没问题

侧边栏

也没问题

也就是说:

他只有在百分之百的时候有问题

我们用99%试试

大概是可以的哈

但仔细看

这个表格

还是有个慢慢缩小回来的动画

看那为什么会这样呢

说到这里呢

我们要从 el-table 的这个功能说起

他有一个固定表头的功能

那这个功能是怎么实现的呢

我们来检查一下他的元素

也就是说:他为了让上面这个表头能

固定住

做了一个假的表格在这浮动着

然后下边的表格在这滚动

我们把这个删掉试一下

大家看上面就没有了

所以:el-table 为了保持他这个表头

大家看这个表头

和他下面这一列的内容能对得齐

所以他一定要用固定的宽度来设置好

上面的表头有多宽

下面的表格有多宽

包括这两个表格的

每一列的宽度一定要一致

否则就容易出现对不齐的情况

所以呢:即使我们

给这个表格设置了一个百分比的宽度

但在页面上,el-table

还是会把它写一个固定的宽度

我们来检查一下

大家看:现在是556像素

我们把它拉窄一点

看看他一直在变

那这个动作是由 js 来完成的

也就是说:里面这个表格宽度的变化

一定是由 js

监听到了

浏览器尺寸发生变化之后来实现的

好那这是一个关键的结论

那问题就来了

为什么同样是浏览器缩放

他拉宽就可以、拉窄就不行呢?

这就涉及到了另一个

关于 flex 布局的知识点

我们来看一下这个demo

这里有一个横向的 flex 布局

他们整体

会占用浏览器70%的宽度

所以呢当我拉伸的时候

大家看

主区域会跟着变

比如说主区域被设置了 flex: 1

他会自动收缩和填充满剩余的空间

那么我在里边写点元素大家看一下

假如我写点文字

当我再次拉伸的时候大家看

只要我的黄色区域

一旦小于了文字的宽度以后

他就不会再缩小了

也就是说:这个flex是1的容器

他的宽度是不会小于他

里面内容的宽度

他宽可以

但是缩小的时候他是不会小于里面

内容的宽度

这是默认的情况下

那回过头来我们再说刚才的table

我们把这里边再放一个刚才的table

啊大家看

我们把它在缩小的时候

为什么它不生效呢 (el-table 不缩小)

原因是由于这个el-table

被设置了一个固定宽度

而这个固定的宽度

恰好等于了

他外面这个(flex:1的容器)的宽度

导致了我们再去缩小他的时候

这个黄色的容器不会再缩小了

这样呢就导致里面的 el-table

不会接收到这个浏览器缩放的事件

所以

他就不会去用 js 改变自身的宽度

那怎么解决这个问题呢

我们再回过头来看一下

当他是这些文字的时候

我们给他加一个 overflow: auto

我们再来看一下

缩小

大家看他就会缩小了

但是呢他下边会出现滚动条

当然了我们还可以把它设置成hidden

这样呢他就看不到后面内容了

他也不能滚动了

但是呢他不

他还是会缩小的

那么只要我们设置了这样的

overflow

意味着不管里边的内容有多大

我们外面黄色的容器都会一直缩小

所以即使里面放了一个表格

这个表格也会接收到

浏览器缩放的这么一个事件

他就会自己再去改变他自身的宽度

我们再来试一下

把这个换成

el-table

我们再来看一下

刷新

拉宽没问题

大家注意看拉窄

也没问题了

那还有一种设置方法呢

就是我们把这个

flex:1 的容器

加一个最小宽度也可以解决

大家看

也是可以的

因为只要你想办法让里面的el-table

能接收到浏览器缩放的这么一个事件

他就可以实现这个效果

所以我们再回到

刚才这个问题怎么来解决呢

我们找到他这个main布局

我们给他加一个

overflow

等于 auto

我们再来试一下刷新

大家看这样就解决了

或者我们给他换成

最小宽度

等于0

我们再来试一下

变宽变窄也没问题

最后更新于