一、核心概念回顾
在使用 Tailwind CSS Flex 工具类前,需先掌握原生 Flex 布局的两个核心角色:
- Flex 容器 :通过
display: flex声明的父元素,所有直接子元素会自动成为 Flex 项目。 - Flex 项目:Flex 容器的直接子元素,可通过容器或自身的属性控制排列方式、大小等。
Tailwind CSS 将 Flex 布局的所有属性封装为工具类,命名规则遵循 属性名-属性值 的格式,例如 flex-row 对应 flex-direction: row。
二、基础工具类:构建 Flex 容器
1. 声明 Flex 容器
使用 flex 工具类将元素设置为 Flex 容器,子元素将默认沿水平方向排列。
| Tailwind 工具类 | 对应原生 CSS | 作用 |
|---|---|---|
flex |
display: flex |
声明块级 Flex 容器 |
inline-flex |
display: inline-flex |
声明行内 Flex 容器 |
示例代码:
html
<!-- 块级 Flex 容器 -->
<div class="flex">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
</div>
2. 控制项目排列方向(flex-direction)
通过 flex-row/flex-col 等工具类,控制 Flex 项目在容器中的排列方向。
| Tailwind 工具类 | 对应原生 CSS | 排列方向 |
|---|---|---|
flex-row |
flex-direction: row |
水平从左到右(默认值) |
flex-row-reverse |
flex-direction: row-reverse |
水平从右到左 |
flex-col |
flex-direction: column |
垂直从上到下 |
flex-col-reverse |
flex-direction: column-reverse |
垂直从下到上 |
示例代码:
html
<!-- 垂直排列的 Flex 容器 -->
<div class="flex flex-col">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
</div>
3. 控制项目换行(flex-wrap)
当 Flex 项目总宽度超过容器宽度时,使用 flex-wrap 类控制是否换行。
| Tailwind 工具类 | 对应原生 CSS | 换行行为 |
|---|---|---|
flex-nowrap |
flex-wrap: nowrap |
不换行(默认值),项目会被压缩 |
flex-wrap |
flex-wrap: wrap |
自动换行,超出部分另起一行 |
flex-wrap-reverse |
flex-wrap: wrap-reverse |
反向换行,超出部分向上另起一行 |
示例代码:
html
<!-- 自动换行的 Flex 容器 -->
<div class="flex flex-wrap w-60">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
<div class="bg-red-500 w-20 h-20">项目3</div>
</div>
三、核心布局控制:容器对齐方式
Tailwind CSS 提供了两组工具类,分别控制 Flex 项目在主轴 和交叉轴上的对齐方式,这是 Flex 布局的核心功能。
1. 主轴对齐(justify-content)
主轴方向由 flex-direction 决定:
- 水平排列时,主轴为水平方向
- 垂直排列时,主轴为垂直方向
| Tailwind 工具类 | 对应原生 CSS | 对齐效果 |
|---|---|---|
justify-start |
justify-content: flex-start |
靠主轴起点对齐(默认) |
justify-end |
justify-content: flex-end |
靠主轴终点对齐 |
justify-center |
justify-content: center |
主轴居中对齐 |
justify-between |
justify-content: space-between |
项目两端对齐,中间间距相等 |
justify-around |
justify-content: space-around |
项目两侧间距相等 |
justify-evenly |
justify-content: space-evenly |
所有间距(包括两端)相等 |
示例代码(水平居中):
html
<div class="flex justify-center w-80 h-40 bg-gray-100">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
</div>
2. 交叉轴对齐(items-align)
交叉轴是与主轴垂直的方向:
- 水平排列时,交叉轴为垂直方向
- 垂直排列时,交叉轴为水平方向
| Tailwind 工具类 | 对应原生 CSS | 对齐效果 |
|---|---|---|
items-start |
align-items: flex-start |
靠交叉轴起点对齐 |
items-end |
align-items: flex-end |
靠交叉轴终点对齐 |
items-center |
align-items: center |
交叉轴居中对齐 |
items-baseline |
align-items: baseline |
按项目基线对齐 |
items-stretch |
align-items: stretch |
项目拉伸填满交叉轴(默认) |
示例代码(垂直居中):
html
<div class="flex justify-center items-center w-80 h-40 bg-gray-100">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
</div>
3. 多行容器交叉轴对齐(content-align)
当 Flex 容器开启换行(flex-wrap: wrap)且存在多行项目时,使用 content-* 类控制多行整体在交叉轴的对齐方式。
| Tailwind 工具类 | 对应原生 CSS | 对齐效果 |
|---|---|---|
content-start |
align-content: flex-start |
靠交叉轴起点对齐 |
content-end |
align-content: flex-end |
靠交叉轴终点对齐 |
content-center |
align-content: center |
交叉轴居中对齐 |
content-between |
align-content: space-between |
多行两端对齐 |
content-around |
align-content: space-around |
多行两侧间距相等 |
content-stretch |
align-content: stretch |
多行拉伸填满交叉轴(默认) |
四、Flex 项目的自定义控制
除了通过容器控制所有项目,Tailwind 还提供了针对单个 Flex 项目的工具类,实现个性化布局。
1. 项目自身交叉轴对齐(self-align)
覆盖容器的 items-* 配置,单独控制某个项目的交叉轴对齐方式。
| Tailwind 工具类 | 对应原生 CSS | 对齐效果 |
|---|---|---|
self-auto |
align-self: auto |
继承容器的 align-items 值(默认) |
self-start |
align-self: flex-start |
靠交叉轴起点对齐 |
self-end |
align-self: flex-end |
靠交叉轴终点对齐 |
self-center |
align-self: center |
交叉轴居中对齐 |
self-stretch |
align-self: stretch |
拉伸填满交叉轴 |
示例代码:
html
<div class="flex items-start w-80 h-40 bg-gray-100">
<div class="bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20 self-center">项目2</div>
<div class="bg-red-500 w-20 h-20 self-end">项目3</div>
</div>
2. 项目的伸缩比例(flex-grow、flex-shrink、flex-basis)
这三个属性控制 Flex 项目的伸缩规则,Tailwind 提供了简洁的工具类:
- flex-grow :控制项目在容器有剩余空间时的放大比例
flex-grow-0:不放大(默认)flex-grow:放大,占据剩余所有空间
- flex-shrink :控制项目在容器空间不足时的缩小比例
flex-shrink-0:不缩小flex-shrink:缩小(默认)
- flex-basis :控制项目的初始大小,Tailwind 直接使用宽度类(如
w-20)或高度类(如h-20)替代
示例代码(自适应布局):
html
<div class="flex w-80 h-20 bg-gray-100">
<div class="w-16 h-full bg-blue-500">侧边</div>
<div class="flex-grow h-full bg-green-500">主内容</div>
</div>
3. 项目排序(order)
控制 Flex 项目的排列顺序,默认所有项目的 order 为 0。
| Tailwind 工具类 | 对应原生 CSS | 效果 |
|---|---|---|
order-0 |
order: 0 |
默认顺序 |
order-1 |
order: 1 |
顺序靠后 |
order-2 |
order: 2 |
顺序更靠后 |
| ... | ... | ... |
order-first |
order: -9999 |
排在最前面 |
order-last |
order: 9999 |
排在最后面 |
示例代码:
html
<div class="flex w-80">
<div class="order-last bg-blue-500 w-20 h-20">项目1</div>
<div class="bg-green-500 w-20 h-20">项目2</div>
</div>
五、响应式 Flex 布局
Tailwind CSS 支持响应式设计,所有 Flex 工具类都可以添加屏幕尺寸前缀,实现不同设备下的布局适配。
响应式前缀说明
| 前缀 | 屏幕尺寸 | 含义 |
|---|---|---|
sm: |
≥640px | 小屏幕(手机横屏) |
md: |
≥768px | 中等屏幕(平板) |
lg: |
≥1024px | 大屏幕(笔记本/桌面) |
xl: |
≥1280px | 超大屏幕 |
2xl: |
≥1536px | 极超大屏幕 |
响应式布局示例
html
<!-- 移动端垂直排列,平板及以上水平排列 -->
<div class="flex flex-col md:flex-row w-full">
<div class="bg-blue-500 h-20 md:w-1/3">侧边栏</div>
<div class="bg-green-500 h-20 md:w-2/3">主内容</div>
</div>
六、实战案例:实现一个导航栏
结合以上工具类,我们快速实现一个响应式导航栏:
html
<nav class="flex justify-between items-center p-4 bg-gray-800 text-white">
<div class="text-xl font-bold">Logo</div>
<!-- 移动端垂直排列,桌面端水平排列 -->
<div class="flex flex-col md:flex-row gap-4">
<a href="#" class="hover:text-gray-300">首页</a>
<a href="#" class="hover:text-gray-300">产品</a>
<a href="#" class="hover:text-gray-300">关于我们</a>
</div>
</nav>
七、总结
Tailwind CSS Flex 布局工具类的核心优势在于无需编写原生 CSS,通过语义化的类名组合,即可快速实现各类复杂、响应式的布局效果。掌握容器声明、排列方向、主轴/交叉轴对齐、项目伸缩控制这四大核心知识点,就能应对绝大多数前端布局场景。