为什么下面的grid-row-start
/grid-row-end
代码将Item #2放在第一列?没有提到柱子。目的是项目#2应保留在其第2列中,但占据两行。如果我尝试使用Item #1,代码就可以工作:它占据两行并保留在自己的列中,但不是项目#2。项目#2移动到前面,第1列。
.container {
border: 1px dashed red;
}
.item-grid {
background-color: rgba(255, 0, 200, .2);
border: 1px solid green;
padding: 1rem;
}
.container-grid-example {
display: grid;
grid-template-columns: auto auto auto;
grid-template-rows: auto auto auto;
width: 50%;
}
/* This works with :nth-child(1), the 1st item */
.container-grid-example :nth-child(2) {
grid-row-start: 1;
grid-row-end: 3;
}
<div class="container container-grid-example">
<div class="item-grid">1</div>
<div class="item-grid">2</div>
<div class="item-grid">3</div>
<div class="item-grid">4</div>
<div class="item-grid">5</div>
<div class="item-grid">6</div>
<div class="item-grid">7</div>
<div class="item-grid">8</div>
</div>
1条答案
按热度按时间nkcskrwz1#
修复方法是使用
span 2
而不定义行。要了解发生了什么,您需要参考放置算法以了解每个元素的放置时间:https://www.w3.org/TR/css-grid-1/#auto-placement-algo
你会注意到下面的步骤:
1.定位任何未自动定位的内容。
1.处理锁定到给定行的项。
1.确定隐式网格中的列。
1.定位其余网格项。
在你的例子中,不需要考虑(3),因为你没有任何隐式网格。我们也没有“非自动定位”的项目,因此我们将考虑(2)和(4)。
在您的示例中,第二个项目被锁定到给定的行,因此它属于步骤(2),因此我们首先定位它,然后在步骤(4)中考虑剩余的项目。
当使用
span 2
时,元素不再被锁定到给定的行,因此它像所有项目一样属于步骤(4),我们遵循文档顺序放置所有项目,因此我们逻辑上从第一个开始,然后是第二个,依此类推。一些相关问题:
CSS Grid : How Auto placement algorithm works
CSS Grid Item Placement
Using CSS GRID Why Im getting this gap?