为什么flex为1的元素总是压缩别的固定宽高元素

更新时间: 2025-05-30 08:20:48

经常遇到使用flex的时候,各种元素的表现不像我预期的那样,有时固定宽高的元素会被flex为1的元素压缩。例如:

a元素,我固定了高度为100
b元素,我的flex为1;b元素,我的flex为1;b元素,我的flex为1;b元素,我的flex为1;我的flex为1;我的flex为1;我的flex为1
c元素,我固定了高度为100
.flex-demo1 {
    width: 200px;
    display: flex;
    flex-direction: column;
    height: 300px;
    .a {
        height: 100px;
        background: red;
    }
    .b {
        flex: 1;
        background: yellow;
    }
    .c {
        height: 100px;
        background: green;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

可以使用F12看到,a元素和b元素的实际高度明显是小于100的, 而实际上我是想要中间flex为1的元素不要挤占别的元素的空间

# 解决

a元素,我固定了高度为100
b元素,我的flex为1;b元素,我的flex为1;b元素,我的flex为1;b元素,我的flex为1;我的flex为1;我的flex为1;我的flex为1
c元素,我固定了高度为100

有两种解决方案:

  • 其一是给a和b设置 flex-shrink:0 ,不允许收缩
  • 其二是给b设置min-height:0; 给其设置最小高度