我也有同样的困惑。在根据上面的许多答案进行一些修补之后,我终于可以看到差异。依我的拙见,这种区别最好通过满足以下两个条件的 flex 容器来展示:
- flex 容器本身有一个高度限制(例如,
min-height: 60rem),因此对于它的内容来说可能太高
- 包含在容器中的子项具有不均匀的高度
条件 1 帮助我理解 content 相对于其父容器的含义。当内容与容器齐平时,我们将无法看到来自align-content 的任何定位效果。只有当我们在交叉轴上有额外的空间时,我们才开始看到它的效果:它使内容相对于父容器的边界对齐。
条件 2 帮助我可视化 align-items 的效果:它使项目相互对齐。
这是一个代码示例。原材料来自Wes Bos' CSS Grid tutorial(21. Flexbox vs. CSS Grid)
<div class="flex-container">
<div class="item">Short</div>
<div class="item">Longerrrrrrrrrrrrrr</div>
<div class="item">?</div>
<div class="item" id="tall">This is Many Words</div>
<div class="item">Lorem, ipsum.</div>
<div class="item">10</div>
<div class="item">Snickers</div>
<div class="item">Wes Is Cool</div>
<div class="item">Short</div>
</div>
.flex-container {
display: flex;
/*dictates a min-height*/
min-height: 60rem;
flex-flow: row wrap;
border: 5px solid white;
justify-content: center;
align-items: center;
align-content: flex-start;
}
#tall {
/*intentionally made tall*/
min-height: 30rem;
}
.item {
margin: 10px;
max-height: 10rem;
}
示例 1:让我们缩小视口,使内容与容器齐平。这是align-content: flex-start; 没有效果的时候,因为整个内容块都紧紧地贴在容器内(没有额外的重新定位空间!)
另外,请注意第 2 行 - 查看项目之间如何居中对齐。
示例 2:随着我们扩大视口,我们不再有足够的内容来填满整个容器。现在我们开始看到align-content: flex-start; 的效果——它使内容相对于容器的上边缘对齐。
这些示例基于 flexbox,但同样的原则也适用于 CSS 网格。希望这会有所帮助:)