Grid布局中,align-items和align-content有什么区别?

14
我已经阅读了Grid完全指南,但仍然对两组容器属性之间的区别感到困惑,即"justify/align-items"与"justify/align-content"。

我的困惑在于作者声称"-content"系列存在的原因是:

有时您的网格的总大小可能小于其网格容器的大小。

我认为这适用于两个系列,而不仅仅是"-content"系列。
请问有人能解释一下吗?最好使用一些图形示例来说明。
1个回答

28

让我们先澄清一下术语:

网格容器(Grid Container)

网格容器是包含网格(Grid)网格项(Grid Items)的整体容器。它确立了一个网格格式化上下文(Grid Formatting Context)(与其他格式化上下文,如弹性或块相对)。

网格(Grid)

网格是由相互交叉的垂直和水平线组成的集合,将网格容器的空间划分为网格区域(Grid Areas),这些区域是包含网格项的方框。

网格项(Grid Items)

网格项是网格容器中代表流动内容(即非绝对定位的内容)的方框。

以下是来自W3C的插图:

enter image description here

justify-contentalign-content属性用于定位网格

justify-selfjustify-itemsalign-selfalign-items属性用于定位网格项


关于你问题中描述的问题:

我对作者声称"-content"集合会存在的原因感到困惑:"有时您的网格的总大小可能小于其网格容器的大小"

好吧,你可以在插图中看到网格比网格容器小。

因此,还有剩余空间,容器能够将这个空间分配给垂直居中(align-content: center)和右对齐(justify-content: end)的网格。

多余的空间还可以使网格用像space-aroundspace-betweenspace-evenly这样的值进行间距设置。

然而,如果网格大小等于容器大小,则没有免费空间,align-content / justify-content将没有效果。


以下是规范中的更多内容:

10.3. 行轴对齐:属性 justify-selfjustify-items

网格项可以使用网格项上的justify-self属性或网格容器上的justify-items属性来在行维度上对齐。

10.4. 列轴对齐:属性 align-selfalign-items

网格项也可以使用网格项上的align-self属性或网格容器上的align-items属性来在块维度(垂直于行维度)上对齐。

10.5. 网格对齐:属性 justify-contentalign-content

如果网格的外边缘与网格容器的内容边缘不相对应(例如,如果没有列是自适应大小),则网格跟踪根据网格上的justify-contentalign-content属性在内容框内对齐。

容器是一种在计算机科学中广泛使用的概念,它是一种可以承载和运行应用程序的环境。容器提供了一个独立的、可重复的部署单元,其中包含了应用程序所需的所有组件和配置。与虚拟机不同的是,容器无需完整的操作系统支持,在更少的资源上运行,因此更加轻便和高效。

(强调添加)


嗨。已经到达这个答案了。我可以问一个关于这个的问题吗?当你使用 justify/align-items 和 self 时,你是在改变网格项中的内容吗?就像数据将如何出现在网格项内一样?我还是很困惑@@ - Tree Nguyen
@TreeNguyen,通过在容器上使用 justify-items / align-items,以及在项目上使用 justify-self / align-self(覆盖容器设置),您可以对齐网格项目在网格容器中的位置。要对齐网格项内部的内容,您可以将每个项目作为 flex 容器,并将 flex 属性应用于内容。 - Michael Benjamin
1
通过使用 align-contentjustify-content,您可以对容器中的网格行和列进行对齐,以适应任何额外的空间。以下是一个您可以尝试的演示:https://jsfiddle.net/k5ebsac2/ - Michael Benjamin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接