In this example, there is an outer container which is flexbox and one of its children (the bottom one) is also a flexbox. My goal is that the top part grows according to its contents and bottom fills the remainder. Bottom-left part grows according to its contents and bottom-right fills the remainder of the bottom. Also, the right-bottom part has more content that it can fit so it should have a scrollbar which scrolls only the bottom-right part. The example works as expected in Chrome 66 and Safari 11.1 but doesn't in Firefox 59 and Edge. In that case the bottom grows beyond the viewport. How do I fix that ?
https://jsfiddle.net/6y2mm6hv/
body
{
margin: 0;
padding: 0;
height: 100vh;
overflow: hidden;
}
.container
{
display: flex;
flex-direction: column;
height: 100%;
}
.top
{
padding: 10px;
flex: 0 0 auto;
background-color: royalblue;
border: 2px solid yellow;
}
.bottom
{
flex: 1 1 auto;
background-color: whitesmoke;
border: 2px solid red;
padding: 10px;
display: flex;
}
.left
{
width: 600px;
flex: 0 0 auto;
}
.right
{
flex: 1 1 auto;
overflow-y: scroll;
}
.bottom .line
{
font-size: 20px;
padding: 10px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>undefined</title>
</head>
<body>
<div class="container">
<div class="top">
<input/><button>Button</button><span>Some text</span>
</div>
<div class="bottom">
<div class="left">
<span>Left</span>
</div>
<div class="right">
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
<div class="line">Line</div>
</div>
</div>
</div>
</body>
</html>