Skip to content

Tailwind CSS - 网格自动行

现代 CSS Grid:使用 Tailwind CSS 控制隐式行的大小

Section titled “现代 CSS Grid:使用 Tailwind CSS 控制隐式行的大小”

在 CSS Grid 中,当您添加的项目多于网格模板定义时,浏览器会创建隐式行来容纳它们。Tailwind CSS 中的 grid-auto-rows 工具类让您可以精确控制这些自动生成行的高度,确保您的布局保持一致和可预测。

虽然您可以使用 CDN 进行快速演示,但对于任何实际项目,强烈建议通过包管理器安装 Tailwind CSS 作为 PostCSS 插件。这可以释放 Tailwind 的全部潜力,包括自定义、插件和用于优化生产构建的 tree-shaking。

以下是使用 Vite 的典型设置:

Terminal window
# 1. 使用 Vite(或您喜欢的工具)创建一个新项目
npm create vite@latest my-tailwind-project -- --template vanilla
cd my-tailwind-project
# 2. 安装 Tailwind CSS 及其对等依赖项
npm install -D tailwindcss postcss autoprefixer
# 3. 初始化 Tailwind CSS
npx tailwindcss init -p

这将创建 tailwind.config.js 和 postcss.config.js 文件,您将配置它们来处理您的 CSS。以下所有示例都适用于 CDN 或适当的设置。

以下是用于管理隐式创建的网格行大小的核心工具类。这些类应用于网格容器。

类名CSS 属性常见用例
auto-rows-autogrid-auto-rows: auto;行根据其最高内容的高度自适应。适用于内容大小多样的网格。
auto-rows-mingrid-auto-rows: min-content;行收缩到其内容所需的最小高度。适用于紧凑、密集的布局。
auto-rows-maxgrid-auto-rows: max-content;行扩展到其内容的最大固有高度。确保内容永不换行或被截断。
auto-rows-frgrid-auto-rows: minmax(0, 1fr);隐式行平均分配剩余垂直空间。非常适合创建统一、全高的行。

示例 1:使用 auto-rows-auto 实现基于内容的行高

Section titled “示例 1:使用 auto-rows-auto 实现基于内容的行高”

auto-rows-auto 工具类是默认行为。每条隐式行的高度由其中最高的项目决定。这在内容差异很大且您希望避免空白空间时非常有用。

<!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>Auto Rows: Auto</title>
</head>
<body class="bg-slate-100 p-8">
<div class="container mx-auto">
<h2 class="text-2xl font-bold mb-4 text-slate-800">Product Gallery</h2>
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 auto-rows-auto">
<div class="bg-cyan-500 text-white p-4 rounded-lg shadow-lg">Item 1</div>
<div class="bg-cyan-600 text-white p-4 h-32 rounded-lg shadow-lg">Item 2 (Taller)</div>
<div class="bg-cyan-500 text-white p-4 rounded-lg shadow-lg">Item 3</div>
<div class="bg-cyan-500 text-white p-4 rounded-lg shadow-lg">Item 4</div>
<!-- 此项目启动一个隐式行 -->
<div class="bg-teal-500 text-white p-4 rounded-lg shadow-lg">Item 5 (Implicit Row)</div>
<div class="bg-teal-600 text-white p-4 h-40 rounded-lg shadow-lg">Item 6 (Implicit Row, Taller)</div>
</div>
</div>
</body>
</html>

示例 2:使用 auto-rows-fr 创建统一的弹性行

Section titled “示例 2:使用 auto-rows-fr 创建统一的弹性行”

auto-rows-fr 工具类非常适合创建干净、统一的网格,其中每条隐式行都占据网格容器中可用空间的相等部分。为了使其具有可见效果,网格容器必须具有定义的 height(高度)。

<!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>Auto Rows: FR</title>
</head>
<body class="bg-slate-100 p-8">
<div class="container mx-auto">
<h2 class="text-2xl font-bold mb-4 text-slate-800">Feature List</h2>
<!-- 网格容器需要一个高度,以使 'fr' 单位生效 -->
<div class="grid grid-cols-3 auto-rows-fr gap-4 h-96 bg-white p-4 rounded-lg shadow-md">
<div class="bg-indigo-400 text-white flex items-center justify-center p-4 rounded-lg">Feature 1</div>
<div class="bg-indigo-400 text-white flex items-center justify-center p-4 rounded-lg">Feature 2</div>
<div class="bg-indigo-400 text-white flex items-center justify-center p-4 rounded-lg">Feature 3</div>
<!-- 这条隐式行也将占据 96 单元高度中的一部分 -->
<div class="bg-violet-500 text-white flex items-center justify-center p-4 rounded-lg">Implicit Row Item</div>
</div>
</div>
</body>
</html>
  • grid-template-rows 与 grid-auto-rows: 一个常见的混淆点。使用 rows-{n} (grid-template-rows) 来定义显式网格行(您计划好的行)的大小。使用 auto-rows-* (grid-auto-rows) 来定义任何自动创建的隐式行的尺寸模式。
  • auto-rows-fr 不起作用? fr 单位分配的是可用空间。如果您的网格容器的高度仅由其内容决定,那么就没有“可用空间”可供分配。为网格容器指定一个具体的高度(例如,h-screen,h-[500px])才能看到 auto-rows-fr 的效果。
  • 调试技巧: 使用浏览器的开发者工具检查网格。大多数浏览器都有一个网格检查器,可以直观地叠加网格线,清晰地显示显式和隐式轨道之间的区别。这是诊断布局问题的最快方法。