flex布局保持内容不超出容器

2021/8/4 CSS

有如下的布局:

<div class="container">
  <div class="left">Left</div>
  <div class="right">
    <div class="right-content">
      Right: Lorem ipsum dolor sit amet consectetur adipisicing elit. Aspernatur, expedita.
    </div>
  </div>
</div>
1
2
3
4
5
6
7
8
.container {
  width: 200px;
  height: 200px;
  border: 1px solid #ccc;
  display: flex;
}

.left {
  /* width: 50px; */
  flex: 0 0 50px;
  background-color: cadetblue;
}

.right {
  flex: 1;
}

.right-content {
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  word-break: break-all;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

此时按理说右边的元素宽度应该为150,right-content宽度也是150,内容应该超出隐藏,但是结果并不是这样。

解决办法:

  • right元素设置宽度为0,width: 0;
  • right元素设置超出隐藏,overflow: hidden;

原因大概是因为right元素虽然是flex: 1;,占满了剩余的所有空间,但是自己的宽度还是会被自己的子元素撑开,导致子元素不会被超出隐藏,经过测试只要设置一个宽度在[0, 剩余宽度]之间的任意值(即设置一个比flex: 1;能拿到的最大宽度小的值,最终的值都是flex: 1;拿到的宽度)都可以达到预期效果。设置overflow: hidden;也是可以的,这样宽度也是flex: 1;拿到的宽度。

参考文章

最近更新: 2025年03月13日 17:49:47