CSS网格布局和定位网格项网格布局和定位网格项
随着 Igalia 在 Chromium/Blink 以及 Safari/WebKit浏览器实现CSS网格布局的部分工作的完成,我们已经实现了对于定位网格
项(positioned items)的支持。是的,在网格中支持绝对定位。
可能你的第一反应是不希望在网格布局中使用定位的网格项,但是可能在某些使用案例中必须要使用它们。这篇文章主要用来
解释定位网格项在网格容器(grid container)中的特殊性。
实际上,定位网格项跟普通网格项(regular items)相比并没有那么大的区别。当网格容器是定位项的包含块时(例如,在网格容
器中使用相对定位 position: relative; ),这些定位网格项在页面的布局与普通网格项基本是相同的。但是,还是有少许的不
同:
定位网格项默认不能延伸(stretch)。
它们不能使用隐式网格。 它们不会创建隐式轨道。
使用自动布局功能时,它们不占用单元格。
auto 与网格线(grid lines)相关的时候有特殊的含义。
让我们详细介绍一下这些功能。
定位网格项会收缩到内容的宽高
我们都知道普通网格项默认可以延伸来填充它们的区域。然而,定位网格项并不是这样,类似于定位的普通块级元素,它们会
收缩到内容的宽高。
这点很容易理解,但是一个简单的例子能让它更加清楚明了:
<div style="display: grid; position: relative;
grid-template-columns: 300px 200px; grid-template-rows: 200px 100px;">
<div style="grid-column: 1 / 3; grid-row: 1 / 3;"></div>
<div style="position: absolute; grid-column: 1 / 3; grid-row: 1 / 3;"></div>
</div>
在这个例子中,我们有一个简单的 2x2 的网格。普通网格项和定位网格项都设置了占满整个网格的CSS规则。这定义了这些
网格项的_区域_包括第一行和第二行以及第一列和第二列。
普通网格项默认在水平和垂直方向都会延伸,所以它们会占据整个网格区域。然而,定位网格项会产生塌陷,它们的尺寸会根
据内容来缩小。
在下面的例子中,我会忽略这个不同点以便能展示每个定位网格项所占据的区域。要实现跟图片一样的结果,你需要将定位网