Skip to content

Tailwind CSS - 弹性收缩

Tailwind CSS:控制 Flex Shrink(弹性收缩)

Section titled “Tailwind CSS:控制 Flex Shrink(弹性收缩)”

Tailwind CSS 中的 flex-shrink (弹性收缩) 工具类用于控制当空间不足时,flex 项目在同一 flex 容器内相对于其他项目如何收缩。它是创建响应式和健壮的 Flexbox 布局的基础部分。

默认情况下,flex 项目允许收缩 (flex-shrink: 1)。Tailwind 提供了控制此行为的工具类。

类名CSS 属性
shrinkflex-shrink: 1;
shrink-0flex-shrink: 0;
  • shrink:(默认行为) 当 flex 容器空间不足时,允许 flex 项目收缩。具有更高收缩因子的项目将收缩更多。
  • shrink-0:阻止 flex 项目收缩。该项目将保持其原始宽度,如果空间有限,可能会溢出容器。

flex-shrink 的一个经典用例是在网站页眉中。您通常希望徽标和用户头像保持其大小,而导航链接或搜索栏可以在较小的屏幕上收缩以适应。

在此示例中,我们将创建一个包含徽标、搜索栏和用户资料部分的页眉。搜索栏将被允许收缩,但徽标和用户资料部分不会。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Flex Shrink Example</title>
<!-- 假定已配置现代构建环境并生成 CSS -->
<link href="./output.css" rel="stylesheet">
<script src="https://kit.fontawesome.com/a076d05399.js" crossorigin="anonymous"></script> <!-- 用于图标 -->
</head>
<body class="bg-gray-100 p-4 font-sans">
<h1 class="text-2xl font-bold text-center mb-4">Responsive Header Component</h1>
<div class="max-w-4xl mx-auto border rounded-lg p-4 bg-gray-50">
<p class="text-center mb-4 text-gray-600">Resize your browser window to see the effect.</p>
<!-- 页眉容器 -->
<header class="bg-white p-4 rounded-lg shadow-md">
<div class="flex items-center space-x-4">
<!-- 徽标:不应收缩 -->
<div class="flex-shrink-0">
<img src="https://tailwindui.com/img/logos/workflow-logo-indigo-600-mark-gray-800-text.svg" alt="Logo" class="h-8 w-auto">
</div>
<!-- 搜索栏:将收缩以适应可用空间 -->
<div class="flex-1 min-w-0">
<div class="relative">
<input type="text" placeholder="Search for anything..."
class="w-full p-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-indigo-500 focus:border-indigo-500 transition">
</div>
</div>
<!-- 用户资料:不应收缩 -->
<div class="flex-shrink-0 flex items-center space-x-3">
<button class="p-2 rounded-full hover:bg-gray-200 text-gray-600">
<svg xmlns="http://www.w3.org/2000/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="M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6 6 0 10-12 0v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" /></svg>
</button>
<img class="h-10 w-10 rounded-full" src="https://source.unsplash.com/random/100x100?portrait" alt="User avatar">
</div>
</div>
</header>
</div>
<h2 class="text-2xl font-bold text-center mt-12 mb-4">Demonstration</h2>
<!-- 可视化 shrink 和 shrink-0 -->
<div class="max-w-4xl mx-auto border rounded-lg p-4 bg-white shadow-md">
<p class="mb-2 font-semibold">Container with one shrinking item:</p>
<div class="flex bg-gray-200 p-2 rounded">
<div class="shrink-0 p-4 bg-red-400 text-white rounded w-48 text-center">`shrink-0` (fixed width)</div>
<div class="shrink p-4 bg-blue-500 text-white rounded w-96 text-center">`shrink` (will shrink)</div>
<div class="shrink-0 p-4 bg-red-400 text-white rounded w-48 text-center">`shrink-0` (fixed width)</div>
</div>
</div>
</body>
</html>
  • 与 flex-basis 和 flex-grow 结合使用: flex-shrink 属性是 flex 简写属性的一部分。为了更复杂的控制,您可以使用 flex-1(它设置 flex: 1 1 0%)或 flex-auto(flex: 1 1 auto)等工具类。
  • 最小宽度: 除非设置了最小宽度,否则收缩的项目将无限期收缩。对收缩元素使用 min-w-* 工具类(例如 min-w-0),以防止它们完全坍缩并导致内容溢出问题。在我们的页眉示例中,搜索栏父级 div 上的 min-w-0 至关重要。
  • 响应式设计: 使用响应式前缀在不同断点处改变收缩行为。例如,一个项目在移动端可能是 shrink-0 (sm:shrink-0),但在大屏幕上则允许 shrink。