Display: flex;
обеспечивает большую гибкость - фактически его цель - точно согнуть высоту или ширину до требуемых размеров в соответствии с содержимым внутри.
Исходя из вашего вопроса, это именно то, что вам нужно.
Я отделил ваш нижний колонтитул от сетки, чтобы отделить элементы статического размера от тех, которые вы будете sh flex.
Далее я добавил минимальную ширину вашей области, чтобы избежать ее полного разрушения. Однако, если вы хотите эту функциональность, вы можете удалить это. т. е. если вы хотите, чтобы при отсутствии изображения оно не появлялось, вы можете удалить его.
Наконец, display: flex;
и flex-flow: row nowrap;
позволяют сгибать размеры и для элементов в сетке ( теперь с именем «flex») для размещения рядом друг с другом с одинаковыми размерами, и они не будут перенесены на следующую строку для учета изменений размеров.
function toggleTabsContent() {
const display = document.querySelector('.content').style.display;
if (display == "none") {
document.querySelector('.content').style.display = "block";
} else {
document.querySelector('.content').style.display = "none";
}
}
.flex {
display: flex;
flex-flow: row nowrap;
}
.tabs {
background: #FF9800;
height: auto;
width: 100%;
}
.area {
height: auto;
min-height: 200px;
width: 100%;
background: #673AB7;
}
.footer {
background: #607D8B;
height: 40px;
}
.content {
height: 400px;
}
<button onclick="toggleTabsContent()">Make tabs taller/shorter</button>
<div class="flex">
<div class="tabs">
<div class="content" style="display: none"></div>
</div>
<div class="area"></div>
</div>
<div class="footer"></div>