文本溢出:省略号导致flex项溢出flex容器

时间:2016-12-22 15:47:06

标签: html css css3 flexbox ellipsis

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

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

我的期望:

What I expect

但是当我尝试text-overflow: ellipsis时,我的第二行变得比灵活容器更宽。以下是此行为的示例:

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>
&#13;
&#13;
&#13;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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

  

9.9.3。 Flex项目内在大小贡献

     

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>