grid-auto-flow

Baseline 已广泛支持

此功能已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 10 月以来,它已在各大浏览器中可用。

grid-auto-flow CSS 属性控制自动布局算法的工作方式,它精确指定了自动放置的项目如何流入网格。

试一试

grid-auto-flow: row;
grid-auto-flow: column;
grid-auto-flow: row dense;
<section class="default-example" id="default-example">
  <div class="example-container">
    <div class="transition-all" id="example-element">
      <div>One</div>
      <div>Two</div>
      <div>Three</div>
      <div>Four</div>
      <div>Five</div>
    </div>
  </div>
</section>
#example-element {
  border: 1px solid #c5c5c5;
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: repeat(3, minmax(40px, auto));
  grid-gap: 10px;
  width: 220px;
}

#example-element > div {
  background-color: rgb(0 0 255 / 0.2);
  border: 3px solid blue;
}

#example-element > div:nth-child(1) {
  grid-column: auto / span 2;
}

#example-element > div:nth-child(2) {
  grid-column: auto / span 2;
}

注意: masonry-auto-flow 属性已从 CSS 瀑布流布局中移除,取而代之的是 grid-auto-flow。详情请参阅 csswg-drafts #10231

语法

css
/* Keyword values */
grid-auto-flow: row;
grid-auto-flow: column;
grid-auto-flow: dense;
grid-auto-flow: row dense;
grid-auto-flow: column dense;

/* Global values */
grid-auto-flow: inherit;
grid-auto-flow: initial;
grid-auto-flow: revert;
grid-auto-flow: revert-layer;
grid-auto-flow: unset;

此属性可以采取以下两种形式之一:

  • 单个关键词:rowcolumndense 之一。
  • 两个关键词:row densecolumn dense

row

项目通过依次填充每行进行放置,必要时添加新行。如果未提供 row 也未提供 column,则假定为 row

column

项目通过依次填充每列进行放置,必要时添加新列。

dense

"密集"打包算法试图在网格中更早地填充空洞,如果后面有更小的项目出现。当这样做能够填补较大项目留下的空洞时,这可能会导致项目出现乱序。

如果省略,则使用“稀疏”算法,其中布局算法在放置项目时只在网格中“向前”移动,从不回溯以填充空洞。这确保了所有自动放置的项目都“按顺序”出现,即使这会留下本可以被后续项目填充的空洞。

正式定义

初始值row
应用于网格容器
继承性
计算值同指定值
动画类型离散

正式语法

grid-auto-flow = 
[ row | column ] ||
dense

示例

设置网格自动布局

HTML

html
<div id="grid">
  <div id="item1"></div>
  <div id="item2"></div>
  <div id="item3"></div>
  <div id="item4"></div>
  <div id="item5"></div>
</div>
<select id="direction">
  <option value="column">column</option>
  <option value="row">row</option>
</select>
<input id="dense" type="checkbox" />
<label for="dense">dense</label>

CSS

css
#grid {
  height: 200px;
  width: 200px;
  display: grid;
  gap: 10px;
  grid-template: repeat(4, 1fr) / repeat(2, 1fr);
  grid-auto-flow: column; /* or 'row', 'row dense', 'column dense' */
}

#item1 {
  background-color: lime;
  grid-row-start: 3;
}

#item2 {
  background-color: yellow;
}

#item3 {
  background-color: blue;
}

#item4 {
  grid-column-start: 2;
  background-color: red;
}

#item5 {
  background-color: aqua;
}

结果

规范

规范
CSS 网格布局模块 Level 2
# grid-auto-flow-property

浏览器兼容性

另见