Изменение направления сгибания родительского контейнера приводит к тому, что гибкий рост дочернего элемента перестает работать?

#css #flexbox

#css #flexbox

Вопрос:

Почему сгибание перестает работать, когда я меняю направление сгибания родительского контейнера в своем коде?

В следующем примере у меня есть два divs, родительский div с гибким контейнером и единственный дочерний элемент с гибким элементом с зеленым фоном, и, как вы можете видеть, flex-grow работает просто отлично

 .flex-parent{
    display:inline-flex;
    flex-direction:row;
}

.flex-child{
    overflow:hidden;
    background:#99bb99;
    flex-basis:0px;
    flex-grow:1;
}  
 <div class="flex-parent">
    <div class="flex-child">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit
    </div>
</div>  

Однако, если я изменю направление сгибания родительского контейнера на столбец, сгибание перестает работать, и мой контейнер перестает отображаться, как вы можете видеть далее

 .flex-parent{
    display:inline-flex;
    flex-direction:column;
}

.flex-child{
    overflow:hidden;
    background:#99bb99;
    flex-basis:0px;
    flex-grow:1;
}  
 <div class="flex-parent">
    <div class="flex-child">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit
    </div>
</div>  

Кто-нибудь может сказать мне, почему это происходит? Мне нужно сохранить overflow:hidden, чтобы иметь возможность свернуть контейнер, изменив значение flex-grow на 0, поэтому, хотя удаление свойства overflow приведет к отображению контейнера, избавление от него противоречит цели, и все работает нормально, когда для flex-direction установлено значение row независимо, поэтому я не понимаю, почему это не работает только для изменения значения на столбец

Комментарии:

1. его из-за гибкой основы дает ему li 20 или 25 пикселей

2. Если это причина, почему это работает, когда для flex-direction установлено значение row, когда в этом случае я также присвоил ему flex-basis:0px? В любом случае, я на самом деле не пытаюсь заставить его расширяться до произвольно выбранной высоты, я пытаюсь заставить его расширяться до высоты, определяемой содержимым (точно так же, как в случае flex-direction:row он расширяется до ширины, определяемой содержимым)

3. в обоих случаях это не должно работать, поэтому реальный вопрос заключается в том, почему это работает в первом случае. Второй кажется мне логичным результатом

4. Черт возьми, я предположил, что это сработало в первом, потому что наличие flex-basis: 0 и flex-grow: 0 заставляло дочерний элемент рассматриваться как имеющий (на практике) без гибких измерений (так сказать, в некотором роде), в результате чего содержимое обрабатывалось как какое-топереполнения, но это был именно тот способ, которым я обернул свой разум вокруг него, чтобы он имел какой-то интуитивный смысл

Ответ №1:

Проблема в том overflow:hidden; , что . Это связано с тем, что Flex переносится только тогда, когда начальный основной размер элементов flex переполняет контейнер flex. Итак, для суммирования.

направление сгибания: строка Это когда элементы сгибания шире контейнера.

flex-direction: столбец, который они должны превышать высоту контейнера.

В качестве решения попробуйте установить a height или a min-height для родительского элемента. Надеюсь, это решит вашу проблему.

 .flex-parent{
    min-height: 20px;
}
  

jsFiddle

Комментарии:

1. Но я не пытаюсь переполнить гибкий контейнер, на самом деле контейнер не имеет заданных размеров, поэтому он может свободно расширяться. Установка overflow:hidden для дочернего элемента flex сворачивает элемент flex, если он также имеет flex-grow:0 и flex-basis: 0px, и после этого я могу отменить его сворачивание, установив flex-grow:1, который увеличивает его до размера содержимого (здесь родительский контейнер также расширяется). Или, ну, это работает таким образом, когда для flex-direction установлено значение row, но не тогда, когда для него установлено значение column, я хочу знать, почему установка flex-grow в 1 не приведет к расширению свернутого элемента до размера содержимого в этом случае