【问题标题】:text-overflow ellipsis on flex child not working [duplicate]flex child上的文本溢出省略号不起作用[重复]
【发布时间】:2018-01-30 11:37:38
【问题描述】:

我有flex 的容器。我希望中间的孩子占据整个空间,所以我将其设置为flex: 1。到目前为止一切顺利。

下一个级别是中间孩子有 2 个孩子,所以我也想设置它 flex(如果你失去了我,直接跳到 sn-p)和第一个孩子我设置省略号样式。现在,省略号停止工作。

如果你点击按钮,你会看到短文本一切都很好;

有什么想法吗?

function toggle() {
  var el = document.querySelector('.el');
  el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
}
.wrapper {
  display: flex;
  width: 200px;
  align-content: stretch;
  padding: 5px;
  min-width: 0;
  border: 1px solid
}

.wrapper .child2 {
  flex-grow: 1;
}

.flex {
  display: flex;
  min-width: 0;
}

.el {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.child1 {
  background: red;
}

.child2 {
  background: blue;
}

.child3 {
  background: green;
}

.wrapper>* {
  padding: 5px;
}
<div class="wrapper">
  <div class="child1">child1</div>
  <div class="child2">
    <div class="flex">
      <div class="el">long long long text</div>
      <div>a</div>
    </div>
  </div>
  <div class="child3">child3</div>
</div>

<button onclick="toggle()">Toggle ellipsis text</button>

【问题讨论】:

    标签: css flexbox


    【解决方案1】:

    这是因为 .el 类没有设置宽度。使用下面的 CSS 效果很好:

    .el {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      width: 3em;
    }
    

    【讨论】:

    • 谢谢!但我希望它将宽度作为为其计算的 flex..
    【解决方案2】:

    这是你想要的吗?

    我只是把overflow:hidden;text-overflow: ellipsis; 放到你的.child2

    function toggle() {
      var el = document.querySelector('.el');
      el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
    }
    .wrapper {
      display: flex;
      width: 200px;
      align-content: stretch;
      padding: 5px;
      min-width: 0;
      border: 1px solid
    }
    
    .wrapper .child2 {
      flex-grow: 1;
    }
    
    .flex {
      display: flex;
      min-width: 0;
    }
    
    .el {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    
    .child1 {
      background: red;
    }
    
    .child2 {
      background: blue;
      overflow:hidden;
      text-overflow: ellipsis;
    }
    
    .child3 {
      background: green;
    }
    
    .wrapper>* {
      padding: 5px;
    }
    <div class="wrapper">
      <div class="child1">child1</div>
      <div class="child2">
        <div class="flex">
          <div class="el">long long long text</div>
          <div>a</div>
        </div>
      </div>
      <div class="child3">child3</div>
    </div>
    
    <button onclick="toggle()">Toggle ellipsis text</button>

    【讨论】:

      【解决方案3】:

      overflow: hidden; 添加到.wrapper .child2

      实际上,Mosh Feu suggests in his answermin-width: 0 也应该可以跨浏览器工作,并且确实可以跨浏览器,尽管 IE 有问题并且需要overflow

      child2 也需要它的原因是因为它也是一个弹性项目,而弹性项目,在这种情况下 min-width,默认为 auto,并且不允许它小于它的内容,因此通过添加overflow: hidden(或除visible 之外的任何值)或min-width: 0,就可以了。

      function toggle() {
        var el = document.querySelector('.el');
        el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
      }
      .wrapper {
        display: flex;
        width: 200px;
        align-content: stretch;
        padding: 5px;
        min-width: 0;
        border: 1px solid
      }
      
      .wrapper .child2 {
        flex-grow: 1;
        overflow: hidden;
      }
      
      .flex {
        display: flex;
        min-width: 0;
      }
      
      .el {
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
      }
      
      .child1 {
        background: red;
      }
      
      .child2 {
        background: lightblue;
      }
      
      .child3 {
        background: green;
      }
      
      .wrapper>* {
        padding: 5px;
      }
      <div class="wrapper">
        <div class="child1">child1</div>
        <div class="child2">
          <div class="flex">
            <div class="el">long long long text</div>
            <div>a</div>
          </div>
        </div>
        <div class="child3">child3</div>
      </div>
      
      <button onclick="toggle()">Toggle ellipsis text</button>

      【讨论】:

        【解决方案4】:

        显然,如果我设置中间孩子 (.child2) 的 min-width: 0,它会神奇地起作用。

        更新根据@LGSon,它不适用于 IE。

        function toggle() {
          var el = document.querySelector('.el');
          el.textContent = el.textContent === 'short' ? 'long long long text' : 'short';
        }
        .wrapper {
          display: flex;
          width: 200px;
          align-content: stretch;
          padding: 5px;
          min-width: 0;
          border: 1px solid
        }
        
        .wrapper .child2 {
          flex-grow: 1;
          min-width: 0;
        }
        
        .flex {
          display: flex;
        }
        
        .el {
          white-space: nowrap;
          overflow: hidden;
          text-overflow: ellipsis;
        }
        
        .child1 {
          background: red;
        }
        
        .child2 {
          background: blue;
        }
        
        .child3 {
          background: green;
        }
        
        .wrapper>* {
          padding: 5px;
        }
        <div class="wrapper">
          <div class="child1">child1</div>
          <div class="child2">
            <div class="flex">
              <div class="el">long long long text</div>
              <div>a</div>
            </div>
          </div>
          <div class="child3">child3</div>
        </div>
        
        <button onclick="toggle()">Toggle ellipsis text</button>

        【讨论】:

        • 是的,它和我的overflow: hidden 类似,虽然这在 IE 上不起作用,但我的 :)
        • 真的吗?很高兴知道。
        • 决定赞成这个,就好像它不适合 IE 一样,它也可以 :)
        猜你喜欢
        • 2017-10-03
        • 2016-03-15
        • 2018-12-23
        • 2016-07-15
        • 1970-01-01
        • 2017-01-21
        • 2013-08-19
        • 1970-01-01
        相关资源
        最近更新 更多