Skip to content

Tailwind CSS - 弹性增长

Tailwind CSS 现代指南:Flex Grow(弹性伸缩)

Section titled “Tailwind CSS 现代指南:Flex Grow(弹性伸缩)”

欢迎阅读 Tailwind CSS Flex Grow (弹性伸缩) 工具类的最新指南。本教程将通过现代最佳实践和实际示例,教您如何控制 flex 容器中 flex 项目的伸缩(增长)行为。

CSS 中的 flex-grow 属性定义了 flex 项目在必要时增长的能力。它接受一个无单位的值,作为比例。它决定了项目应该占据 flex 容器内多少可用空间。

Tailwind 提供了简单的工具类来管理这种行为。

Tailwind 控制 flex 增长的主要工具类非常直观:

类名CSS 属性描述
growflex-grow: 1;允许 flex 项目增长,填充容器中所有可用空间。
grow-0flex-grow: 0;阻止 flex 项目增长,保持其默认尺寸。

让我们通过实际操作来了解这些工具类。我们将构建一个常见的布局模式:一个带有固定大小图标、可伸缩内容区域和固定大小按钮的卡片。

在此示例中,中间的 div 元素带有 grow 类。它将扩展以占据 flex 容器中所有剩余的水平空间,将第三个项目推到最右侧。这对于需要某个元素流式布局的场景非常适用。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Flex Grow Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100 p-8">
<h2 class="text-2xl font-bold mb-4">Card with a Growing Section</h2>
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden">
<div class="flex items-center p-4 border-b">
<!-- 项目 1:不增长,固定尺寸 -->
<div class="flex-none p-3 bg-sky-200 text-sky-800 rounded-lg">
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>
</div>
<!-- 项目 2:增长以填充可用空间 -->
<div class="grow ml-4">
<p class="text-slate-800 font-semibold">Information</p>
<p class="text-slate-500 text-sm">This section expands as needed.</p>
</div>
<!-- 项目 3:不增长,基于内容尺寸 -->
<div class="flex-none ml-4">
<button class="px-4 py-2 bg-blue-500 text-white text-sm font-medium rounded-md hover:bg-blue-600">Details</button>
</div>
</div>
</div>
</body>
</html>

在这里,我们将 grow-0 应用于中间的项目。请注意,它现在只占据由其内容和内边距(padding)定义的空间。flex 容器中的额外空间保持为空白。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Flex Grow-0 Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100 p-8">
<h2 class="text-2xl font-bold mb-4">Layout with a Non-Growing Section</h2>
<div class="w-full bg-white p-4 rounded-lg shadow-md">
<div class="flex bg-slate-200 p-2 rounded-md">
<div class="flex-none bg-indigo-500 text-white p-4 rounded">
Item 1 (flex-none)
</div>
<!-- 此项目将不会增长 -->
<div class="grow-0 bg-amber-500 text-white p-4 mx-4 rounded">
Item 2 (grow-0)
</div>
<div class="flex-none bg-indigo-500 text-white p-4 rounded">
Item 3 (flex-none)
</div>
</div>
</div>
</body>
</html>
  • 响应式增长: 将 grow 与响应式前缀结合使用,以在不同屏幕尺寸下改变布局。例如,md:grow 将只在中等屏幕及以上应用增长行为。
  • 与 flex-shrink 和 flex-basis 结合使用: 对于复杂布局,grow 与 shrink(项目如何收缩)和 basis(项目的理想起始尺寸)协同工作。Tailwind 也提供了这些工具类(shrink,basis-*)。
  • 现代开发工作流: 尽管 CDN 非常适合演示,但实际项目应结合 Vite 或 Tailwind CLI 等构建工具使用 Tailwind CSS。这能启用诸如清除未使用的样式以减小生产文件体积、以及自定义 tailwind.config.js 文件等功能。
  • 忘记 flex 父元素: grow 和 grow-0 工具类仅对具有 display: flex 样式(即 Tailwind 中的 flex 类)的元素的直接子元素生效。
  • 在增长项上使用 w-full: 对带有 grow 的项目应用 w-full 等宽度工具类通常是多余的,因为 grow 已经旨在管理项目沿主轴的尺寸。