对于根据需要创建新列且未定义行的垂直流动网格,请考虑使用CSS 多列布局(示例)。CSS 网格布局(至少是当前的实现 -级别 1)无法执行此任务。这是问题所在:
grid-auto-flow
在 CSS 网格布局中,和grid-template-rows
/grid-template-columns
属性之间存在反比关系。
更具体地说,在grid-auto-flow: row
(默认设置)和grid-template-columns
两者都定义的情况下,网格项目在水平方向上很好地流动,并根据需要自动创建新行。这个概念在问题的代码中得到了说明。
#container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-flow: row;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
但是,切换到 后grid-template-rows
,网格项目会堆叠在单个列中。
#container {
display: grid;
grid-template-rows: 1fr 1fr 1fr;
grid-auto-flow: row;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
grid-auto-flow: row
不会使用和自动创建列grid-template-rows
。grid-template-columns
必须定义(因此,与 的反比关系grid-auto-flow
)。
#container {
display: grid;
grid-template-rows: 1fr 1fr 1fr;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-flow: row;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
在相反的情况下也是如此。
grid-auto-flow: column
定义和定义后,网格项目在垂直方向上很好地流动,并根据grid-template-rows
需要自动创建新列。
#container {
display: grid;
grid-template-rows: 1fr 1fr 1fr;
grid-auto-flow: column;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
但是,切换到 后grid-template-columns
,网格项目会堆叠在一行中。(这是大多数人问的问题,包括在这个问题中。)
#container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-auto-flow: column;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
没有自动创建行。这需要grid-template-rows
定义。(这是最常提供的解决方案,但通常被拒绝,因为布局的行数可变。)
#container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-auto-flow: column;
}
<div id="container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div>
因此,如上所述,考虑多列布局解决方案。
规格参考:7.7。自动放置:grid-auto-flow
属性