A altura div da criança excede a altura pai flexível no Firefox, mas não no Chrome
Como impedir que uma criança div com barras de rolagem eflex:1
exceder a altura do seu flexbox pai no Firefox? Funciona corretamente no Chrome.
Link CodePen (se você preferir os snippets de estouro de pilha):https://codepen.io/garyapps/pen/ZMNVJg
Detalhes:
Eu tenho um contêiner flexível de altura fixa. Tem umflex-direction:column
configuração e contém várias divs childen que serão empilhadas verticalmente. Um dos divs filhos recebe umflex:1
enquanto outros recebem alturas fixas.
Minha expectativa é que a criança div com oflex:1
A propriedade será expandida para preencher o espaço vertical restante. Isso funciona conforme o esperado.
Eu também dei à criança div umoverflow-y:scroll
propriedade, de modo que, se o conteúdo dentro dela exceder sua altura, as barras de rolagem serão exibidas. Isso funciona bem no Chrome. No Firefox, no entanto, a altura desta criança aumenta, excedendo sua div principal.
No Chrome:
No Firefox:
Como você pode ver na captura de tela, tenho duas ocorrências desse problema, uma no painel à esquerda e a outra no painel à direita. No Chrome, a altura da div filho permanece constante, as barras de rolagem aparecem e a altura do pai não é excedida. No Firefox, as barras de rolagem não aparecem e a altura do div filho aumenta e excede seu pai.
Analisei algumas outras perguntas semelhantes sobre SO e, em muitos casos, definimin-height:0
A propriedade resolveu o problema no Firefox. No entanto, tentei adicionarmin-height:0
para pais, filhos, pais e filhos, e não tiveram sorte.
Execute o snippet de código abaixo no Chrome e no Firefox para ver a diferença nos dois navegadores.
Eu gostaria de receber algum conselho sobre como impedir que a divisão de crianças cresça.
(Observe que o Bootstrap 4 está sendo usado. O snippet de código faz referência ao CDN do arquivo .css do bootstrap 4)
Fragmento de código:
.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>