Подтвердить что ты не робот

Предотвращение расширения высоты гибких элементов для соответствия другим элементам гибкости

У меня есть два элемента внутри контейнера, которые бок о бок, используя гибкую коробку. На втором элементе (.flexbox-2) я устанавливаю его высоту в CSS. Однако тогда первый элемент (.flexbox-1) будет соответствовать высоте .flexbox-2. Как остановить .flexbox-1 от соответствия высоте .flexbox-2, а вместо этого сохранить естественную высоту?

Вот что я до сих пор (также доступен как jsFiddle)

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>
4b9b3361

Ответ 1

Это старое решение.Мой ответ заменен новым новым ответом Аарона с помощью align-self. Это лучшее решение, которое не полагается на причуду CSS.

Пока контейнер flex не имеет самой высоты, вы можете установить height: 0% в первый элемент гибкости. Поскольку у него нет высоты, чтобы наследовать от его родителя, любая процентная высота приведет к его краху. Он будет расти вместе с его содержимым.

Пример

В этом примере я удалил префикс -webkit. Это действительно необходимо для Safari, и префикс может быть добавлен над версией, отличной от префикса. Я также удалил flex-direction: row, поскольку это значение по умолчанию.

.container {
  display: flex;
}
.flexbox-1 {
  flex: 1;  
  height: 0%;  
  border: solid 3px red;
}
.flexbox-2 {
  flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>

Ответ 2

Я знаю, что это старый вопрос, но лучшим решением является установка элемента flex для выравнивания в верхней части с помощью flex-start.

/* Default Styles */
.container {
  display: flex;
}
.flexbox-2 {
  flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
 .flexbox-1 {
  flex: 1;  
  align-self: flex-start;  
  border: solid 3px red;
}
<div class="container">
  <div class="flexbox-1">"align-self: flex-start;"</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>

Ответ 3

Установка height детей на max-content предотвратит их сокращение.

.container {
  display: -webkit-flex;
  -webkit-flex-direction: row;
}
.flexbox-1 {
  -webkit-flex: 1;
  border: solid 3px red;
  height: max-content;
}
.flexbox-2 {
  -webkit-flex: 2;
  border: solid 3px blue;
  height: 200px;
  margin-left: 10px;
}
<div class="container">
  <div class="flexbox-1">.flexbox-1</div>
  <div class="flexbox-2">.flexbox-2</div>
</div>