Вот результат:

могу предотвратить дочерний div с полосами прокрутки иflex:1 превышать высоту своего родительского flexbox в Firefox? Он работает правильно в Chrome.

Ссылка на CodePen (если вы предпочитаете использовать фрагменты переполнения стека):https://codepen.io/garyapps/pen/ZMNVJg

подробности:

У меня есть гибкий контейнер фиксированной высоты. Оно имеетflex-direction:column параметр, и он содержит несколько детских div, которые будут сложены вертикально. Один из дочерних элементов получаетflex:1 собственности, в то время как другим даны фиксированные высоты.

Я ожидаю, что ребенок div сflex:1 свойство будет расширяться, чтобы заполнить оставшееся вертикальное пространство. Это работает как ожидалось.

Я также дал ребенкуoverflow-y:scroll свойство, так что если содержимое внутри него превышает его высоту, появляются полосы прокрутки. Это прекрасно работает в Chrome. Однако в Firefox рост этого ребенка увеличивается, превышая его родительский div.

В Chrome:

В Firefox:

Как вы видите на скриншоте, у меня есть два случая этой проблемы: одна на панели слева, а другая на панели справа. В Chrome высота дочернего элемента div остается постоянной, появляются полосы прокрутки, а высота родительского элемента не превышается. В Firefox полосы прокрутки не отображаются, а высота дочернего элемента div увеличивается и превышает его родительский элемент.

Я рассмотрел несколько других подобных вопросов по SO, и во многих случаяхmin-height:0 свойство решило проблему в Firefox. Однако я попытался добавитьmin-height:0 для родителей, детей, как родителей, так и детей, и не повезло.

Запустите приведенный ниже фрагмент кода в Chrome и Firefox, чтобы увидеть разницу в двух браузерах.

Буду признателен за любые советы о том, как предотвратить рост ребенка div.

(Обратите внимание, что используется Bootstrap 4. Фрагмент кода ссылается на CDN файла начальной загрузки 4 .css)

Фрагмент кода:

.body-content {
        height: 300px;   
        max-height:100%;
        border: 3px dashed purple;
        display:flex;                       
        flex-direction: column;             
    }


#messagescontainerrow {
        flex: 1;
        border: 5px double black;
    }

#leftdiv {
        display:flex;
        flex-direction:column;
        border: 1px solid green;
    }

#messagetools {
        height: 50px;
        background-color: cornsilk;
    }

#messagelist {
        flex:1;     
        overflow-y: scroll;   
        background-color:whitesmoke;
    }

#rightdiv {
        display:flex;
        flex-direction:column;
        border: 1px solid blue;
    }

#messagesenderspane {
        width: 100%;
        height: 50px;
        background-color: lemonchiffon
    }

#messagecontents {
        flex: 1;
        overflow-y: scroll; 
        width: 100%;
        border: 1px solid blue;
        background-color: aliceblue;
    }

#messagesend {
        width: 100%;
        height: 70px;
        background-color: whitesmoke;
    }
<html>
  <head>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.2/css/bootstrap.min.css" rel="stylesheet"/>
  </head>
  <body>
    <div class="container body-content">
      <div class="row" id="messagescontainerrow">

        <div class="col-5" id="leftdiv">
            <div id="messagetools">
                <input type="button" id="newbutton" value="My Button" />
            </div>
            <div id="messagelist">
              <h4>Chat 1</h4>
              <h4>Chat 2</h4>
              <h4>Chat 3</h4>
              <h4>Chat 4</h4>
              <h4>Chat 5</h4>
              <h4>Chat 6</h4>
              <h4>Chat 7</h4>
              <h4>Chat 8</h4>
            </div>
        </div>


        <div class="col-7" id="rightdiv">
            <div id="messagesenderspane">
              Chat 3
            </div>
            <div id="messagecontents">
              <h4>line 1</h4>
              <h4>line 2</h4>
              <h4>line 3</h4>
              <h4>line 4</h4>
              <h4>line 5</h4>
              <h4>line 6</h4>
              <h4>line 7</h4>
            </div>
            <div id="messagesend">
                <textarea id="sendbox"></textarea>
                <input type="button" id="sendbutton" value="Send" />
            </div>
        </div>



      </div>
    </div>
  </body>
</html>