2

I have a multi-line flexbox layout where I would like to specify the height of one of the rows and have the remaining rows stretch to fill. If I set the height of the blue div below, I get a bunch of empty space.

enter image description here

#container {
  display: flex;
  flex-wrap: wrap;
  height: 500px;
  width: 500px;
}
#one,
#two,
#four,
#five {
  flex: 1 1 49%;
}
#three {
  flex: 1 1 99%;
  background-color: blue;
  height: 15px;
  max-height: 15px;
}
#one {
  background-color: green;
}
#two {
  background-color: yellow;
}
#four {
  background-color: orange;
}
#five {
  background-color: violet;
}
<div id="container">
  <div id="one"></div>
  <div id="two"></div>
  <div id="three"></div>
  <div id="four"></div>
  <div id="five"></div>
</div>
Chris Purves
  • 399
  • 4
  • 16

2 Answers2

1

As far as i know, this will require rows.

#container {
  display: flex;
  flex-wrap: nowrap;
  height: 500px;
  width: 500px;
  flex-direction: column;
}
.row {
  flex: 1 0 auto;
  display: flex;
  flex-direction: row;
}
.row:nth-child(2) {
  height: 15px;
  max-height: 15px;
}
.row div {
  flex: 1 0 auto;
}
#one {
  background-color: green;
}
#two {
  background-color: yellow;
}
#three {
  background-color: blue;
}
#four {
  background-color: orange;
}
#five {
  background-color: violet;
}
<div id="container">
  <div class="row">
    <div id="one"></div>
    <div id="two"></div>
  </div>
  <div class="row">
    <div id="three"></div>
  </div>
  <div class="row">
    <div id="four"></div>
    <div id="five"></div>
  </div>
</div>

JSfiddle Demo

Paulie_D
  • 107,962
  • 13
  • 142
  • 161
1

If you know there will be exactly three rows, you can use calc:

#three {
  height: 15px;
}
#one, #two, #four, #five {
  height: calc((100% - 15px) / 2);
}

#container {
  display: flex;
  flex-wrap: wrap;
  height: 500px;
  width: 500px;
}
#one, #two, #four, #five {
  flex: 1 1 49%;
  height: calc((100% - 15px) / 2);
}
#three {
  flex: 1 1 99%;
  background-color: blue;
  height: 15px;
}
#one { background-color: green; }
#two { background-color: yellow; }
#four { background-color: orange; }
#five { background-color: violet; }
<div id="container">
  <div id="one"></div>
  <div id="two"></div>
  <div id="three"></div>
  <div id="four"></div>
  <div id="five"></div>
</div>
Oriol
  • 274,082
  • 63
  • 437
  • 513