【问题标题】:Text-overflow: ellipsis causes flex item to overflow flex container [duplicate]文本溢出:省略号导致弹性项目溢出弹性容器[重复]
【发布时间】:2017-05-08 07:14:19
【问题描述】:

我在 flex 容器中有两列。其中一列(橙色列)包含一个头像,其宽度应正好是容器的 10%。

另一列(蓝色的)包含面板,面板的标题可能很长,所以我应该通过 css 截断它。这张照片显示了我的期望:

我的期望:

但是当我尝试做text-overflow: ellipsis 时,我的第二行变得比 flex 容器更宽。这是这种行为的示例:

https://jsfiddle.net/8krtL9ev/1/

.container {
  background: #ddd;
  width: 400px;
  height: 200px;
  padding: 10px;
  display: flex;
}

.row1 {
  background: red;
  flex-basis: 10%;
  flex-shrink: 0;
}

.row2 {
  background: blue;
  flex-basis: 90%;
  margin-left: 10px;
  padding: 10px;
  display: flex;
}

.panel {
  background: green;
  flex-basis: 50%;
  overflow: hidden;
}

.panel-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
<div class="container">

  <div class="row1">
  </div>

  <div class="row2">
    <div class="panel">
      <div class="panel-title">
        <span>Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum.</span>
      </div>
    </div>
  </div>
</div>

我该如何解决这个问题?

【问题讨论】:

  • 您所需要的只是min-width: 0 .row2 (revised fiddle)。请参阅副本以获取说明。

标签: html css flexbox ellipsis


【解决方案1】:

使用width 代替flex-basis。因为在this Documentation他们提到了

9.9.3。弹性项目内在尺寸贡献

弹性项目的主要尺寸最小内容/最大内容贡献是 它的外部最小内容/最大内容大小,由它的 flex 基本大小限制 作为最大值(如果它不可增长)和/或作为最小值(如果它不是 可收缩),然后通过其最小/最大主尺寸进一步夹紧 属性。

不要忘记将宽度 calc(90% - 30px) 设置为 row2 宽度

.container {
  background: #ddd;
  width: 400px;
  height: 200px;
  padding: 10px;
  display: flex;
}

.row1 {
    background: red;
    /* flex-basis: 10%; */
    width: 10%;
    flex-shrink: 0;
}

.row2 {
    background: blue;
    /* flex-basis: 90%; */
    width: calc(90% - 30px);
    margin-left: 10px;
    padding: 10px;
    display: flex;
}

.panel {
  background: green;
  flex-basis: 50%;
  overflow: hidden;
}

.panel-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
<div class="container">

  <div class="row1">
  </div>

  <div class="row2">
    <div class="panel">
      <div class="panel-title">
        <span>Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum. Lorem ipsum.</span>
      </div>
    </div>
  </div>
</div>

【讨论】:

  • @user3735215 是的,我已经添加了解释
  • 这个答案太过分了。蓝色框溢出了容器,因为弹性项目的默认最小尺寸是min-width: auto(内容长度)。解决问题所需要做的就是用min-width: 0overflow: hidden 覆盖.row2 上的默认值。
猜你喜欢
  • 2022-07-19
  • 2021-01-23
  • 2019-06-19
  • 2016-07-13
  • 2020-04-20
  • 2021-12-17
  • 2019-09-27
  • 1970-01-01
相关资源
最近更新 更多