Разверните div в макете столбца, чтобы соответствовать исходной высоте родителя - PullRequest
0 голосов
/ 01 мая 2020

Как указано в заголовке: у меня есть несколько элементов div в макете столбца, и я хотел бы, чтобы они расширялись в соответствии с исходной высотой родителя.

Родитель не имеет фиксированной высоты как часть макета страницы на основе flex.

Возможно ли это? В прилагаемом примере я бы хотел, чтобы оба .child div были равны по высоте и имели ту же высоту, что и исходная высота родителя.

Я могу поверить, что это невозможно, исходя из того, что CSS работает.

body {
  margin: 0;
}

.container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.parent {
  flex: 1;
}

.child {
  border: 1px solid black;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>

Ответы [ 3 ]

1 голос
/ 01 мая 2020

Вы можете использовать гибкие коробки.

body {
  margin: 0;
}

.container ,.parent{
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.parent, .child {
  flex: 1;
  min-height:auto;
}

.child {
  border: 1px solid black;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>

Для другой части вопроса: той же высоты, что и исходная высота родителя. родных братьев или родителей .container выглядит например, отсутствует, чтобы визуализировать, как применяется или определяется высота.

Может быть что-то похожее:

body {
  margin: 0;
}

.container,
.parent {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.parent {
  flex: 1;
  min-height: auto;
  overflow: auto;
}

.child {
  flex: 1;
  min-height: 100%;
  border: 1px solid black;
}

* {
  box-sizing: border-box;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>

редактировать , из комментария

Для chrome, Может использоваться бит js установить полезное значение минимальной высоты для этого браузера (и других).

let MyParent  = document.querySelector('.parent');
let MyParentH = MyParent.offsetHeight;
MyParent.style.setProperty("--MyHeight", MyParentH +"px");
body {
  margin: 0;
}

.container,
.parent {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.parent {
  flex: 1;
  min-height: auto;
  overflow: auto;
}

.child {
  flex: 1;
  min-height: 100%;/* where var css is not supported */
   min-height:var(--MyHeight, 100%);
  border: 1px solid black;
}

* {
  box-sizing: border-box;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>
0 голосов
/ 01 мая 2020

дают 100% ширины родителей своим детям.

.parent {
  display: 'flex';
  flex-direction: column;
  height: 100%;
}

.child {
  border: 1px solid black;
  height: 100%;
}
0 голосов
/ 01 мая 2020

Хочешь что-нибудь подобное?

body {
  margin: 0;
}

.container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.parent {
  flex: 1;
  display: flex;
}

.child {
  border: 1px solid black;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>

PS: обновить мой ответ с комментариями совета

body {
  margin: 0;
}
.container {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
.parent {
  flex: 1;
  display: flex;
  flex-direction: column;
}
.child {
  border: 1px solid black;
  flex-grow: 1;
}
<div class="container">
  <div class="header">Header</div>
  <div class="parent">
    <div class="child">Child 1</div>
    <div class="child">Child 2</div>
  </div>
  <div class="footer">Footer</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...