现在位置: 首页 > Tailwind CSS 教程 > 正文

Tailwind CSS 与 Flexbox 和 Grid 布局

Tailwind CSS 提供了强大的工具类来管理布局,特别是 Flexbox 和 Grid。

Flexbox 和 Grid 这些工具类使得你可以非常高效地创建响应式、灵活的布局,而无需编写自定义的 CSS。

Tailwind CSS 的理念是通过低层级的实用类(utility-first)来控制布局,灵活组合类以满足不同的设计需求。


1、Flexbox 布局

Flexbox 是一种布局模式,可以帮助开发者创建一维的(水平或垂直)布局。

Tailwind CSS 提供了多个简洁的工具类来控制 Flexbox 布局的各个方面,包括方向、对齐、伸缩等。

设置 Flex 容器

要创建一个 Flexbox 布局,首先需要将元素设为 flex 容器。

实例

<div class="flex">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
</div>

尝试一下 »

flex 将元素的 display 设置为 flex,即启用 Flexbox 布局。

flex 项初始大小的工具类及其对应的 CSS 属性:

Tailwind类名CSS属性及值描述
basis-0flex-basis:0px;设置flex项的基础大小为0px。
basis-1flex-basis:0.25rem;设置flex项的基础大小为4px。
basis-2flex-basis:0.5rem;设置flex项的基础大小为8px。
basis-3flex-basis:0.75rem;设置flex项的基础大小为12px。
basis-4flex-basis:1rem;设置flex项的基础大小为16px。
basis-5flex-basis:1.25rem;设置flex项的基础大小为20px。
basis-6flex-basis:1.5rem;设置flex项的基础大小为24px。
basis-7flex-basis:1.75rem;设置flex项的基础大小为28px。
basis-8flex-basis:2rem;设置flex项的基础大小为32px。
basis-9flex-basis:2.25rem;设置flex项的基础大小为36px。
basis-10flex-basis:2.5rem;设置flex项的基础大小为40px。
basis-11flex-basis:2.75rem;设置flex项的基础大小为44px。
basis-12flex-basis:3rem;设置flex项的基础大小为48px。
basis-14flex-basis:3.5rem;设置flex项的基础大小为56px。
basis-16flex-basis:4rem;设置flex项的基础大小为64px。
basis-20flex-basis:5rem;设置flex项的基础大小为80px。
basis-24flex-basis:6rem;设置flex项的基础大小为96px。
basis-28flex-basis:7rem;设置flex项的基础大小为112px。
basis-32flex-basis:8rem;设置flex项的基础大小为128px。
basis-36flex-basis:9rem;设置flex项的基础大小为144px。
basis-40flex-basis:10rem;设置flex项的基础大小为160px。
basis-44flex-basis:11rem;设置flex项的基础大小为176px。
basis-48flex-basis:12rem;设置flex项的基础大小为192px。
basis-52flex-basis:13rem;设置flex项的基础大小为208px。
basis-56flex-basis:14rem;设置flex项的基础大小为224px。
basis-60flex-basis:15rem;设置flex项的基础大小为240px。
basis-64flex-basis:16rem;设置flex项的基础大小为256px。
basis-72flex-basis:18rem;设置flex项的基础大小为288px。
basis-80flex-basis:20rem;设置flex项的基础大小为320px。
basis-96flex-basis:24rem;设置flex项的基础大小为384px。
basis-autoflex-basis:auto;设置flex项的基础大小为自动。
basis-pxflex-basis:1px;设置flex项的基础大小为1px。
basis-0.5flex-basis:0.125rem;设置flex项的基础大小为2px。
basis-1.5flex-basis:0.375rem;设置flex项的基础大小为6px。
basis-2.5flex-basis:0.625rem;设置flex项的基础大小为10px。
basis-3.5flex-basis:0.875rem;设置flex项的基础大小为14px。
basis-1/2flex-basis:50%;设置flex项的基础大小为容器宽度的一半。
basis-1/3flex-basis:33.333333%;设置flex项的基础大小为容器宽度的三分之一。
basis-2/3flex-basis:66.666667%;设置flex项的基础大小为容器宽度的三分之二。
basis-1/4flex-basis:25%;设置flex项的基础大小为容器宽度的四分之一。
basis-2/4flex-basis:50%;设置flex项的基础大小为容器宽度的二分之一。
basis-3/4flex-basis:75%;设置flex项的基础大小为容器宽度的四分之三。
basis-1/5flex-basis:20%;设置flex项的基础大小为容器宽度的五分之一。
basis-2/5flex-basis:40%;设置flex项的基础大小为容器宽度的五分之二。
basis-3/5flex-basis:60%;设置flex项的基础大小为容器宽度的五分之三。
basis-4/5flex-basis:80%;设置flex项的基础大小为容器宽度的五分之四。
basis-1/6flex-basis:16.666667%;设置flex项的基础大小为容器宽度的六分之一。
basis-2/6flex-basis:33.333333%;设置flex项的基础大小为容器宽度的六分之二。
basis-3/6flex-basis:50%;设置flex项的基础大小为容器宽度的三分之二。
basis-4/6flex-basis:66.666667%;设置flex项的基础大小为容器宽度的六分之四。
basis-5/6flex-basis:83.333333%;设置flex项的基础大小为容器宽度的六分之五。
basis-1/12flex-basis:8.333333%;设置flex项的基础大小为8.33%。
basis-2/12flex-basis:16.666667%;设置flex项的基础大小为16.67%。
basis-3/12flex-basis:25%;设置flex项的基础大小为25%。
basis-4/12flex-basis:33.333333%;设置flex项的基础大小为33.33%。
basis-5/12flex-basis:41.666667%;设置flex项的基础大小为41.67%。
basis-6/12flex-basis:50%;设置flex项的基础大小为50%。
basis-7/12flex-basis:58.333333%;设置flex项的基础大小为58.33%。
basis-8/12flex-basis:66.666667%;设置flex项的基础大小为66.67%。
basis-9/12flex-basis:75%;设置flex项的基础大小为75%。
basis-10/12flex-basis:83.333333%;设置flex项的基础大小为83.33%。
basis-11/12flex-basis:91.666667%;设置flex项的基础大小为91.67%。
basis-fullflex-basis:100%;设置flex项的基础大小为100%。

实例

<div class="flex flex-row">
  <div class="basis-1/4">01</div>
  <div class="basis-1/4">02</div>
  <div class="basis-1/2">03</div>
</div>

尝试一下 »

Flex 方向

flex-direction 控制主轴的方向(即 Flex 容器内项目排列的方向)。

Tailwind 提供了以下工具类来设置方向:

  • flex-row: 默认值,子项按水平方向从左到右排列。
  • flex-row-reverse: 子项按水平方向从右到左排列。
  • flex-col: 子项按垂直方向从上到下排列。
  • flex-col-reverse: 子项按垂直方向从下到上排列。

实例

<div class="flex flex-row ...">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

<div class="flex flex-row-reverse ...">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

<div class="flex flex-col ...">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

尝试一下 »

Flex 包裹(Flex Wrap)

默认情况下,Flexbox 容器中的项目会在单行内排列。

如果你希望它们换行,可以使用 flex-wrap 工具类。

  • flex-wrap: 允许项目换行。
  • flex-nowrap: 禁止项目换行。
  • flex-wrap-reverse: 反向换行。

实例

<div class="flex flex-nowrap">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

<div class="flex flex-wrap">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

<div class="flex flex-wrap-reverse">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

尝试一下 »

Flex 项目的伸缩性

Flexbox 允许元素的大小根据可用空间进行伸缩。

Tailwind CSS 提供了以下工具类来控制伸缩:

Tailwind 类名CSS 属性及值描述
flex-1flex: 1 1 0%;使 flex 项具有等量的 flex 增长和收缩能力,基础大小为 0%,常用于创建等宽或等高的 flex 布局。
flex-autoflex: 1 1 auto;使 flex 项具有自动的基础大小和等量的 flex 增长和收缩能力,常用于让 flex 项填充额外空间。
flex-initialflex: 0 1 auto;使 flex 项具有自动的基础大小,不增长但可以收缩,用于保持元素的自然大小,除非空间不足。
flex-noneflex: none;防止 flex 项增长或收缩,使其保持基础大小,常用于固定元素的大小。

实例

<div class="flex">
  <div class="flex-none w-14 ...">
    01
  </div>
  <div class="flex-initial w-64 ...">
    02
  </div>
  <div class="flex-initial w-32 ...">
    03
  </div>
</div>


<div class="flex">
  <div class="flex-none w-14 ...">
    01
  </div>
  <div class="flex-1 w-64 ...">
    02
  </div>
  <div class="flex-1 w-32 ...">
    03
  </div>
</div>


尝试一下 »

flex-grow 属性

以下是控制 flex 项的 flex-grow 属性的工具类及其对应的 CSS 属性:

Tailwind 类名CSS 属性及值描述
growflex-grow: 1;允许 flex 项增长以填充额外空间,其增长比例为 1。
grow-0flex-grow: 0;防止 flex 项增长以填充额外空间,其增长比例为 0。

实例

<div class="flex ...">
  <div class="flex-none w-14 h-14 ...">
    01
  </div>
  <div class="grow h-14 ...">
    02
  </div>
  <div class="flex-none w-14 h-14 ...">
    03
  </div>
</div>

尝试一下 »

flex-shrink 属性

以下是控制 flex 项的 flex-shrink 属性的工具类及其对应的 CSS 属性:

Tailwind 类名CSS 属性及值描述
shrinkflex-shrink: 1;允许 flex 项在必要时缩小以适应 flex 容器,其缩小比例为 1。
shrink-0flex-shrink: 0;防止 flex 项在必要时缩小以适应 flex 容器,其缩小比例为 0。

实例

<div class="flex ...">
  <div class="flex-none w-14 h-14 ...">
    01
  </div>
  <div class="shrink w-64 h-14 ...">
    02
  </div>
  <div class="flex-none w-14 h-14 ...">
    03
  </div>
</div>

尝试一下 »

排序

以下是用于控制 flex 项或 grid 项排列顺序的工具类及其对应的 CSS 属性:

Tailwind 类名CSS 属性及值描述
order-1order: 1;将 flex 项或 grid 项的排列顺序设置为 1。
order-2order: 2;将 flex 项或 grid 项的排列顺序设置为 2。
order-3order: 3;将 flex 项或 grid 项的排列顺序设置为 3。
order-4order: 4;将 flex 项或 grid 项的排列顺序设置为 4。
order-5order: 5;将 flex 项或 grid 项的排列顺序设置为 5。
order-6order: 6;将 flex 项或 grid 项的排列顺序设置为 6。
order-7order: 7;将 flex 项或 grid 项的排列顺序设置为 7。
order-8order: 8;将 flex 项或 grid 项的排列顺序设置为 8。
order-9order: 9;将 flex 项或 grid 项的排列顺序设置为 9。
order-10order: 10;将 flex 项或 grid 项的排列顺序设置为 10。
order-11order: 11;将 flex 项或 grid 项的排列顺序设置为 11。
order-12order: 12;将 flex 项或 grid 项的排列顺序设置为 12。
order-firstorder: -9999;将 flex 项或 grid 项的排列顺序设置为最前。
order-lastorder: 9999;将 flex 项或 grid 项的排列顺序设置为最后。
order-noneorder: 0;将 flex 项或 grid 项的排列顺序设置为默认顺序,即不改变其顺序。

实例

<div class="flex justify-between ...">
  <div class="order-last">01</div>
  <div>02</div>
  <div>03</div>
</div>

尝试一下 »

Grid (网格) 布局

Grid 是另一种布局模型,允许你在行和列中精确地定位元素,并且能够轻松创建复杂的布局。

Tailwind CSS 提供了强大的工具类来操作网格布局。

以下是 Tailwind CSS 中用于指定网格布局中列数的工具类及其对应的 CSS 属性:

Tailwind 类名CSS 属性及值描述
grid-cols-1grid-template-columns: repeat(1, minmax(0, 1fr));创建一个包含1列的网格布局。
grid-cols-2grid-template-columns: repeat(2, minmax(0, 1fr));创建一个包含2列的网格布局。
grid-cols-3grid-template-columns: repeat(3, minmax(0, 1fr));创建一个包含3列的网格布局。
grid-cols-4grid-template-columns: repeat(4, minmax(0, 1fr));创建一个包含4列的网格布局。
grid-cols-5grid-template-columns: repeat(5, minmax(0, 1fr));创建一个包含5列的网格布局。
grid-cols-6grid-template-columns: repeat(6, minmax(0, 1fr));创建一个包含6列的网格布局。
grid-cols-7grid-template-columns: repeat(7, minmax(0, 1fr));创建一个包含7列的网格布局。
grid-cols-8grid-template-columns: repeat(8, minmax(0, 1fr));创建一个包含8列的网格布局。
grid-cols-9grid-template-columns: repeat(9, minmax(0, 1fr));创建一个包含9列的网格布局。
grid-cols-10grid-template-columns: repeat(10, minmax(0, 1fr));创建一个包含10列的网格布局。
grid-cols-11grid-template-columns: repeat(11, minmax(0, 1fr));创建一个包含11列的网格布局。
grid-cols-12grid-template-columns: repeat(12, minmax(0, 1fr));创建一个包含12列的网格布局。
grid-cols-nonegrid-template-columns: none;不创建网格列,子元素将不使用网格布局。
grid-cols-subgridgrid-template-columns: subgrid;使用子网格布局,子元素将继承父网格的列定义。

实例

<div class="grid grid-cols-4 gap-4">
  <div>01</div>
  <!-- ... -->
  <div>09</div>
</div>

尝试一下 »
  • grid: 启用 Grid 布局。
  • grid-cols-{n}: 设置网格的列数。
  • gap-{size}: 设置列和行之间的间距。

Grid 行与列

通过 grid-template-columnsgrid-template-rows 控制列和行的宽度和高度。Tailwind 提供了如下的工具类来控制:

  • grid-cols-{n}: 设置网格的列数(例如 grid-cols-3 表示三列)。
  • grid-rows-{n}: 设置网格的行数(例如 grid-rows-2 表示两行)。
  • col-span-{n}: 设置一个项目占用多少列。
  • row-span-{n}: 设置一个项目占用多少行。

实例

<div class="grid grid-cols-4 gap-4">
  <div>01</div>
  <!-- ... -->
  <div>05</div>
  <div class="grid grid-cols-subgrid gap-4 col-span-3">
    <div class="col-start-2">06</div>
  </div>
</div>

尝试一下 »

实例

<div class="grid grid-cols-3 gap-4">
  <div class="...">01</div>
  <div class="...">02</div>
  <div class="...">03</div>
  <div class="col-span-2 ...">04</div>
  <div class="...">05</div>
  <div class="...">06</div>
  <div class="col-span-2 ...">07</div>
</div>

尝试一下 »

实例

<div class="grid grid-rows-3 grid-flow-col gap-4">
  <div class="row-span-3 ...">01</div>
  <div class="col-span-2 ...">02</div>
  <div class="row-span-2 col-span-2 ...">03</div>
</div>

尝试一下 »

Grid 项目的定位

grid-column 和 grid-row 控制每个项目在网格中的位置。

你可以通过以下工具类来指定:

  • col-start-{n}: 设置项目从第 n 列开始。
  • col-end-{n}: 设置项目到第 n 列结束。
  • row-start-{n}: 设置项目从第 n 行开始。
  • row-end-{n}: 设置项目到第 n 行结束。

实例

<div class="grid grid-cols-6 gap-4">
  <div class="col-start-2 col-span-4 ...">01</div>
  <div class="col-start-1 col-end-3 ...">02</div>
  <div class="col-end-7 col-span-2 ...">03</div>
  <div class="col-start-1 col-end-7 ...">04</div>
</div>

尝试一下 »

实例

<div class="grid grid-rows-3 grid-flow-col gap-4">
  <div class="row-start-2 row-span-2 ...">01</div>
  <div class="row-end-3 row-span-2 ...">02</div>
  <div class="row-start-1 row-end-4 ...">03</div>
</div>

尝试一下 »

对齐和分布

类似于 Flexbox,Grid 也提供了对齐和分布的选项。

justify-content 属性用于对齐容器内的子元素沿着主轴(水平方向)进行排列。

Tailwind 类名CSS 属性及值描述
justify-normaljustify-content: normal;使用默认的对齐方式,通常等同于 start
justify-startjustify-content: flex-start;将所有子元素移至容器的起始端。在水平布局中,子元素会靠左对齐。
justify-endjustify-content: flex-end;将所有子元素移至容器的结束端。在水平布局中,子元素会靠右对齐。
justify-centerjustify-content: center;将所有子元素居中对齐。
justify-betweenjustify-content: space-between;子元素之间的空间均等分布,两端不留空白。
justify-aroundjustify-content: space-around;子元素之间的空间均等分布,两端留有一半的空白。
justify-evenlyjustify-content: space-evenly;子元素之间的空间完全均等,包括两端的空白。
justify-stretchjustify-content: stretch;子元素被拉伸以填充容器,每个子元素占据相同的空间。

实例

<div class="flex justify-start ...">
  <div>01</div>
  <div>02</div>
  <div>03</div>
</div>

尝试一下 »

其他对齐设置:

  • justify-items: 控制网格单元格内容的对齐方式。
  • justify-self: 控制单个网格项目的对齐方式。
  • align-items: 控制网格单元格的垂直对齐方式。
  • align-self: 控制单个网格项目的垂直对齐方式。

实例

<div class="grid justify-items-start ...">
  <div>01</div>
  <div>02</div>
  <div>03</div>
  <div>04</div>
  <div>05</div>
  <div>06</div>
</div>

尝试一下 »