CSS дочерний div расширяется своим содержимым, даже если его родитель имеет фиксированную высоту - PullRequest
1 голос
/ 12 марта 2020

Допустим, у меня есть родительский элемент <div> с фиксированной высотой и дочерними элементами flex-элемента.

Есть ли способ, чтобы его дочерние элементы высоты не фиксировались, но расширялись в зависимости от их содержимого ?

.main-container {
  height: 250px;
  background-color: green;
  display: flex;
  flex: 0 1 auto;
  overflow: auto;
}
.div1 {
  width: 100%;
  height: 100%;
  background-color: lightcoral;
}
.div2 {
  width: 100%;
  background-color: lightgrey;
}
.div3 {
  width: 100%;
  background-color: lightpink;
}
div p {
  font-size: 10em;
}
<div class="main-container">
  <div class="div1">
    <p>a</p>
  </div>
  <div class="div2">q</div>
  <div class="div3">s</div>
</div>

Требуемый результат: enter image description here

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Вам не нужно использовать fit-content (что не поддерживается в Firefox: https://caniuse.com/#feat = mdn-css_properties_height_fit-content ), вам просто нужно отключить эффект стерилизации, добавив align-self:flex-start; к нужному элементу

.main-container {
  height: 250px;
  background-color: green;
  display: flex;
  flex: 0 1 auto;
  overflow: auto;
}
.div1 {
  width: 100%;
  align-self:flex-start;
  background-color: lightcoral;
}
.div2 {
  width: 100%;
  background-color: lightgrey;
}
.div3 {
  width: 100%;
  background-color: lightpink;
}
div p {
  font-size: 10em;
}
<div class="main-container">
  <div class="div1">
    <p>a</p>
  </div>
  <div class="div2">q</div>
  <div class="div3">s</div>
</div>
1 голос
/ 12 марта 2020

Есть ли способ, чтобы высота его дочерних элементов не фиксировалась, а увеличивалась в зависимости от их содержимого?

Если вы хотите, чтобы div был настолько высоким, насколько это необходимо для контента, вы можете применить height: fit-content; в этом разделе.

Пример в фрагменте ниже (для левого столбца):

.main-container {
  height: 250px;
  background-color: green;
  display: flex;
  flex: 0 1 auto;
  overflow: auto;
}
.div1 {
  width: 100%;
  height: fit-content;
  background-color: lightcoral;
}
.div2 {
  width: 100%;
  background-color: lightgrey;
}
.div3 {
  width: 100%;
  background-color: lightpink;
}
div p {
  font-size: 10em;
}
<div class="main-container">
  <div class="div1">
    <p>a</p>
  </div>
  <div class="div2">q</div>
  <div class="div3">s</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...