Tailwind CSS Grid 布局

Grid 布局(网格布局)是目前 CSS 中最强大的二维布局系统。它非常适合处理复杂的网页结构,比如多列的新闻列表、商品画廊等。

Tailwind CSS Grid 基础语法

在 Tailwind CSS 中,如果想要开启 Grid 布局,我们首先需要在父容器加上 “grid” 类名,然后通过 “grid-cols-*” 来定义每一行有多少列。

“定义列数” 类名
类名 对应 CSS 说明
grid-cols-1 grid-template-columns: repeat(1, ...); 单列
grid-cols-2 grid-template-columns: repeat(2, ...); 两列
grid-cols-3 grid-template-columns: repeat(3, ...); 三列
grid-cols-4 grid-template-columns: repeat(4, ...); 四列
grid-cols-none grid-template-columns: none; 不分列

与 “Tailwind CSS Flex 布局” 一样,如果想要定义子元素之间的间距,我们也是使用 “gap-*” 相关类名来实现。

语法:

gap-{值}

说明:

这里的 “值” 可以是一个 “数字”,比如:

  • gap-1:表示间距为 4px。
  • gap-2:表示间距为 8px。
  • gap-3:表示间距为 12px。
  • ……

此外,“值” 也可以是任意值,比如 “gap-[10px]” 表示间距为 10px。

Grid 布局本身是比较复杂的,如果小伙伴们对这块不熟悉,一定要把原生 CSS Grid 布局相关的属性都搞清楚了,再来学习本节内容。其中,Grid 布局主要属性如下表所示。

CSS Grid 布局属性
属性 说明
grid-template-columns 定义网格的列
grid-template-rows 定义网格的行
grid-template-areas 定义网格的区域名称
grid-template 简写属性,设置网格的行、列和区域
grid-area 指定网格项目的区域
grid-row-start 设置网格项目的起始行
grid-row-end 设置网格项目的结束行
grid-row 简写属性,设置网格项目的行范围
grid-column-start 设置网格项目的起始列
grid-column-end 设置网格项目的结束列
grid-column 简写属性,设置网格项目的列范围
grid-auto-rows 设置自动生成的行尺寸
grid-auto-columns 设置自动生成的列尺寸
grid-auto-flow 控制网格项目的自动放置顺序

示例 1:标准三列布局

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
</head>
<body class="p-10">
    <div class="grid grid-cols-3 gap-4">
        <div class="h-20 bg-blue-400 rounded shadow"></div>
        <div class="h-20 bg-blue-400 rounded shadow"></div>
        <div class="h-20 bg-blue-400 rounded shadow"></div>
        <div class="h-20 bg-blue-400 rounded shadow"></div>
        <div class="h-20 bg-blue-400 rounded shadow"></div>
        <div class="h-20 bg-blue-400 rounded shadow"></div>
    </div>
</body>
</html>

页面效果如下图所示。

Tailwind Grid 实现标准三列布局

分析:

使用 Tailwind CSS 实现 3 列布局非常简单,我们首先给父元素加上 “grid”,表示开启网格布局。然后再给父元素加上 “grid-cols-3”,表示将父容器平均分为 3 份。

最后,“gap-4” 表示让每个子元素之间自动留出 16px 的空隙。这样即使这里有 6 个子元素,它们也会自动排列成 2 行、每行 3 个。

Tailwind CSS Grid 跨行跨列

有时候,我们希望某个子元素能占据比别的子元素更多的宽度或高度(比如第一篇文章是头条,需要占两份宽)。

在 Tailwind CSS 中,我们可以给子元素加一个 “row-span-*” 类名来实现跨行效果,也可以给子元素加一个 “col-span-*” 类名来实现跨列效果。

语法:

row-span-{数字}
col-span-{数字}

说明:

“row-span-*” 和 “col-span-*” 是相似的。就拿 “row-span-*” 来说,它必须写在子元素上,以表示该子元素跨越多少行,其中:

  • row-span-2:表示跨越 2 行。
  • row-span-3:表示跨越 3 行。
  • ……

示例 2:跨列效果

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
</head>
<body class="p-10">
    <div class="grid grid-cols-3 gap-4">
        <div class="col-span-2 h-20 bg-red-400 rounded"></div>
        <div class="h-20 bg-gray-300 rounded"></div>
        <div class="h-20 bg-gray-300 rounded"></div>
        <div class="h-20 bg-gray-300 rounded"></div>
        <div class="h-20 bg-gray-300 rounded"></div>
    </div>
</body>
</html>

页面效果如下图所示。

Tailwind Grid 实现跨列

分析:

“col-span-2” 表示该子元素需要横跨 2 列。

Tailwind CSS Grid 一键居中

在上一节学习 Flex 布局时,我们知道要让元素水平垂直居中,需要同时写 justify-center 和 items-center。

但如果使用了 Grid 布局,Tailwind CSS 提供了一个快捷的类名:place-items-center。只需这一个类名,我们就能让网格里的内容完美垂直居中和水平居中。

示例 3:Grid 实现完美居中

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <script src="https://unpkg.com/@tailwindcss/browser@4"></script>
</head>
<body class="p-10">
    <div class="grid place-items-center w-40 h-40 bg-red-300 rounded-lg">
        <div class="w-10 h-10 bg-green-300 rounded-full"></div>
    </div>
</body>
</html>

页面效果如下图所示。

Tailwind Grid 实现居中

分析:

我们同时给父元素加上 “grid” 和 “place-items-center” 这两个类,这样它内部的子元素就会自动水平居中,并且垂直居中了。

常见问题

1. 为什么我给父元素加上了 grid-cols-3,但它的子元素还是像列表一样垂直排列呢?

大概率是父元素漏写了最基础的 “grid” 类名。如果没有 grid 作为前提,那么 Grid 布局就不会生效,其子元素依然会按照默认的块级元素方式(占满一行)进行排版。

2. Grid 布局和 Flex 布局,到底应该怎么选呢?

小伙伴们记住一个简单的原则:

  • Flex 布局:适合用于 “一行” 或者 “一列” 的线性布局(一维)。比如导航栏、按钮组。
  • Grid 布局:适合用于 “多行多列” 的矩阵布局(二维)。比如照片墙、复杂的网页大框架。

在实际开发中,应该优先使用 Flex 布局。只有 Flex 布局无法实现或很难实现时,再去考虑使用 Grid 布局。

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号