Гибкий элемент выходит за границы гибкого контейнера

У меня есть гибкий контейнер, в котором для flex-direction установлено значение column.

Предположим, есть два гибких элемента, и второй элемент содержит дополнительные контейнеры с текстом.

Я не хочу, чтобы второй гибкий элемент выходил за пределы гибкого контейнера. Вместо этого я хочу отобразить полосу прокрутки для внутреннего контейнера с текстом во втором гибком элементе.

Как добавить полосу прокрутки в контейнер, находящийся внутри гибкого элемента?

.container {
  display: flex;
  flex-direction: column;
  max-width: 200px;
  max-height: 100px;
  border: 1px solid red;
}

.scrollable{
  overflow: auto;
}
<div class = "container">
  <div class = "container-item">Lorem ipsum</div>
  <div class = "container-item">
    <div>Lorem, ipsum</div>
    <div class = "scrollable"> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum </div>
  </div>
</div>

https://jsfiddle.net/wLm9hd2k/

🤔 А знаете ли вы, что...
HTML5 включает поддержку локального хранилища данных с использованием Web Storage API.


2
62
2

Ответы:

Решено

Сделайте свой .container-item гибким столбцом и примените min-height:0.

.container {
  display: flex;
  flex-direction: column;
  max-width: 200px;
  max-height: 150px;
  border: 1px solid red;
}

.container-item,
div {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
}

.scrollable {
  overflow: auto;
}
<div class = "container">
  <div class = "container-item">Lorem ipsum</div>
  <div class = "container-item">
    <div>Lorem, ipsum</div>
    <div class = "scrollable"> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
      Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum </div>
  </div>
</div>

Немного улучшен ответ @Paulie_D, чтобы другие <div> не уменьшались:

.container {
  display: flex;
  flex-direction: column;
  max-width: 200px;
  max-height: 150px;
  border: 1px solid red;
}

.container-item {
  flex: none;
  display: flex;
  flex-direction: column;
  &:has(.scrollable) {
    flex: auto;
    min-height: 0;
    div {
      flex: none;
      &.scrollable {
        flex: auto;
        overflow: auto;
      }
    }
  }
}
<div class = "container">
  <div class = "container-item">Lorem ipsum</div>
  <div class = "container-item">
    <div>Lorem, ipsum</div>
    <div class = "scrollable"> Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum
      Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum Lorem ipsum </div>
  </div>
</div>