我有一个行方向flexbox嵌套在列方向的flexbox中,但是当我想在孩子中使用align-content
时,它不起作用。
当我用display:flex
替换父级的display:block
时,它可以正常工作。
在下面的代码中,我们可以看到.row
align-content: flex-end;
无法正常工作。但是,如果我将.column
display: flex;
替换为display: block;
,则align-content: flex-end;
可以正常工作。
可以解决这个问题吗?
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;
align-items: center;
background-color: red;
}
.row-test {
min-height: 200px;
}
span {
width: 30%;
background-color: orange;
}

<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>
&#13;
答案 0 :(得分:9)
当主要Flex容器切换到align-content
时,display: block
“工作的事实只是一个浏览器错误。
根据需要将弹性项目移至底部,但仅在Firefox中。
在Chrome中它没有做任何事情,这是正确的行为(根据规范)。
在IE11中,它将项目移到顶部(也是不一致的)。
这些是不应依赖于指导的错误和不一致,因为它们无助于解释align-content
属性的工作原理。
在 单行灵活容器 中,与问题中的那个一样,align-content
无效。要使用的属性为align-items
。
在 多行灵活容器 中,要使用的属性为align-content
。
此外,align-self
属性与align-items
密切相关。一个旨在覆盖另一个。它们都起作用。
来自规范:
8.3. Cross-axis Alignment: the
align-items
andalign-self
properties
align-items
设置所有Flex容器项的默认对齐方式,包括匿名弹性项。align-self
允许为各个弹性项重写此默认对齐方式。8.4. Packing Flex Lines: the
align-content
property
align-content
属性对齐Flex容器中的行 当横轴有额外的空间时,弯曲容器,类似于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>
答案 1 :(得分:2)
你需要添加flex-wrap:wrap;工作对齐内容
答案 2 :(得分:2)
也许您想使用justify-content
而不是align-content
答案 3 :(得分:0)
有时,您需要在弹性容器的父容器上设置高度,以使align-content起作用。
答案 4 :(得分:0)
回答这个问题的时间可能较晚,但是在Billy Mitchell上进行了详细说明,您可以将父容器设置为特定的高度,或者如果要使其完全居中,则可以
.parent {
display: flex;
flex-flow: row wrap;
height: -webkit-fill-available;
align-content: center;
justify-content: space-evenly;
}
<div class="parent">
<div>Child 1</div>
<div>Child 2</div>
</div>
您可以根据需要构造和替换以上代码片段的属性值。这是complete guide to flexbox,对我有很大帮助。