Skip to content

Tailwind CSS - 网格自动流

Tailwind CSS 中的 grid-auto-flow 工具类控制元素如何在 CSS Grid 布局中自动放置。这对于创建动态和响应式网格(其中项目数量可能会变化)至关重要。

当您定义一个网格容器(例如,使用 grid 和 grid-cols-3)时,网格项目通常会自动放置。grid-auto-flow 工具类允许您指定这种自动放置的方向(row 或 column)以及用于填充间隙的算法(dense)。

类名CSS 属性描述
grid-flow-rowgrid-auto-flow: row;通过填充每一行,然后移动到下一行来放置项目。这是默认行为。
grid-flow-colgrid-auto-flow: column;通过填充每一列,然后移动到下一列来放置项目。
grid-flow-row-densegrid-auto-flow: row dense;使用 ‘dense’ 紧密包装算法和行流。它会尝试用较小的项目填充网格中的空洞。
grid-flow-col-densegrid-auto-flow: column dense;使用 ‘dense’ 紧密包装算法和列流,填充列中的间隙。

对于现代开发,建议通过 npm 安装 Tailwind CSS 并使用 Vite 或 Next.js 等构建工具。然而,为了这些快速演示,我们将使用 Tailwind Play CDN,它直接在浏览器中启用所有现代功能。

<!-- 为了演示目的,将此脚本添加到您的 HTML <head> 中 -->
<script src="https://cdn.tailwindcss.com"></script>

此示例演示了 grid-flow-row 和 grid-flow-col 之间的根本区别。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.tailwindcss.com"></script>
<title>Grid Auto Flow: Row vs. Column</title>
</head>
<body class="p-8 bg-slate-100 text-slate-800">
<h3 class="text-xl font-bold mb-4">1. grid-flow-row (默认)</h3>
<div class="grid grid-flow-row grid-cols-4 grid-rows-2 gap-4 mb-8">
<div class="bg-sky-500 rounded-lg p-4 font-mono text-white">1</div>
<div class="bg-sky-500 rounded-lg p-4 font-mono text-white">2</div>
<div class="bg-sky-500 rounded-lg p-4 font-mono text-white">3</div>
<div class="bg-sky-500 rounded-lg p-4 font-mono text-white">4</div>
<div class="bg-sky-500 rounded-lg p-4 font-mono text-white">5</div>
</div>
<h3 class="text-xl font-bold mb-4">2. grid-flow-col</h3>
<div class="grid grid-flow-col grid-cols-4 grid-rows-2 gap-4">
<div class="bg-violet-500 rounded-lg p-4 font-mono text-white">1</div>
<div class="bg-violet-500 rounded-lg p-4 font-mono text-white">2</div>
<div class="bg-violet-500 rounded-lg p-4 font-mono text-white">3</div>
<div class="bg-violet-500 rounded-lg p-4 font-mono text-white">4</div>
<div class="bg-violet-500 rounded-lg p-4 font-mono text-white">5</div>
</div>
</body>
</html>

示例 2:‘Dense’ 紧密包装的强大功能

Section titled “示例 2:‘Dense’ 紧密包装的强大功能”

dense 工具类功能强大。请观察 grid-flow-row-dense 如何填补大元素留下的空隙。如果没有 dense,项目 03 将出现在下一行,留下一个空白空间。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.tailwindcss.com"></script>
<title>Dense Packing</title>
</head>
<body class="p-8 bg-slate-100 text-slate-800">
<h3 class="text-xl font-bold mb-4">不使用 'dense'</h3>
<div class="grid grid-cols-4 gap-4 mb-8">
<div class="col-span-2 row-span-2 bg-rose-500 rounded-lg flex items-center justify-center font-mono text-white text-2xl">01</div>
<div class="bg-rose-300 rounded-lg flex items-center justify-center font-mono text-white">02</div>
<!-- 注意这里的间隙 -->
<div class="bg-rose-300 rounded-lg flex items-center justify-center font-mono text-white">03</div>
<div class="bg-rose-300 rounded-lg flex items-center justify-center font-mono text-white">04</div>
</div>
<h3 class="text-xl font-bold mb-4">使用 'grid-flow-row-dense'</h3>
<div class="grid grid-cols-4 grid-flow-row-dense gap-4">
<div class="col-span-2 row-span-2 bg-emerald-500 rounded-lg flex items-center justify-center font-mono text-white text-2xl">01</div>
<div class="bg-emerald-300 rounded-lg flex items-center justify-center font-mono text-white">02</div>
<!-- 项目 03 填补了空隙 -->
<div class="bg-emerald-300 rounded-lg flex items-center justify-center font-mono text-white">03</div>
<div class="bg-emerald-300 rounded-lg flex items-center justify-center font-mono text-white">04</div>
</div>
</body>
</html>

您可以使用响应式前缀根据屏幕尺寸改变流向。例如,grid-flow-row lg:grid-flow-col 将在小屏幕上按行堆叠项目,在大屏幕上切换到按列排列。

最佳实践:对于可预测、有序的内容,请使用 grid-flow-row。对于水平滚动的列表,请使用 grid-flow-col。对于图像画廊或仪表板,当视觉密度比项目顺序更重要时,请使用 dense 紧密包装。