Skip to content

Tailwind CSS - 弹性

Tailwind 的 flex 工具类控制 flex 项目如何在容器中增长和收缩以填充可用空间。这些对于创建灵活响应式布局至关重要,使组件能够适应其大小。

这些类对应于 CSS 的 flex 简写属性,它控制着 flex-grow、flex-shrink 和 flex-basis。

类名CSS 属性描述
flex-1flex: 1 1 0%;允许项目增长和收缩,忽略其初始大小。它将占据所有可用空间。
flex-autoflex: 1 1 auto;允许项目增长和收缩,但会尊重其初始大小(基于其内容)。
flex-initialflex: 0 1 auto;允许项目在需要时收缩,但不会超出其初始大小。
flex-noneflex: none; (flex: 0 0 auto;)阻止项目增长或收缩。它将保持其自然大小。

让我们看看如何使用这些工具类来构建一个常见的三列布局。中间列将是灵活的并占据剩余空间,而侧边列将具有固定或基于内容的宽度。

<!-- 假设已完成现代 Tailwind CSS 设置 -->
<div class="p-8 bg-slate-100">
<h2 class="text-2xl font-bold mb-4 text-center">网站布局</h2>
<div class="flex gap-4 min-h-[200px] text-white text-center">
<!-- 左侧边栏:固定宽度,不增长或收缩 -->
<div class="flex-none w-32 bg-sky-600 rounded-lg flex items-center justify-center">
<p class="font-bold">flex-none</p>
</div>
<!-- 主要内容:占据所有可用空间 -->
<div class="flex-1 bg-sky-500 rounded-lg flex items-center justify-center">
<p class="font-bold text-lg">flex-1</p>
<p class="text-sm ml-2">(增长和收缩)</p>
</div>
<!-- 右侧边栏:在需要时收缩,但不增长 -->
<div class="flex-initial w-48 bg-sky-600 rounded-lg flex items-center justify-center">
<p class="font-bold">flex-initial</p>
<p class="text-sm ml-2">(收缩,不增长)</p>
</div>
</div>
</div>

flex-1 和 flex-auto 之间的区别可能很微妙。它归结为 flex-basis 值。

  • flex-1 (flex-basis: 0%):项目的尺寸计算从零开始。所有带有 flex-1 的项目将平均分配可用空间,无论其内容的宽度如何。
  • flex-auto (flex-basis: auto):项目的尺寸计算从其 auto 大小(即其内容的宽度)开始。然后分配剩余空间。这意味着内容较多的项目将比内容较少的项目大,即使两者都带有 flex-auto。
<div class="p-8 bg-slate-100 space-y-6">
<div>
<h3 class="font-semibold mb-2">使用 `flex-1`(平均分配)</h3>
<div class="flex gap-4 text-center text-white">
<div class="flex-1 bg-emerald-500 p-4 rounded-md">Short</div>
<div class="flex-1 bg-emerald-500 p-4 rounded-md">This is some longer content</div>
</div>
</div>
<div>
<h3 class="font-semibold mb-2">使用 `flex-auto`(基于内容分配)</h3>
<div class="flex gap-4 text-center text-white">
<div class="flex-auto bg-violet-500 p-4 rounded-md">Short</div>
<div class="flex-auto bg-violet-500 p-4 rounded-md">This is some longer content</div>
</div>
</div>
</div>
  • flex-1 与 width:当你对一个元素应用 flex-1 时,该元素上的任何 w-*(宽度)工具类通常会被忽略,因为 flex-basis: 0% 会覆盖它。
  • flex-none 用于尺寸调整:对于必须保持固定大小的元素,如图标、头像或标志,使用 flex-none 以防止它们被 flex 容器扭曲。
  • 结合 flex-basis:为了更精细的控制,你可以使用任意值直接设置 flex-basis,例如 basis-1/2 或 basis-[50%]。
  • 容器是关键:请记住,这些 flex-* 工具类只对带有 flex 类的元素的直接子元素起作用。