Display flex

by myrluk3

HTML

<div class="box">
  <div class="row header">
    <p><b>header</b>
      <br />
      <br />(sized to content)</p>
  </div>
  <div class="row content">
    <p>
      <b>content</b>
      (fills remaining space)
    </p>
  </div>
  <div class="row footer">
    <p><b>footer</b> (dynamic height)</p>
    <button id="addRow">Arr dow</button>
    <div id="rowCont">
    </div>
  </div>
</div>

CSS

html,
body {
  height: 100%;
  margin: 0
}

.box {
  display: flex;
  flex-flow: column;
  height: 100%;
}

.box .row {
  border: 1px dotted grey;
}

.box .row.header {
  flex: 0 1 auto;
}

.box .row.content {
  flex: 1 1 auto;
}

.box .row.footer {
  flex: 0 1 auto;
}

JavaScript

document.querySelector('#addRow').addEventListener('click', function() {
	const row = document.createElement('DIV');
  row.classList.add('row');
  document.querySelector('#rowCont').appendChild(row);
})