Ответ 1
Тот факт, что align-content
"работает", когда основной контейнер flex переключен на display: block
, является просто ошибкой браузера.
Он сдвигает элементы гибкости на дно, по желанию, но только в Firefox.
В Chrome это ничего не делает, это правильное поведение (по спецификации).
И в IE11 он перемещает элементы вверх (также несоответствующие).
Это ошибки и несоответствия, на которые не следует полагаться для руководства, поскольку они не помогают объяснить, как работает свойство align-content
.
В одном гибком контейнере, как и в вопросе, align-content
не действует. Используемое свойство align-items
.
В контейнере multi-line flex для использования используется align-content
.
Кроме того, свойство align-self
тесно связано с align-items
. Один из них предназначен для переопределения другого. Они оба работают вместе.
Из спецификации:
8.3. Поперечное осевое выравнивание: свойства
align-items
иalign-self
align-items
устанавливает выравнивание по умолчанию для всех элементов контейнера flex, включая анонимные элементы гибкости.align-self
разрешает переопределение по умолчанию для отдельных элементов гибкости.8.4. Линии гибких линий упаковки:
align-content
СвойствоСвойство
align-content
выравнивает строки гибких контейнеров в пределах гибкий контейнер, когда имеется дополнительное пространство в поперечной оси, аналогично какjustify-content
выравнивает отдельные элементы в пределах основной оси. Обратите внимание: это свойство не влияет на однострочный контейнер flex.
В терминах этого вопроса забудьте о align-content
. Это бесполезно (если только ваши гибкие элементы не обертываются).
Просто используйте align-items: flex-end
(или align-self: flex-end
на span
):
body {
background-color: grey;
}
.column {
display: flex;
flex-flow: column nowrap;
justify-content: flex-start;
align-items: stretch;
background-color: green;
}
.row {
display: flex;
flex-flow: row wrap;
justify-content: space-around;
align-content: flex-end; /* will work when items have wrapped */
align-items: flex-end; /* adjusted; works when items in one line */
background-color: red;
}
.row-test {
min-height: 200px;
}
span {
width: 30%;
background-color: orange;
/* align-self: flex-end; this would also work on single line container */
}
<body class="column">
<section class="row row-test">
<span>Test Test Test Test Test Test Test Test Test</span>
<span>Test Test Test Test Test Test Test Test Test Test Test
Test Test Test Test Test Test Test Test Test Test Test</span>
</section>
</body>