Search code examples
cssflexboxellipsis

Ellipsis on one line of flexbox child


I am using flexbox and I have a child that takes up the remaining width:

.flex-container {
  display: flex;
}
.middle {
  flex: 1;
}
.left {
  margin-right: 15px;
}
.right {
  margin-left: 15px;
}
.ellipsis {
  display: inline-block;
  width: 100%;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div class="flex-container">
  <div class="left">
    Left content
  </div>

  <div class="middle">
    <div>Middle</div>
    <div class="ellipsis">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
      dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
    <span>12345</span>
  </div>

  <div class="right">
    <button class="btn btn-sm btn-danger">Button 1</button>
    <button class="btn btn-sm btn-default">Button 2</button>
  </div>
</div>

I would like the Lorem ipsum line to truncate and show ellipsis. Is this possible considering that the 'middle' element is flexing the remaining width?

Here is a plunk: https://plnkr.co/edit/GvyR280i00hnAKHu0keF?p=preview


Solution

  • You simply need overflow: hidden on the flex child itself.

    .flex-container {
      display: flex;
    }
    .middle {
      flex-grow: 1;
      overflow: hidden;
    }
    .left {
      margin-right: 15px;
    }
    .right {
      margin-left: 15px;
    }
    .ellipsis {
      display: inline-block;
      width: 100%;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    <div class="flex-container">
      <div class="left">
        Left content
      </div>
    
      <div class="middle">
        <div>Middle</div>
        <div class="ellipsis">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure
          dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
        <span>12345</span>
      </div>
    
      <div class="right">
        <button class="btn btn-sm btn-danger">Button 1</button>
        <button class="btn btn-sm btn-default">Button 2</button>
      </div>
    </div>