Переполнение набора Flexbox внутри другого Flexbox с динамической высотой

В настоящее время я работаю над электронным приложением, вот как выглядит мой макет: Переполнение набора Flexbox внутри другого Flexbox с динамической высотой

Вот моя соответствующая структура:

max_elements = 20

function generate(e){
    html = ""
    for (i = 0; i < max_elements; i++){
    html += `<li>Element ${i + 1}</li>`
  }
    e.innerHTML = html
}
div {
  border: 1px solid black;
}

#root {
  width: 500px;
  height: 300px;
  position: relative;
}

#app {
  height: 100%;
  width: 100%;
}

#container  {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
}

#top {
  height: 50px;
}

#main {
  flex: 1;
}

#mainContainer {
  display: flex;
  height: 100%;
  width: 100%;
}

.mainWindow {
  flex: 1;
    position: relative;
}

.list {
  overflow: auto;
}

#bottom {
  height: 50px;
}
<body>
  <div id = "root"> <!-- Imagine the root id as Electron App Window. -->
    <div id = "app">
      <div id = "container">
        <div id = "top">HEADER</div>
        <div id = "main">
          <div id = "mainContainer">
            <div class = "mainWindow">
              <div class = "winHeader">WINDOW 1 HEADER</div>
              <div id = "a" class = "list" onclick = "generate(a)">CLick Here for the list</div>
            </div>
            <div class = "mainWindow">
              <div class = "winHeader">WINDOW 2 HEADER</div>
              <div id = "b" class = "list" onclick = "generate(b)">CLick Here for the list</div>
            </div>
          </div>
        </div>
        <div id = "bottom">FOOTER</div>
      </div>
    </div>
  </div>
</body>

Моя проблема в том, что что бы я ни пытался, список расширяется и никогда не переполняется, выталкивая нижний колонтитул из окна (и самого себя).


Я искал ответы, но ни один из них не решил мою проблему.
Например. каждый ответ в Прокрутка флексбокса с переполненным контентом предполагает, что есть фиксированная высота, с которой вы можете работать, чего у меня нет.

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


Ссылка на JSFiddle: https://jsfiddle.net/oh5knsjb/71/

Вам нужна полоса прокрутки при переполнении?

s.kuznetsov 09.04.2021 22:27

Да (минимальное ограничение на количество символов ...)

Thörni 09.04.2021 22:29

Вы ищете что-то подобное? jsfiddle.net/jd8r3h4p/2

Weston 09.04.2021 22:46
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
3
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У тебя почти все хорошо:

max_elements = 20

function generate(e){
    html = ""
    for (i = 0; i < max_elements; i++){
    html += `<li>Element ${i + 1}</li>`
  }
    e.innerHTML = html
}
div {
  border: 1px solid black;
}

#root {
  width: 500px;
  height: 300px;
  position: relative;
}

#app {
  height: 100%;
  width: 100%;
}

#container  {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
}

#top {
  height: 50px;
}

#main {
  flex: 1;
  min-height:0; /* added */
}

#mainContainer {
  display: flex;
  height: 100%;
  width: 100%;
}

.mainWindow {
  flex: 1;
  position: relative;
  /* added */
  display:flex;
  flex-direction:column;
}

.list {
  overflow: auto;
}

#bottom {
  height: 50px;
}
<body>
  <div id = "root"> <!-- Imagine the root id as Electron App Window. -->
    <div id = "app">
      <div id = "container">
        <div id = "top">HEADER</div>
        <div id = "main">
          <div id = "mainContainer">
            <div class = "mainWindow">
              <div class = "winHeader">WINDOW 1 HEADER</div>
              <div id = "a" class = "list" onclick = "generate(a)">CLick Here for the list</div>
            </div>
            <div class = "mainWindow">
              <div class = "winHeader">WINDOW 2 HEADER</div>
              <div id = "b" class = "list" onclick = "generate(b)">CLick Here for the list</div>
            </div>
          </div>
        </div>
        <div id = "bottom">FOOTER</div>
      </div>
    </div>
  </div>
</body>

После реализации это все еще не работало. Я обнаружил, что первоначальная проблема заключалась в том, что SASS (который я использовал) не преобразовал мой CSS в то, что он должен был иметь, поэтому CSS никогда не делал того, что должен был иметь. После переписывания всего на чистый CSS все заработало как положено!

Thörni 10.04.2021 01:56

Другие вопросы по теме